Open Journal Systems  3.3.0
UserGridHandler.inc.php
1 <?php
2 
16 import('lib.pkp.classes.controllers.grid.GridHandler');
17 import('lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
18 
19 import('lib.pkp.controllers.grid.settings.user.UserGridRow');
20 import('lib.pkp.controllers.grid.settings.user.form.UserDetailsForm');
21 
25 
29  function __construct() {
30  parent::__construct();
31  $this->addRoleAssignment(array(
32  ROLE_ID_MANAGER, ROLE_ID_SITE_ADMIN),
33  array('fetchGrid', 'fetchRow', 'editUser', 'updateUser', 'updateUserRoles',
34  'editDisableUser', 'disableUser', 'removeUser', 'addUser',
35  'editEmail', 'sendEmail', 'mergeUsers')
36  );
37  }
38 
39 
40  //
41  // Implement template methods from PKPHandler.
42  //
46  function authorize($request, &$args, $roleAssignments) {
47  import('lib.pkp.classes.security.authorization.ContextAccessPolicy');
48  $this->addPolicy(new ContextAccessPolicy($request, $roleAssignments));
49  return parent::authorize($request, $args, $roleAssignments);
50  }
51 
55  function initialize($request, $args = null) {
56  parent::initialize($request, $args);
57 
58  // Load user-related translations.
60  LOCALE_COMPONENT_PKP_USER,
61  LOCALE_COMPONENT_PKP_MANAGER,
62  LOCALE_COMPONENT_APP_MANAGER
63  );
64 
65  $this->_oldUserId = (int) $request->getUserVar('oldUserId');
66  // Basic grid configuration.
67  $this->setTitle('grid.user.currentUsers');
68 
69  // Grid actions.
70  $router = $request->getRouter();
71 
72  import('lib.pkp.classes.linkAction.request.AjaxModal');
73  $this->addAction(
74  new LinkAction(
75  'addUser',
76  new AjaxModal(
77  $router->url($request, null, null, 'addUser', null, null),
78  __('grid.user.add'),
79  'modal_add_user',
80  true
81  ),
82  __('grid.user.add'),
83  'add_user')
84  );
85 
86  //
87  // Grid columns.
88  //
89  $cellProvider = new DataObjectGridCellProvider();
90 
91  // First Name.
92  $this->addColumn(
93  new GridColumn(
94  'givenName',
95  'user.givenName',
96  null,
97  null,
98  $cellProvider
99  )
100  );
101 
102  // Last Name.
103  $this->addColumn(
104  new GridColumn(
105  'familyName',
106  'user.familyName',
107  null,
108  null,
109  $cellProvider
110  )
111  );
112 
113  // User name.
114  $this->addColumn(
115  new GridColumn(
116  'username',
117  'user.username',
118  null,
119  null,
120  $cellProvider
121  )
122  );
123 
124  // Email.
125  $this->addColumn(
126  new GridColumn(
127  'email',
128  'user.email',
129  null,
130  null,
131  $cellProvider
132  )
133  );
134  }
135 
136 
137  //
138  // Implement methods from GridHandler.
139  //
144  protected function getRowInstance() {
145  return new UserGridRow($this->_oldUserId);
146  }
147 
151  function initFeatures($request, $args) {
152  import('lib.pkp.classes.controllers.grid.feature.PagingFeature');
153  return array(new PagingFeature());
154  }
155 
161  protected function loadData($request, $filter) {
162  // Get the context.
163  $context = $request->getContext();
164 
165  // Get all users for this context that match search criteria.
166  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
167  $rangeInfo = $this->getGridRangeInfo($request, $this->getId());
168 
169  return $userGroupDao->getUsersById(
170  $filter['userGroup'],
171  $filter['includeNoRole']?null:$context->getId(),
172  $filter['searchField'],
173  $filter['search']?$filter['search']:null,
174  $filter['searchMatch'],
175  $rangeInfo
176  );
177  }
178 
182  function renderFilter($request, $filterData = array()) {
183  $context = $request->getContext();
184  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
185  $userGroups = $userGroupDao->getByContextId($context->getId());
186  $userGroupOptions = array('' => __('grid.user.allRoles'));
187  while ($userGroup = $userGroups->next()) {
188  $userGroupOptions[$userGroup->getId()] = $userGroup->getLocalizedName();
189  }
190 
191  // Import UserDAO to define the USER_FIELD_* constants.
192  import('lib.pkp.classes.user.UserDAO');
193  $fieldOptions = array(
194  IDENTITY_SETTING_GIVENNAME => 'user.givenName',
195  IDENTITY_SETTING_FAMILYNAME => 'user.familyName',
196  USER_FIELD_USERNAME => 'user.username',
197  USER_FIELD_EMAIL => 'user.email'
198  );
199 
200  $matchOptions = array(
201  'contains' => 'form.contains',
202  'is' => 'form.is'
203  );
204 
205  $filterData = array(
206  'userGroupOptions' => $userGroupOptions,
207  'fieldOptions' => $fieldOptions,
208  'matchOptions' => $matchOptions,
209  // oldUserId is used when merging users. see: userGridFilter.tpl
210  'oldUserId' => $request->getUserVar('oldUserId'),
211  );
212 
213  return parent::renderFilter($request, $filterData);
214  }
215 
220  function getFilterSelectionData($request) {
221  // Get the search terms.
222  $includeNoRole = $request->getUserVar('includeNoRole') ? (int) $request->getUserVar('includeNoRole') : null;
223  $userGroup = $request->getUserVar('userGroup') ? (int)$request->getUserVar('userGroup') : null;
224  $searchField = $request->getUserVar('searchField');
225  $searchMatch = $request->getUserVar('searchMatch');
226  $search = $request->getUserVar('search');
227 
228  return $filterSelectionData = array(
229  'includeNoRole' => $includeNoRole,
230  'userGroup' => $userGroup,
231  'searchField' => $searchField,
232  'searchMatch' => $searchMatch,
233  'search' => $search ? $search : ''
234  );
235  }
236 
241  protected function getFilterForm() {
242  return 'controllers/grid/settings/user/userGridFilter.tpl';
243  }
244 
249  public function getJSHandler() {
250  return '$.pkp.controllers.grid.users.UserGridHandler';
251  }
252 
253 
254  //
255  // Public grid actions.
256  //
262  function addUser($args, $request) {
263  // Calling editUser with an empty row id will add a new user.
264  return $this->editUser($args, $request);
265  }
266 
273  function editUser($args, $request) {
274  // Identify the user Id.
275  $userId = $request->getUserVar('rowId');
276  if (!$userId) $userId = $request->getUserVar('userId');
277 
278  $user = $request->getUser();
279  if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
280  // We don't have administrative rights over this user.
281  return new JSONMessage(false, __('grid.user.cannotAdminister'));
282  } else {
283  // Form handling.
284  $userForm = new UserDetailsForm($request, $userId);
285  $userForm->initData();
286 
287  return new JSONMessage(true, $userForm->display($request));
288  }
289  }
290 
297  function updateUser($args, $request) {
298  $user = $request->getUser();
299 
300  // Identify the user Id.
301  $userId = $request->getUserVar('userId');
302 
303  if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
304  // We don't have administrative rights over this user.
305  return new JSONMessage(false, __('grid.user.cannotAdminister'));
306  }
307 
308  // Form handling.
309  $userForm = new UserDetailsForm($request, $userId);
310  $userForm->readInputData();
311 
312  if ($userForm->validate()) {
313  $user = $userForm->execute();
314 
315  // If this is a newly created user, show role management form.
316  if (!$userId) {
317  import('lib.pkp.controllers.grid.settings.user.form.UserRoleForm');
318  $userRoleForm = new UserRoleForm($user->getId(), $user->getFullName());
319  $userRoleForm->initData();
320  return new JSONMessage(true, $userRoleForm->display($request));
321  } else {
322 
323  // Successful edit of an existing user.
324  $notificationManager = new NotificationManager();
325  $user = $request->getUser();
326  $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.editedUser')));
327 
328  // Prepare the grid row data.
329  return DAO::getDataChangedEvent($userId);
330  }
331  } else {
332  return new JSONMessage(false);
333  }
334  }
335 
342  function updateUserRoles($args, $request) {
343  $user = $request->getUser();
344 
345  // Identify the user Id.
346  $userId = $request->getUserVar('userId');
347 
348  if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
349  // We don't have administrative rights over this user.
350  return new JSONMessage(false, __('grid.user.cannotAdminister'));
351  }
352 
353  // Form handling.
354  import('lib.pkp.controllers.grid.settings.user.form.UserRoleForm');
355  $userRoleForm = new UserRoleForm($userId, $user->getFullName());
356  $userRoleForm->readInputData();
357 
358  if ($userRoleForm->validate()) {
359  $userRoleForm->execute();
360 
361  // Successfully managed newly created user's roles.
362  return DAO::getDataChangedEvent();
363  } else {
364  return new JSONMessage(false);
365  }
366  }
367 
374  function editDisableUser($args, $request) {
375  $user = $request->getUser();
376 
377  // Identify the user Id.
378  $userId = $request->getUserVar('rowId');
379  if (!$userId) $userId = $request->getUserVar('userId');
380 
381  // Are we enabling or disabling this user.
382  $enable = isset($args['enable']) ? (bool) $args['enable'] : false;
383 
384  if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
385  // We don't have administrative rights over this user.
386  return new JSONMessage(false, __('grid.user.cannotAdminister'));
387  } else {
388  // Form handling
389  import('lib.pkp.controllers.grid.settings.user.form.UserDisableForm');
390  $userForm = new UserDisableForm($userId, $enable);
391 
392  $userForm->initData();
393 
394  return new JSONMessage(true, $userForm->display($request));
395  }
396  }
397 
404  function disableUser($args, $request) {
405  $user = $request->getUser();
406 
407  // Identify the user Id.
408  $userId = $request->getUserVar('userId');
409 
410  // Are we enabling or disabling this user.
411  $enable = (bool) $request->getUserVar('enable');
412 
413  if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
414  // We don't have administrative rights over this user.
415  return new JSONMessage(false, __('grid.user.cannotAdminister'));
416  }
417 
418  // Form handling.
419  import('lib.pkp.controllers.grid.settings.user.form.UserDisableForm');
420  $userForm = new UserDisableForm($userId, $enable);
421 
422  $userForm->readInputData();
423 
424  if ($userForm->validate()) {
425  $user = $userForm->execute();
426 
427  // Successful enable/disable of an existing user.
428  // Update grid data.
429  return DAO::getDataChangedEvent($userId);
430 
431  } else {
432  return new JSONMessage(false, $userForm->display($request));
433  }
434  }
435 
442  function removeUser($args, $request) {
443  if (!$request->checkCSRF()) return new JSONMessage(false);
444 
445  $context = $request->getContext();
446  $user = $request->getUser();
447 
448  // Identify the user Id.
449  $userId = $request->getUserVar('rowId');
450 
451  if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
452  // We don't have administrative rights over this user.
453  return new JSONMessage(false, __('grid.user.cannotAdminister'));
454  }
455 
456  // Remove user from all user group assignments for this context.
457  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
458 
459  // Check if this user has any user group assignments for this context.
460  if (!$userGroupDao->userInAnyGroup($userId, $context->getId())) {
461  return new JSONMessage(false, __('grid.user.userNoRoles'));
462  } else {
463  $userGroupDao->deleteAssignmentsByContextId($context->getId(), $userId);
464  return DAO::getDataChangedEvent($userId);
465  }
466  }
467 
474  function editEmail($args, $request) {
475  $user = $request->getUser();
476  $context = $request->getContext();
477 
478  // Identify the user Id.
479  $userId = $request->getUserVar('rowId');
480 
481  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
482  if (
483  !$roleDao->userHasRole(CONTEXT_SITE, $user->getId(), ROLE_ID_SITE_ADMIN) && !(
484  $context &&
485  $roleDao->userHasRole($context->getId(), $user->getId(), ROLE_ID_MANAGER)
486  )
487  ) {
488  // We don't have administrative rights over this user.
489  return new JSONMessage(false, __('grid.user.cannotAdminister'));
490  } else {
491  // Form handling.
492  import('lib.pkp.controllers.grid.settings.user.form.UserEmailForm');
493  $userEmailForm = new UserEmailForm($userId);
494  $userEmailForm->initData();
495 
496  return new JSONMessage(true, $userEmailForm->fetch($request));
497  }
498  }
499 
506  function sendEmail($args, $request) {
507  $user = $request->getUser();
508  $context = $request->getContext();
509 
510  // Identify the user Id.
511  $userId = $request->getUserVar('userId');
512 
513  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
514  if (
515  !$roleDao->userHasRole(CONTEXT_SITE, $user->getId(), ROLE_ID_SITE_ADMIN) && !(
516  $context &&
517  $roleDao->userHasRole($context->getId(), $user->getId(), ROLE_ID_MANAGER)
518  )
519  ) {
520  // We don't have administrative rights over this user.
521  return new JSONMessage(false, __('grid.user.cannotAdminister'));
522  }
523  // Form handling.
524  import('lib.pkp.controllers.grid.settings.user.form.UserEmailForm');
525  $userEmailForm = new UserEmailForm($userId);
526  $userEmailForm->readInputData();
527 
528  if ($userEmailForm->validate()) {
529  $userEmailForm->execute();
530  return new JSONMessage(true);
531  } else {
532  return new JSONMessage(false, __('validator.filled'));
533  }
534  }
535 
542  function mergeUsers($args, $request) {
543 
544  $newUserId = (int) $request->getUserVar('newUserId');
545  $oldUserId = (int) $request->getUserVar('oldUserId');
546  $user = $request->getUser();
547 
548  // if there is a $newUserId, this is the second time through, so merge the users.
549  if ($newUserId > 0 && $oldUserId > 0 && Validation::canAdminister($oldUserId, $user->getId())) {
550  if (!$request->checkCSRF()) return new JSONMessage(false);
551  import('classes.user.UserAction');
552  $userAction = new UserAction();
553  $userAction->mergeUsers($oldUserId, $newUserId);
554  $json = new JSONMessage(true);
555  $json->setGlobalEvent('userMerged', array(
556  'oldUserId' => $oldUserId,
557  'newUserId' => $newUserId,
558  ));
559  return $json;
560 
561  // Otherwise present the grid for selecting the user to merge into
562  } else {
563  $userGrid = new UserGridHandler();
564  $userGrid->initialize($request);
565  $userGrid->setTitle('grid.user.mergeUsers.mergeIntoUser');
566  return $userGrid->fetchGrid($args, $request);
567  }
568  }
569 
573  function getRequestArgs() {
574  $requestArgs = (array) parent::getRequestArgs();
575  $requestArgs['oldUserId'] = $this->_oldUserId;
576  return $requestArgs;
577  }
578 }
579 
580 
PKPHandler\addRoleAssignment
addRoleAssignment($roleIds, $operations)
Definition: PKPHandler.inc.php:213
GridColumn
The GridColumn class represents a column within a grid. It is used to format the data presented in a ...
Definition: GridColumn.inc.php:27
UserGridHandler\editUser
editUser($args, $request)
Definition: UserGridHandler.inc.php:273
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
ContextAccessPolicy
Class to control access to PKP applications' setup components.
Definition: ContextAccessPolicy.inc.php:17
UserEmailForm
Form for sending an email to a user.
Definition: UserEmailForm.inc.php:18
UserGridHandler\__construct
__construct()
Definition: UserGridHandler.inc.php:29
UserGridHandler\initialize
initialize($request, $args=null)
Definition: UserGridHandler.inc.php:55
UserGridHandler\updateUserRoles
updateUserRoles($args, $request)
Definition: UserGridHandler.inc.php:342
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
UserGridHandler\sendEmail
sendEmail($args, $request)
Definition: UserGridHandler.inc.php:506
UserRoleForm
Form for managing roles for a newly created user.
Definition: UserRoleForm.inc.php:18
UserGridHandler\initFeatures
initFeatures($request, $args)
Definition: UserGridHandler.inc.php:151
PKPHandler\getId
getId()
Definition: PKPHandler.inc.php:107
UserGridHandler\removeUser
removeUser($args, $request)
Definition: UserGridHandler.inc.php:442
UserGridHandler\getJSHandler
getJSHandler()
Definition: UserGridHandler.inc.php:249
UserGridHandler\mergeUsers
mergeUsers($args, $request)
Definition: UserGridHandler.inc.php:542
GridHandler\addAction
addAction($action, $position=GRID_ACTION_POSITION_ABOVE)
Definition: GridHandler.inc.php:266
GridHandler\addColumn
addColumn($column)
Definition: GridHandler.inc.php:335
DAO\getDataChangedEvent
static getDataChangedEvent($elementId=null, $parentElementId=null, $content='')
Definition: DAO.inc.php:647
UserGridHandler\updateUser
updateUser($args, $request)
Definition: UserGridHandler.inc.php:297
UserGridHandler\editEmail
editEmail($args, $request)
Definition: UserGridHandler.inc.php:474
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
AjaxModal
A modal that retrieves its content from via AJAX.
Definition: AjaxModal.inc.php:18
LinkAction
Base class defining an action that can be performed by the user in the user interface.
Definition: LinkAction.inc.php:22
UserGridHandler\addUser
addUser($args, $request)
Definition: UserGridHandler.inc.php:262
PagingFeature
Add paging functionality to grids.
Definition: PagingFeature.inc.php:19
UserGridHandler\loadData
loadData($request, $filter)
Definition: UserGridHandler.inc.php:161
GridHandler\setTitle
setTitle($title)
Definition: GridHandler.inc.php:215
UserGridRow
User grid row definition.
Definition: UserGridRow.inc.php:21
GridHandler\getGridRangeInfo
getGridRangeInfo($request, $rangeName, $contextData=null)
Definition: GridHandler.inc.php:589
UserGridHandler\$_oldUserId
$_oldUserId
Definition: UserGridHandler.inc.php:24
DataObjectGridCellProvider
Base class for a cell provider that can retrieve simple labels from DataObjects. If you need more com...
Definition: DataObjectGridCellProvider.inc.php:22
UserGridHandler
Handle user grid requests.
Definition: UserGridHandler.inc.php:22
UserGridHandler\getRequestArgs
getRequestArgs()
Definition: UserGridHandler.inc.php:573
UserGridHandler\getFilterSelectionData
getFilterSelectionData($request)
Definition: UserGridHandler.inc.php:220
UserDetailsForm
Form for editing user profiles.
Definition: UserDetailsForm.inc.php:18
GridHandler
This class defines basic operations for handling HTML grids. Grids are used to implement a standardiz...
Definition: GridHandler.inc.php:58
UserAction
UserAction class.
Definition: UserAction.inc.php:19
NotificationManager
Definition: NotificationManager.inc.php:19
UserGridHandler\renderFilter
renderFilter($request, $filterData=array())
Definition: UserGridHandler.inc.php:182
UserGridHandler\disableUser
disableUser($args, $request)
Definition: UserGridHandler.inc.php:404
PKPHandler\addPolicy
addPolicy($authorizationPolicy, $addToTop=false)
Definition: PKPHandler.inc.php:157
UserGridHandler\getFilterForm
getFilterForm()
Definition: UserGridHandler.inc.php:241
Validation\canAdminister
static canAdminister($administeredUserId, $administratorUserId)
Definition: Validation.inc.php:410
UserDisableForm
Form for enabling/disabling a user.
Definition: UserDisableForm.inc.php:18
UserGridHandler\getRowInstance
getRowInstance()
Definition: UserGridHandler.inc.php:144
UserGridHandler\authorize
authorize($request, &$args, $roleAssignments)
Definition: UserGridHandler.inc.php:46
UserGridHandler\editDisableUser
editDisableUser($args, $request)
Definition: UserGridHandler.inc.php:374