17 import(
'lib.pkp.classes.controllers.grid.GridHandler');
18 import(
'lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
19 import(
'lib.pkp.classes.workflow.WorkflowStageDAO');
22 import(
'lib.pkp.classes.linkAction.request.AjaxModal');
37 parent::__construct();
40 array(ROLE_ID_MANAGER),
61 function authorize($request, &$args, $roleAssignments) {
62 import(
'lib.pkp.classes.security.authorization.ContextAccessPolicy');
65 $operation = $request->getRequestedOp();
66 $workflowStageRequiredOps = array(
'assignStage',
'unassignStage');
67 if (in_array($operation, $workflowStageRequiredOps)) {
68 import(
'lib.pkp.classes.security.authorization.internal.WorkflowStageRequiredPolicy');
72 $userGroupRequiredOps = array_merge($workflowStageRequiredOps, array(
'editUserGroup',
'updateUserGroup',
'removeUserGroup'));
73 if (in_array($operation, $userGroupRequiredOps)) {
75 $userGroupId = $request->getUserVar(
'userGroupId');
77 $userGroup = $userGroupDao->getById($userGroupId);
82 $this->_userGroup = $userGroup;
86 return parent::authorize($request, $args, $roleAssignments);
93 parent::initialize($request, $args);
95 $context = $request->getContext();
96 $this->_contextId = $context->getId();
100 LOCALE_COMPONENT_PKP_USER,
101 LOCALE_COMPONENT_PKP_MANAGER,
102 LOCALE_COMPONENT_APP_MANAGER,
103 LOCALE_COMPONENT_PKP_SUBMISSION
107 $this->
setTitle(
'grid.roles.currentRoles');
110 $router = $request->getRouter();
115 $router->url($request,
null,
null,
'addUserGroup'),
116 __(
'grid.roles.add'),
119 __(
'grid.roles.add'),
124 import(
'lib.pkp.controllers.grid.settings.roles.UserGroupGridCellProvider');
130 $columnsInfo = array(
131 1 => array(
'id' =>
'name',
'title' =>
'settings.roles.roleName',
'template' =>
null),
132 2 => array(
'id' =>
'roleId',
'title' =>
'settings.roles.from',
'template' =>
null)
135 foreach ($workflowStagesLocales as $stageId => $stageTitleKey) {
136 $columnsInfo[] = array(
'id' => $stageId,
'title' => $stageTitleKey,
'template' =>
'controllers/grid/common/cell/selectStatusCell.tpl');
140 foreach($columnsInfo as $columnInfo) {
143 $columnInfo[
'id'], $columnInfo[
'title'],
null,
144 $columnInfo[
'template'], $cellProvider
153 protected function loadData($request, $filter) {
154 $contextId = $this->_getContextId();
157 $roleIdFilter =
null;
158 $stageIdFilter =
null;
160 if (!is_array($filter)) {
164 if (isset($filter[
'selectedRoleId'])) {
165 $roleIdFilter = $filter[
'selectedRoleId'];
168 if (isset($filter[
'selectedStageId'])) {
169 $stageIdFilter = $filter[
'selectedStageId'];
174 if ($stageIdFilter && $stageIdFilter != 0) {
175 return $userGroupDao->getUserGroupsByStage($contextId, $stageIdFilter, $roleIdFilter, $rangeInfo);
176 }
else if ($roleIdFilter && $roleIdFilter != 0) {
177 return $userGroupDao->getByRoleId($contextId, $roleIdFilter,
false, $rangeInfo);
179 return $userGroupDao->getByContextId($contextId, $rangeInfo);
188 import(
'lib.pkp.controllers.grid.settings.roles.UserGroupGridRow');
195 function renderFilter($request, $filterData = array()) {
201 if (array_key_exists(ROLE_ID_READER, $roleOptions)) {
202 unset($roleOptions[ROLE_ID_READER]);
205 $filterData = array(
'roleOptions' => $roleOptions);
208 $filterData[
'stageOptions'] = $workflowStages;
210 return parent::renderFilter($request, $filterData);
218 $selectedRoleId = $request->getUserVar(
'selectedRoleId');
219 $selectedStageId = $request->getUserVar(
'selectedStageId');
222 $selectedRoleId = (is_null($selectedRoleId) ? 0 : (int)$selectedRoleId);
223 $selectedStageId = (is_null($selectedStageId) ? 0 : (int)$selectedStageId);
225 return array (
'selectedRoleId' => $selectedRoleId,
'selectedStageId' => $selectedStageId);
233 return 'controllers/grid/settings/roles/userGroupsGridFilter.tpl';
240 import(
'lib.pkp.classes.controllers.grid.feature.PagingFeature');
263 $userGroupForm = $this->_getUserGroupForm($request);
265 $userGroupForm->initData();
267 return new JSONMessage(
true, $userGroupForm->fetch($request));
277 $userGroupForm = $this->_getUserGroupForm($request);
279 $userGroupForm->readInputData();
280 if($userGroupForm->validate()) {
282 $notificationMgr->createTrivialNotification($request->getUser()->getId());
283 $userGroupForm->execute();
285 $json->setGlobalEvent(
'userGroupUpdated');
288 return new JSONMessage(
true, $userGroupForm->fetch($request));
299 if (!$request->checkCSRF())
return new JSONMessage(
false);
301 $user = $request->getUser();
302 $userGroup = $this->_userGroup;
303 $contextId = $this->_getContextId();
307 $usersAssignedToUserGroupCount = $userGroupDao->getContextUsersCount($contextId, $userGroup->getId());
308 if ($usersAssignedToUserGroupCount == 0) {
309 if ($userGroupDao->isDefault($userGroup->getId())) {
311 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_WARNING,
312 array(
'contents' => __(
'grid.userGroup.cantRemoveDefaultUserGroup',
313 array(
'userGroupName' => $userGroup->getLocalizedName() )
317 $userGroupDao->deleteObject($userGroup);
318 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS,
319 array(
'contents' => __(
'grid.userGroup.removed',
320 array(
'userGroupName' => $userGroup->getLocalizedName() )
326 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_WARNING,
327 array(
'contents' => __(
'grid.userGroup.cantRemoveUserGroup',
328 array(
'userGroupName' => $userGroup->getLocalizedName() ,
'usersCount' => $usersAssignedToUserGroupCount)
334 $json->setGlobalEvent(
'userGroupUpdated');
344 return $this->_toggleAssignment($args, $request);
353 return $this->_toggleAssignment($args, $request);
366 private function _toggleAssignment($args, $request) {
367 $userGroup = $this->_userGroup;
369 $contextId = $this->_getContextId();
370 $operation = $request->getRequestedOp();
376 $userGroupDao->assignGroupToStage($contextId, $userGroup->getId(), $stageId);
377 $messageKey =
'grid.userGroup.assignedStage';
379 case 'unassignStage':
380 $userGroupDao->removeGroupFromStage($contextId, $userGroup->getId(), $stageId);
381 $messageKey =
'grid.userGroup.unassignedStage';
386 $user = $request->getUser();
390 $notificationMgr->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS,
391 array(
'contents' => __($messageKey,
392 array(
'userGroupName' => $userGroup->getLocalizedName(),
'stageName' => __($stageLocaleKeys[$stageId]))
403 private function _getUserGroupForm($request) {
405 $userGroupId = (int) $request->getUserVar(
'userGroupId');
408 import(
'lib.pkp.controllers.grid.settings.roles.form.UserGroupForm');
409 $contextId = $this->_getContextId();
417 private function _getContextId() {
418 return $this->_contextId;