129 lines
4.4 KiB
PHP
129 lines
4.4 KiB
PHP
<?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');
|
|
}
|