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'); }