16 import(
'lib.pkp.classes.security.Role');
17 import(
'lib.pkp.classes.security.UserGroupAssignment');
27 parent::__construct();
49 function getUsersByRoleId($roleId =
null, $contextId =
null, $searchType =
null, $search =
null, $searchMatch =
null, $dbResultRange =
null) {
50 $paramArray = array(ASSOC_TYPE_USER,
'interest', IDENTITY_SETTING_GIVENNAME, IDENTITY_SETTING_FAMILYNAME);
51 $paramArray = array_merge($paramArray, $this->userDao->getFetchParameters());
52 if (isset($roleId)) $paramArray[] = (int) $roleId;
53 if (isset($contextId)) $paramArray[] = (
int) $contextId;
56 if ($contextId ===
null && $roleId ===
null)
return null;
60 $searchTypeMap = array(
61 IDENTITY_SETTING_GIVENNAME =>
'usgs.setting_value',
62 IDENTITY_SETTING_FAMILYNAME =>
'usfs.setting_value',
63 USER_FIELD_USERNAME =>
'u.username',
64 USER_FIELD_EMAIL =>
'u.email',
65 USER_FIELD_INTERESTS =>
'cves.setting_value'
68 if (!empty($search) && isset($searchTypeMap[$searchType])) {
69 $fieldName = $searchTypeMap[$searchType];
70 switch ($searchMatch) {
72 $searchSql =
"AND LOWER($fieldName) = LOWER(?)";
73 $paramArray[] = $search;
76 $searchSql =
"AND LOWER($fieldName) LIKE LOWER(?)";
77 $paramArray[] =
'%' . $search .
'%';
80 $searchSql =
"AND LOWER($fieldName) LIKE LOWER(?)";
81 $paramArray[] = $search .
'%';
84 } elseif (!empty($search))
switch ($searchType) {
85 case USER_FIELD_USERID:
86 $searchSql =
'AND u.user_id=?';
87 $paramArray[] = $search;
91 $searchSql .=
' ' . $this->userDao->getOrderBy();
95 ' . $this->userDao->getFetchColumns() .
'
97 LEFT JOIN user_user_groups uug ON (uug.user_id = u.user_id)
98 LEFT JOIN user_groups ug ON (ug.user_group_id = uug.user_group_id)
99 LEFT JOIN controlled_vocabs cv ON (cv.assoc_type = ? AND cv.assoc_id = u.user_id AND cv.symbolic = ?)
100 LEFT JOIN user_settings usgs ON (usgs.user_id = u.user_id AND usgs.setting_name = ?)
101 LEFT JOIN user_settings usfs ON (usfs.user_id = u.user_id AND usfs.setting_name = ?)
102 LEFT JOIN controlled_vocab_entries cve ON (cve.controlled_vocab_id = cv.controlled_vocab_id)
103 LEFT JOIN controlled_vocab_entry_settings cves ON (cves.controlled_vocab_entry_id = cve.controlled_vocab_entry_id)
104 ' . $this->userDao->getFetchJoins() .
'
105 WHERE 1=1' . (isset($roleId) ?
' AND ug.role_id = ?' :
'') . (isset($contextId) ?
' AND ug.context_id = ?' :
'') .
' ' . $searchSql,
110 return new DAOResultFactory($result, $this->userDao,
'_returnUserFromRowWithData');
120 function userHasRole($contextId, $userId, $roleId) {
121 $roleId = is_array($roleId) ? join(
',', array_map(
'intval', $roleId)) : (int) $roleId;
123 'SELECT count(*) FROM user_groups ug JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
124 WHERE ug.context_id = ? AND uug.user_id = ? AND ug.role_id IN (' . $roleId .
')',
125 array((
int) $contextId, (
int) $userId)
129 $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true :
false;
142 $params = array((
int) $userId);
143 if ($contextId !==
null) $params[] = (int) $contextId;
145 'SELECT DISTINCT ug.role_id
147 JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
148 WHERE uug.user_id = ?' . ($contextId !==
null ?
' AND ug.context_id = ?' :
''),
153 while ( !$result->EOF ) {
155 $role->setRoleId($result->fields[0]);
172 $userGroupsFactory = $userGroupDao->getByUserId($userId);
175 while ($userGroup = $userGroupsFactory->next()) {
176 $role = $roleDao->newDataObject();
177 $role->setRoleId($userGroup->getRoleId());
178 $roles[$userGroup->getContextId()][$userGroup->getRoleId()] = $role;
191 $forbiddenStages = array(
192 ROLE_ID_MANAGER => array(
194 WORKFLOW_STAGE_ID_SUBMISSION, WORKFLOW_STAGE_ID_INTERNAL_REVIEW, WORKFLOW_STAGE_ID_EXTERNAL_REVIEW, WORKFLOW_STAGE_ID_EDITING, WORKFLOW_STAGE_ID_PRODUCTION,
196 ROLE_ID_REVIEWER => array(
198 WORKFLOW_STAGE_ID_SUBMISSION, WORKFLOW_STAGE_ID_EDITING, WORKFLOW_STAGE_ID_PRODUCTION,
200 ROLE_ID_READER => array(
202 WORKFLOW_STAGE_ID_SUBMISSION, WORKFLOW_STAGE_ID_INTERNAL_REVIEW, WORKFLOW_STAGE_ID_EXTERNAL_REVIEW, WORKFLOW_STAGE_ID_EDITING, WORKFLOW_STAGE_ID_PRODUCTION,
207 if (isset($forbiddenStages[$roleId])) {
208 return $forbiddenStages[$roleId];
213 return $forbiddenStages;
222 $alwaysActiveStages = array(ROLE_ID_MANAGER);
223 return $alwaysActiveStages;