00001 <?php
00002
00015 import('lib.pkp.classes.controllers.grid.GridHandler');
00016 import('lib.pkp.classes.controllers.grid.DataObjectGridCellProvider');
00017
00018 import('controllers.grid.settings.user.UserGridRow');
00019 import('controllers.grid.settings.user.form.UserDetailsForm');
00020
00021 class UserGridHandler extends GridHandler {
00025 function UserGridHandler() {
00026 parent::GridHandler();
00027 $this->addRoleAssignment(array(
00028 ROLE_ID_PRESS_MANAGER),
00029 array('fetchGrid', 'fetchRow', 'editUser', 'updateUser', 'updateUserRoles',
00030 'editDisableUser', 'disableUser', 'removeUser', 'addUser',
00031 'editEmail', 'sendEmail', 'suggestUsername')
00032 );
00033 }
00034
00035
00036
00037
00038
00042 function authorize(&$request, $args, $roleAssignments) {
00043 import('classes.security.authorization.OmpPressAccessPolicy');
00044 $this->addPolicy(new OmpPressAccessPolicy($request, $roleAssignments));
00045 return parent::authorize($request, $args, $roleAssignments);
00046 }
00047
00051 function initialize(&$request) {
00052 parent::initialize($request);
00053
00054
00055 AppLocale::requireComponents(
00056 LOCALE_COMPONENT_PKP_USER,
00057 LOCALE_COMPONENT_OMP_MANAGER
00058 );
00059
00060
00061 $this->setTitle('grid.user.currentUsers');
00062
00063
00064 $router =& $request->getRouter();
00065
00066 import('lib.pkp.classes.linkAction.request.AjaxModal');
00067 $this->addAction(
00068 new LinkAction(
00069 'addUser',
00070 new AjaxModal(
00071 $router->url($request, null, null, 'addUser', null, null),
00072 __('grid.user.add'),
00073 'modal_add_user',
00074 true
00075 ),
00076 __('grid.user.add'),
00077 'add_user')
00078 );
00079
00080
00081
00082
00083
00084
00085 $cellProvider = new DataObjectGridCellProvider();
00086 $this->addColumn(
00087 new GridColumn(
00088 'firstName',
00089 'user.firstName',
00090 null,
00091 'controllers/grid/gridCell.tpl',
00092 $cellProvider
00093 )
00094 );
00095
00096
00097 $cellProvider = new DataObjectGridCellProvider();
00098 $this->addColumn(
00099 new GridColumn(
00100 'lastName',
00101 'user.lastName',
00102 null,
00103 'controllers/grid/gridCell.tpl',
00104 $cellProvider
00105 )
00106 );
00107
00108
00109 $cellProvider = new DataObjectGridCellProvider();
00110 $this->addColumn(
00111 new GridColumn(
00112 'email',
00113 'user.email',
00114 null,
00115 'controllers/grid/gridCell.tpl',
00116 $cellProvider
00117 )
00118 );
00119 }
00120
00121
00122
00123
00124
00129 function &getRowInstance() {
00130 $row = new UserGridRow();
00131 return $row;
00132 }
00133
00139 function loadData(&$request, $filter) {
00140
00141 $press =& $request->getPress();
00142 $pressId = $press->getId();
00143
00144
00145 $userGroupDao =& DAORegistry::getDAO('UserGroupDAO');
00146 $rangeInfo = $this->getRangeInfo('users');
00147 $rowData = array();
00148 $pressIds = array();
00149
00150 if ($filter['includeNoRole'] == null) {
00151 $pressIds[] = $pressId;
00152 } else {
00153 $pressDao =& DAORegistry::getDAO('PressDAO');
00154 $presses =& $pressDao->getPresses();
00155 while ($press =& $presses->next()) {
00156 $pressIds[] = $press->getId();
00157 }
00158
00159
00160 $usersWithNoUserGroup =& $userGroupDao->getUsersWithNoUserGroupAssignments($filter);
00161 if (!$usersWithNoUserGroup->wasEmpty()) {
00162 while ($userWithNoUserGroup =& $usersWithNoUserGroup->next()) {
00163 $rowData[$userWithNoUserGroup->getId()] = $userWithNoUserGroup;
00164 }
00165 }
00166 }
00167
00168 foreach ($pressIds as $pressId) {
00169 $users =& $userGroupDao->getUsersById(
00170 $filter['userGroup'],
00171 $pressId,
00172 $filter['searchField'],
00173 $filter['search'],
00174 $filter['searchMatch'],
00175 $rangeInfo
00176 );
00177
00178 while ($user =& $users->next()) {
00179 $rowData[$user->getId()] = $user;
00180 }
00181 }
00182
00183 return $rowData;
00184 }
00185
00189 function renderFilter(&$request) {
00190 $press =& $request->getPress();
00191 $pressId = $press->getId();
00192 $userGroupDao =& DAORegistry::getDAO('UserGroupDAO');
00193 $userGroups =& $userGroupDao->getByContextId($press->getId());
00194 $userGroupOptions = array('' => __('grid.user.allRoles'));
00195 while (!$userGroups->eof()) {
00196 $userGroup =& $userGroups->next();
00197 $userGroupOptions[$userGroup->getId()] = $userGroup->getLocalizedName();
00198 }
00199
00200
00201 import('lib.pkp.classes.user.PKPUserDAO');
00202 $fieldOptions = array(
00203 USER_FIELD_FIRSTNAME => 'user.firstName',
00204 USER_FIELD_LASTNAME => 'user.lastName',
00205 USER_FIELD_USERNAME => 'user.username',
00206 USER_FIELD_EMAIL => 'user.email'
00207 );
00208
00209 $matchOptions = array(
00210 'contains' => 'form.contains',
00211 'is' => 'form.is'
00212 );
00213
00214 $filterData = array(
00215 'userGroupOptions' => $userGroupOptions,
00216 'fieldOptions' => $fieldOptions,
00217 'matchOptions' => $matchOptions
00218 );
00219
00220 return parent::renderFilter($request, $filterData);
00221 }
00222
00227 function getFilterSelectionData(&$request) {
00228
00229 $includeNoRole = $request->getUserVar('includeNoRole') ? (int) $request->getUserVar('includeNoRole') : null;
00230 $userGroup = $request->getUserVar('userGroup') ? (int)$request->getUserVar('userGroup') : null;
00231 $searchField = $request->getUserVar('searchField');
00232 $searchMatch = $request->getUserVar('searchMatch');
00233 $search = $request->getUserVar('search');
00234
00235 return $filterSelectionData = array(
00236 'includeNoRole' => $includeNoRole,
00237 'userGroup' => $userGroup,
00238 'searchField' => $searchField,
00239 'searchMatch' => $searchMatch,
00240 'search' => $search
00241 );
00242 }
00243
00248 function getFilterForm() {
00249 return 'controllers/grid/settings/user/userGridFilter.tpl';
00250 }
00251
00252
00253
00254
00255
00262 function suggestUsername($args, &$request) {
00263 $suggestion = Validation::suggestUsername(
00264 $request->getUserVar('firstName'),
00265 $request->getUserVar('lastName')
00266 );
00267
00268 $json = new JSONMessage(true, $suggestion);
00269 return $json->getString();
00270 }
00271
00277 function addUser($args, &$request) {
00278
00279 return $this->editUser($args, $request);
00280 }
00281
00288 function editUser($args, &$request) {
00289
00290 $userId = $request->getUserVar('rowId');
00291 if (!$userId) $userId = $request->getUserVar('userId');
00292
00293 $user =& $request->getUser();
00294 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00295
00296 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00297 } else {
00298
00299 $userForm = new UserDetailsForm($request, $userId);
00300 $userForm->initData($args, $request);
00301
00302 $json = new JSONMessage(true, $userForm->display($args, $request));
00303 }
00304 return $json->getString();
00305 }
00306
00313 function updateUser($args, &$request) {
00314 $user =& $request->getUser();
00315
00316
00317 $userId = $request->getUserVar('userId');
00318
00319 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00320
00321 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00322 } else {
00323
00324 $userForm = new UserDetailsForm($request, $userId);
00325 $userForm->readInputData();
00326
00327 if ($userForm->validate()) {
00328 $user =& $userForm->execute($args, $request);
00329
00330
00331 if (!$userId) {
00332 import('controllers.grid.settings.user.form.UserRoleForm');
00333 $userRoleForm = new UserRoleForm($user->getId(), $user->getFullName());
00334 $userRoleForm->initData($args, $request);
00335 $json = new JSONMessage(true, $userRoleForm->display($args, $request));
00336 } else {
00337
00338
00339 $notificationManager = new NotificationManager();
00340 $user =& $request->getUser();
00341 $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.editedUser')));
00342
00343
00344 return DAO::getDataChangedEvent($userId);
00345 }
00346 } else {
00347 $json = new JSONMessage(false);
00348 }
00349 }
00350 return $json->getString();
00351 }
00352
00359 function updateUserRoles($args, &$request) {
00360 $user =& $request->getUser();
00361
00362
00363 $userId = $request->getUserVar('userId');
00364
00365 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00366
00367 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00368 } else {
00369
00370 import('controllers.grid.settings.user.form.UserRoleForm');
00371 $userRoleForm = new UserRoleForm($userId, $user->getFullName());
00372 $userRoleForm->readInputData();
00373
00374 if ($userRoleForm->validate()) {
00375 $userRoleForm->execute($args, $request);
00376
00377
00378 return DAO::getDataChangedEvent($userId);
00379 } else {
00380 $json = new JSONMessage(false);
00381 }
00382 }
00383 return $json->getString();
00384 }
00385
00392 function editDisableUser($args, &$request) {
00393 $user =& $request->getUser();
00394
00395
00396 $userId = $request->getUserVar('rowId');
00397 if (!$userId) $userId = $request->getUserVar('userId');
00398
00399
00400 $enable = isset($args['enable']) ? (bool) $args['enable'] : false;
00401
00402 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00403
00404 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00405 } else {
00406
00407 import('controllers.grid.settings.user.form.UserDisableForm');
00408 $userForm = new UserDisableForm($userId, $enable);
00409
00410 $userForm->initData($args, $request);
00411
00412 $json = new JSONMessage(true, $userForm->display($args, $request));
00413 }
00414 return $json->getString();
00415 }
00416
00423 function disableUser($args, &$request) {
00424 $user =& $request->getUser();
00425
00426
00427 $userId = $request->getUserVar('userId');
00428
00429
00430 $enable = (bool) $request->getUserVar('enable');
00431
00432 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00433
00434 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00435 } else {
00436
00437 import('controllers.grid.settings.user.form.UserDisableForm');
00438 $userForm = new UserDisableForm($userId, $enable);
00439
00440 $userForm->readInputData();
00441
00442 if ($userForm->validate()) {
00443 $user =& $userForm->execute($args, $request);
00444
00445
00446
00447 return DAO::getDataChangedEvent($userId);
00448
00449 } else {
00450 $json = new JSONMessage(false, $userForm->display($args, $request));
00451 }
00452 }
00453 return $json->getString();
00454 }
00455
00462 function removeUser($args, &$request) {
00463 $press =& $request->getPress();
00464 $user =& $request->getUser();
00465
00466
00467 $userId = $request->getUserVar('rowId');
00468
00469 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00470
00471 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00472 } else {
00473
00474 $userGroupDao =& DAORegistry::getDAO('UserGroupDAO');
00475
00476
00477 if (!$userGroupDao->userInAnyGroup($userId, $press->getId())) {
00478 $json = new JSONMessage(false, __('grid.user.userNoRoles'));
00479 } else {
00480 $userGroupDao->deleteAssignmentsByContextId($press->getId(), $userId);
00481 return DAO::getDataChangedEvent($userId);
00482 }
00483 }
00484 return $json->getString();
00485 }
00486
00493 function editEmail($args, &$request) {
00494 $user =& $request->getUser();
00495
00496
00497 $userId = $request->getUserVar('rowId');
00498
00499 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00500
00501 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00502 } else {
00503
00504 import('controllers.grid.settings.user.form.UserEmailForm');
00505 $userEmailForm = new UserEmailForm($userId);
00506 $userEmailForm->initData($args, $request);
00507
00508 $json = new JSONMessage(true, $userEmailForm->display($args, $request));
00509 }
00510 return $json->getString();
00511 }
00512
00519 function sendEmail($args, &$request) {
00520 $user =& $request->getUser();
00521
00522
00523 $userId = $request->getUserVar('userId');
00524
00525 if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00526
00527 $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00528 } else {
00529
00530 import('controllers.grid.settings.user.form.UserEmailForm');
00531 $userEmailForm = new UserEmailForm($userId);
00532 $userEmailForm->readInputData();
00533
00534 if ($userEmailForm->validate()) {
00535 $userEmailForm->execute($args, $request);
00536 $json = new JSONMessage(true);
00537 } else {
00538 $json = new JSONMessage(false, $userEmailForm->display($args, $request));
00539 }
00540 }
00541 return $json->getString();
00542 }
00543 }
00544
00545 ?>