Open Journal Systems  3.3.0
UserGroupForm.inc.php
1 <?php
2 
16 import('lib.pkp.classes.form.Form');
17 import('lib.pkp.classes.workflow.WorkflowStageDAO');
18 
19 class UserGroupForm extends Form {
20 
22  var $_userGroupId;
23 
26 
27 
33  function __construct($contextId, $userGroupId = null) {
34  parent::__construct('controllers/grid/settings/roles/form/userGroupForm.tpl');
35  AppLocale::requireComponents(LOCALE_COMPONENT_APP_SUBMISSION);
36  $this->_contextId = $contextId;
37  $this->_userGroupId = $userGroupId;
38 
39  // Validation checks for this form
40  $this->addCheck(new FormValidatorLocale($this, 'name', 'required', 'settings.roles.nameRequired'));
41  $this->addCheck(new FormValidatorLocale($this, 'abbrev', 'required', 'settings.roles.abbrevRequired'));
42  if ($this->getUserGroupId() == null) {
43  $this->addCheck(new FormValidator($this, 'roleId', 'required', 'settings.roles.roleIdRequired'));
44  }
45  $this->addCheck(new FormValidatorPost($this));
46  $this->addCheck(new FormValidatorCSRF($this));
47  }
48 
49  //
50  // Getters and Setters
51  //
56  function getUserGroupId() {
57  return $this->_userGroupId;
58  }
59 
64  function getContextId() {
65  return $this->_contextId;
66  }
67 
68  //
69  // Implement template methods from Form.
70  //
74  function getLocaleFieldNames() {
75  return array('name', 'abbrev');
76  }
77 
81  function initData() {
82  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
83  $userGroup = $userGroupDao->getById($this->getUserGroupId());
85  $this->setData('stages', $stages);
86  $this->setData('assignedStages', array()); // sensible default
87 
88  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
89  import('lib.pkp.classes.core.JSONMessage');
90  $jsonMessage = new JSONMessage();
91  $jsonMessage->setContent($roleDao->getForbiddenStages());
92  $this->setData('roleForbiddenStagesJSON', $jsonMessage->getString());
93 
94  if ($userGroup) {
95  $assignedStages = $userGroupDao->getAssignedStagesByUserGroupId($this->getContextId(), $userGroup->getId());
96 
97  $data = array(
98  'userGroupId' => $userGroup->getId(),
99  'roleId' => $userGroup->getRoleId(),
100  'name' => $userGroup->getName(null), //Localized
101  'abbrev' => $userGroup->getAbbrev(null), //Localized
102  'assignedStages' => array_keys($assignedStages),
103  'showTitle' => $userGroup->getShowTitle(),
104  'permitSelfRegistration' => $userGroup->getPermitSelfRegistration(),
105  'permitMetadataEdit' => $userGroup->getPermitMetadataEdit(),
106  'recommendOnly' => $userGroup->getRecommendOnly(),
107  );
108 
109  foreach ($data as $field => $value) {
110  $this->setData($field, $value);
111  }
112  }
113  }
114 
118  function readInputData() {
119  $this->readUserVars(array('roleId', 'name', 'abbrev', 'assignedStages', 'showTitle', 'permitSelfRegistration', 'recommendOnly', 'permitMetadataEdit'));
120  }
121 
125  function fetch($request, $template = null, $display = false) {
126  $templateMgr = TemplateManager::getManager($request);
127 
128  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
129  $templateMgr->assign('roleOptions', Application::getRoleNames(true));
130 
131  // Users can't edit the role once user group is created.
132  // userGroupId is 0 for new User Groups because it is cast to int in UserGroupGridHandler.
133  $disableRoleSelect = ($this->getUserGroupId() > 0) ? true : false;
134  $templateMgr->assign('disableRoleSelect', $disableRoleSelect);
135  $templateMgr->assign('selfRegistrationRoleIds', $this->getPermitSelfRegistrationRoles());
136  $templateMgr->assign('recommendOnlyRoleIds', $this->getRecommendOnlyRoles());
137  $templateMgr->assign('notChangeMetadataEditPermissionRoles', UserGroupDAO::getNotChangeMetadataEditPermissionRoles());
138 
139  return parent::fetch($request, $template, $display);
140  }
141 
146  function getPermitSelfRegistrationRoles() {
147  return array(ROLE_ID_REVIEWER, ROLE_ID_AUTHOR, ROLE_ID_READER);
148  }
149 
154  function getRecommendOnlyRoles() {
155  return array(ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR);
156  }
157 
161  function execute(...$functionParams) {
162  parent::execute(...$functionParams);
163 
164  $request = Application::get()->getRequest();
165  $userGroupId = $this->getUserGroupId();
166  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
167  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
168 
169  // Check if we are editing an existing user group or creating another one.
170  if ($userGroupId == null) {
171  $userGroup = $userGroupDao->newDataObject();
172  $userGroup->setRoleId($this->getData('roleId'));
173  $userGroup->setContextId($this->getContextId());
174  $userGroup->setDefault(false);
175  $userGroup->setShowTitle($this->getData('showTitle'));
176  $userGroup->setPermitSelfRegistration($this->getData('permitSelfRegistration') && in_array($userGroup->getRoleId(), $this->getPermitSelfRegistrationRoles()));
177  $userGroup->setPermitMetadataEdit($this->getData('permitMetadataEdit') && !in_array($this->getData('roleId'), UserGroupDAO::getNotChangeMetadataEditPermissionRoles()));
178  if (in_array($this->getData('roleId'), UserGroupDAO::getNotChangeMetadataEditPermissionRoles())) {
179  $userGroup->setPermitMetadataEdit(true);
180  }
181 
182  $userGroup->setRecommendOnly($this->getData('recommendOnly') && in_array($userGroup->getRoleId(), $this->getRecommendOnlyRoles()));
183  $userGroup = $this->_setUserGroupLocaleFields($userGroup, $request);
184 
185  $userGroupId = $userGroupDao->insertObject($userGroup);
186  } else {
187  $userGroup = $userGroupDao->getById($userGroupId);
188  $userGroup = $this->_setUserGroupLocaleFields($userGroup, $request);
189  $userGroup->setShowTitle($this->getData('showTitle'));
190  $userGroup->setPermitSelfRegistration($this->getData('permitSelfRegistration') && in_array($userGroup->getRoleId(), $this->getPermitSelfRegistrationRoles()));
191  $userGroup->setPermitMetadataEdit($this->getData('permitMetadataEdit') && !in_array($userGroup->getRoleId(), UserGroupDAO::getNotChangeMetadataEditPermissionRoles()));
192  if (in_array($userGroup->getRoleId(), UserGroupDAO::getNotChangeMetadataEditPermissionRoles())) {
193  $userGroup->setPermitMetadataEdit(true);
194  } else {
195  $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO');
196  $allUserAssignments = $stageAssignmentDao
197  ->getByUserGroupId($userGroupId, $this->getContextId())
198  ->toAssociativeArray();
199 
200  foreach($allUserAssignments as $userAssignment) {
201  $userAssignment->setCanChangeMetadata($userGroup->getPermitMetadataEdit());
202  $stageAssignmentDao->updateObject($userAssignment);
203  }
204  }
205 
206  $userGroup->setRecommendOnly($this->getData('recommendOnly') && in_array($userGroup->getRoleId(), $this->getRecommendOnlyRoles()));
207 
208  $userGroupDao->updateObject($userGroup);
209  }
210 
211  // After we have created/edited the user group, we assign/update its stages.
212  $assignedStages = $this->getData('assignedStages');
213  // Always set all stages active for some permission levels.
214  if (in_array($userGroup->getRoleId(), $roleDao->getAlwaysActiveStages())) $assignedStages = array_keys(WorkflowStageDAO::getWorkflowStageTranslationKeys());
215  if ($assignedStages) {
216  $this->_assignStagesToUserGroup($userGroupId, $assignedStages);
217  }
218  }
219 
220 
221  //
222  // Private helper methods
223  //
229  function _assignStagesToUserGroup($userGroupId, $userAssignedStages) {
230  $contextId = $this->getContextId();
231  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
232 
233  // Current existing workflow stages.
235 
236  foreach (array_keys($stages) as $stageId) {
237  $userGroupDao->removeGroupFromStage($contextId, $userGroupId, $stageId);
238  }
239 
240  foreach ($userAssignedStages as $stageId) {
241 
242  // Make sure we don't assign forbidden stages based on
243  // user groups role id. Override in case of some permission levels.
244  $roleId = $this->getData('roleId');
245  $roleDao = DAORegistry::getDAO('RoleDAO'); /* @var $roleDao RoleDAO */
246  $forbiddenStages = $roleDao->getForbiddenStages($roleId);
247  if (in_array($stageId, $forbiddenStages) && !in_array($roleId, $roleDao->getAlwaysActiveStages())) {
248  continue;
249  }
250 
251  // Check if is a valid stage.
252  if (in_array($stageId, array_keys($stages))) {
253  $userGroupDao->assignGroupToStage($contextId, $userGroupId, $stageId);
254  } else {
255  fatalError('Invalid stage id');
256  }
257  }
258  }
259 
266  function _setUserGroupLocaleFields($userGroup, $request) {
267  $router = $request->getRouter();
268  $context = $router->getContext($request);
269  $supportedLocales = $context->getSupportedLocaleNames();
270 
271  if (!empty($supportedLocales)) {
272  foreach ($context->getSupportedLocaleNames() as $localeKey => $localeName) {
273  $name = $this->getData('name');
274  $abbrev = $this->getData('abbrev');
275  if (isset($name[$localeKey])) $userGroup->setName($name[$localeKey], $localeKey);
276  if (isset($abbrev[$localeKey])) $userGroup->setAbbrev($abbrev[$localeKey], $localeKey);
277  }
278  } else {
279  $localeKey = AppLocale::getLocale();
280  $userGroup->setName($this->getData('name'), $localeKey);
281  $userGroup->setAbbrev($this->getData('abbrev'), $localeKey);
282  }
283 
284  return $userGroup;
285  }
286 }
287 
288 
UserGroupForm\getPermitSelfRegistrationRoles
getPermitSelfRegistrationRoles()
Definition: UserGroupForm.inc.php:152
Application\getRoleNames
static getRoleNames($contextOnly=false, $roleIds=null)
Definition: Application.inc.php:213
AppLocale\requireComponents
static requireComponents()
Definition: env1/MockAppLocale.inc.php:56
UserGroupForm\readInputData
readInputData()
Definition: UserGroupForm.inc.php:124
UserGroupForm\_assignStagesToUserGroup
_assignStagesToUserGroup($userGroupId, $userAssignedStages)
Definition: UserGroupForm.inc.php:235
WorkflowStageDAO\getWorkflowStageTranslationKeys
static getWorkflowStageTranslationKeys()
Definition: WorkflowStageDAO.inc.php:73
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
FormValidatorLocale
Class to represent a form validation check for localized fields.
Definition: FormValidatorLocale.inc.php:16
Form\setData
setData($key, $value=null)
Definition: Form.inc.php:229
Form\readUserVars
readUserVars($vars)
Definition: Form.inc.php:378
Form\getData
getData($key)
Definition: Form.inc.php:220
UserGroupForm\fetch
fetch($request, $template=null, $display=false)
Definition: UserGroupForm.inc.php:131
FormValidatorPost
Form validation check to make sure the form is POSTed.
Definition: FormValidatorPost.inc.php:18
UserGroupForm\__construct
__construct($contextId, $userGroupId=null)
Definition: UserGroupForm.inc.php:39
UserGroupForm\_setUserGroupLocaleFields
_setUserGroupLocaleFields($userGroup, $request)
Definition: UserGroupForm.inc.php:272
UserGroupForm
Form to add/edit user group.
Definition: UserGroupForm.inc.php:19
UserGroupForm\getContextId
getContextId()
Definition: UserGroupForm.inc.php:70
UserGroupForm\getRecommendOnlyRoles
getRecommendOnlyRoles()
Definition: UserGroupForm.inc.php:160
JSONMessage
Class to represent a JSON (Javascript Object Notation) message.
Definition: JSONMessage.inc.php:18
UserGroupDAO\getNotChangeMetadataEditPermissionRoles
static getNotChangeMetadataEditPermissionRoles()
Definition: UserGroupDAO.inc.php:1046
UserGroupForm\initData
initData()
Definition: UserGroupForm.inc.php:87
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
UserGroupForm\execute
execute(... $functionParams)
Definition: UserGroupForm.inc.php:167
FormValidator
Class to represent a form validation check.
Definition: FormValidator.inc.php:23
UserGroupForm\getUserGroupId
getUserGroupId()
Definition: UserGroupForm.inc.php:62
Form\$supportedLocales
$supportedLocales
Definition: Form.inc.php:83
Form\addCheck
addCheck($formValidator)
Definition: Form.inc.php:395
FormValidatorCSRF
Form validation check to make sure the CSRF token is correct.
Definition: FormValidatorCSRF.inc.php:18
Form
Class defining basic operations for handling HTML forms.
Definition: Form.inc.php:47
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
fatalError
if(!function_exists('import')) fatalError($reason)
Definition: functions.inc.php:32
UserGroupForm\getLocaleFieldNames
getLocaleFieldNames()
Definition: UserGroupForm.inc.php:80
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
UserGroupForm\$_contextId
$_contextId
Definition: UserGroupForm.inc.php:31
UserGroupForm\$_userGroupId
$_userGroupId
Definition: UserGroupForm.inc.php:25