first commit
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
<?php
|
||||
|
||||
/**
|
||||
* @file classes/user/form/UserFormHelper.php
|
||||
*
|
||||
* Copyright (c) 2014-2021 Simon Fraser University
|
||||
* Copyright (c) 2003-2021 John Willinsky
|
||||
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
||||
*
|
||||
* @class UserFormHelper
|
||||
*
|
||||
* @ingroup user_form
|
||||
*
|
||||
* @brief Helper functions for shared user form concerns.
|
||||
*/
|
||||
|
||||
namespace PKP\user\form;
|
||||
|
||||
use APP\core\Application;
|
||||
use APP\facades\Repo;
|
||||
use PKP\core\PKPRequest;
|
||||
use PKP\form\Form;
|
||||
use PKP\security\Role;
|
||||
use PKP\template\PKPTemplateManager;
|
||||
use PKP\user\User;
|
||||
|
||||
class UserFormHelper
|
||||
{
|
||||
/**
|
||||
* Constructor
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
}
|
||||
|
||||
/**
|
||||
* Assign role selection content to the template manager.
|
||||
*
|
||||
* @param PKPTemplateManager $templateMgr
|
||||
* @param PKPRequest $request
|
||||
*/
|
||||
public function assignRoleContent($templateMgr, $request)
|
||||
{
|
||||
// Need the count in order to determine whether to display
|
||||
// extras-on-demand for role selection in other contexts.
|
||||
$contextDao = Application::getContextDAO();
|
||||
$contexts = $contextDao->getAll(true)->toArray();
|
||||
$contextsWithUserRegistration = [];
|
||||
foreach ($contexts as $context) {
|
||||
if (!$context->getData('disableUserReg')) {
|
||||
$contextsWithUserRegistration[] = $context;
|
||||
}
|
||||
}
|
||||
$templateMgr->assign([
|
||||
'contexts' => $contexts,
|
||||
'showOtherContexts' => !$request->getContext() || count($contextsWithUserRegistration) > 1,
|
||||
]);
|
||||
|
||||
// Expose potential self-registration user groups to template
|
||||
$authorUserGroups = $reviewerUserGroups = $readerUserGroups = [];
|
||||
|
||||
foreach ($contexts as $context) {
|
||||
if ($context->getData('disableUserReg')) {
|
||||
continue;
|
||||
}
|
||||
$reviewerUserGroups[$context->getId()] = Repo::userGroup()->getByRoleIds([Role::ROLE_ID_REVIEWER], $context->getId())->toArray();
|
||||
$authorUserGroups[$context->getId()] = Repo::userGroup()->getByRoleIds([Role::ROLE_ID_AUTHOR], $context->getId())->toArray();
|
||||
$readerUserGroups[$context->getId()] = Repo::userGroup()->getByRoleIds([Role::ROLE_ID_READER], $context->getId())->toArray();
|
||||
}
|
||||
$templateMgr->assign([
|
||||
'reviewerUserGroups' => $reviewerUserGroups,
|
||||
'authorUserGroups' => $authorUserGroups,
|
||||
'readerUserGroups' => $readerUserGroups,
|
||||
]);
|
||||
}
|
||||
|
||||
/**
|
||||
* Save role elements of an executed user form.
|
||||
*
|
||||
* @param Form $form The form from which to fetch elements
|
||||
* @param User $user The current user
|
||||
*/
|
||||
public function saveRoleContent($form, $user)
|
||||
{
|
||||
$contextDao = Application::getContextDAO();
|
||||
$contexts = $contextDao->getAll(true);
|
||||
while ($context = $contexts->next()) {
|
||||
if ($context->getData('disableUserReg')) {
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ([
|
||||
[
|
||||
'roleId' => Role::ROLE_ID_REVIEWER,
|
||||
'formElement' => 'reviewerGroup'
|
||||
],
|
||||
[
|
||||
'roleId' => Role::ROLE_ID_AUTHOR,
|
||||
'formElement' => 'authorGroup'
|
||||
],
|
||||
[
|
||||
'roleId' => Role::ROLE_ID_READER,
|
||||
'formElement' => 'readerGroup'
|
||||
],
|
||||
] as $groupData) {
|
||||
$groupFormData = (array) $form->getData($groupData['formElement']);
|
||||
$userGroups = Repo::userGroup()->getByRoleIds([$groupData['roleId']], $context->getId());
|
||||
foreach ($userGroups as $userGroup) {
|
||||
if (!$userGroup->getPermitSelfRegistration()) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$groupId = $userGroup->getId();
|
||||
$inGroup = Repo::userGroup()->userInGroup($user->getId(), $groupId);
|
||||
if (!$inGroup && array_key_exists($groupId, $groupFormData)) {
|
||||
Repo::userGroup()->assignUserToGroup($user->getId(), $groupId);
|
||||
} elseif ($inGroup && !array_key_exists($groupId, $groupFormData)) {
|
||||
Repo::userGroup()->removeUserFromGroup($user->getId(), $groupId, $context->getId());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!PKP_STRICT_MODE) {
|
||||
class_alias('\PKP\user\form\UserFormHelper', '\UserFormHelper');
|
||||
}
|
||||
Reference in New Issue
Block a user