• Main Page
  • Modules
  • Classes
  • Files
  • File List

controllers/grid/settings/user/UserGridHandler.inc.php

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    // Implement template methods from PKPHandler.
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       // Load user-related translations.
00055       AppLocale::requireComponents(
00056          LOCALE_COMPONENT_PKP_USER,
00057          LOCALE_COMPONENT_OMP_MANAGER
00058       );
00059 
00060       // Basic grid configuration.
00061       $this->setTitle('grid.user.currentUsers');
00062 
00063       // Grid actions.
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       // Grid columns.
00082       //
00083 
00084       // First Name.
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       // Last Name.
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       // Email.
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    // Implement methods from GridHandler.
00124    //
00129    function &getRowInstance() {
00130       $row = new UserGridRow();
00131       return $row;
00132    }
00133 
00139    function loadData(&$request, $filter) {
00140       // Get the press.
00141       $press =& $request->getPress();
00142       $pressId = $press->getId();
00143 
00144       // Get all users for this press that match search criteria.
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          // Get users with no user group assignment.
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       // Import PKPUserDAO to define the USER_FIELD_* constants.
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       // Get the search terms.
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    // Public grid actions.
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       // Calling editUser with an empty row id will add a new user.
00279       return $this->editUser($args, $request);
00280    }
00281 
00288    function editUser($args, &$request) {
00289       // Identify the user Id.
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          // We don't have administrative rights over this user.
00296          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00297       } else {
00298          // Form handling.
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       // Identify the user Id.
00317       $userId = $request->getUserVar('userId');
00318 
00319       if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00320          // We don't have administrative rights over this user.
00321          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00322       } else {
00323          // Form handling.
00324          $userForm = new UserDetailsForm($request, $userId);
00325          $userForm->readInputData();
00326 
00327          if ($userForm->validate()) {
00328             $user =& $userForm->execute($args, $request);
00329 
00330             // If this is a newly created user, show role management form.
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                // Successful edit of an existing user.
00339                $notificationManager = new NotificationManager();
00340                $user =& $request->getUser();
00341                $notificationManager->createTrivialNotification($user->getId(), NOTIFICATION_TYPE_SUCCESS, array('contents' => __('notification.editedUser')));
00342 
00343                // Prepare the grid row data.
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       // Identify the user Id.
00363       $userId = $request->getUserVar('userId');
00364 
00365       if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00366          // We don't have administrative rights over this user.
00367          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00368       } else {
00369          // Form handling.
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             // Successfully managed newly created user's roles.
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       // Identify the user Id.
00396       $userId = $request->getUserVar('rowId');
00397       if (!$userId) $userId = $request->getUserVar('userId');
00398 
00399       // Are we enabling or disabling this user.
00400       $enable = isset($args['enable']) ? (bool) $args['enable'] : false;
00401 
00402       if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00403          // We don't have administrative rights over this user.
00404          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00405       } else {
00406          // Form handling
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       // Identify the user Id.
00427       $userId = $request->getUserVar('userId');
00428 
00429       // Are we enabling or disabling this user.
00430       $enable = (bool) $request->getUserVar('enable');
00431 
00432       if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00433          // We don't have administrative rights over this user.
00434          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00435       } else {
00436          // Form handling.
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             // Successful enable/disable of an existing user.
00446             // Update grid data.
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       // Identify the user Id.
00467       $userId = $request->getUserVar('rowId');
00468 
00469       if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00470          // We don't have administrative rights over this user.
00471          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00472       } else {
00473          // Remove user from all user group assignments for this press.
00474          $userGroupDao =& DAORegistry::getDAO('UserGroupDAO');
00475 
00476          // Check if this user has any user group assignments for this press.
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       // Identify the user Id.
00497       $userId = $request->getUserVar('rowId');
00498 
00499       if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00500          // We don't have administrative rights over this user.
00501          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00502       } else {
00503          // Form handling.
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       // Identify the user Id.
00523       $userId = $request->getUserVar('userId');
00524 
00525       if ($userId !== null && !Validation::canAdminister($userId, $user->getId())) {
00526          // We don't have administrative rights over this user.
00527          $json = new JSONMessage(false, __('grid.user.cannotAdminister'));
00528       } else {
00529          // Form handling.
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 ?>

Generated on Mon Sep 17 2012 13:58:56 for Open Monograph Press by  doxygen 1.7.1