18 import(
'lib.pkp.classes.security.UserGroup');
19 import(
'lib.pkp.classes.workflow.WorkflowStageDAO');
32 parent::__construct();
52 $userGroup->setId($row[
'user_group_id']);
53 $userGroup->setRoleId($row[
'role_id']);
54 $userGroup->setContextId($row[
'context_id']);
55 $userGroup->setDefault($row[
'is_default']);
56 $userGroup->setShowTitle($row[
'show_title']);
57 $userGroup->setPermitSelfRegistration($row[
'permit_self_registration']);
58 $userGroup->setPermitMetadataEdit($row[
'permit_metadata_edit']);
60 $this->
getDataObjectSettings(
'user_group_settings',
'user_group_id', $row[
'user_group_id'], $userGroup);
74 'INSERT INTO user_groups
75 (role_id, context_id, is_default, show_title, permit_self_registration, permit_metadata_edit)
79 (
int) $userGroup->getRoleId(),
80 (
int) $userGroup->getContextId(),
81 $userGroup->getDefault()?1:0,
82 $userGroup->getShowTitle()?1:0,
83 $userGroup->getPermitSelfRegistration()?1:0,
84 $userGroup->getPermitMetadataEdit()?1:0,
90 return $userGroup->getId();
99 'UPDATE user_groups SET
104 permit_self_registration = ?,
105 permit_metadata_edit = ?
106 WHERE user_group_id = ?',
108 (
int) $userGroup->getRoleId(),
109 (
int) $userGroup->getContextId(),
110 $userGroup->getDefault()?1:0,
111 $userGroup->getShowTitle()?1:0,
112 $userGroup->getPermitSelfRegistration()?1:0,
113 $userGroup->getPermitMetadataEdit()?1:0,
114 (
int) $userGroup->getId(),
127 function deleteById($contextId, $userGroupId) {
128 $this->userGroupAssignmentDao->deleteAssignmentsByUserGroupId($userGroupId);
129 $this->
update(
'DELETE FROM user_group_settings WHERE user_group_id = ?', (
int) $userGroupId);
130 $this->
update(
'DELETE FROM user_groups WHERE user_group_id = ?', (
int) $userGroupId);
140 $this->
deleteById($userGroup->getContextId(), $userGroup->getId());
149 $result = $this->
retrieve(
'SELECT user_group_id FROM user_groups WHERE context_id = ?', (
int) $contextId);
151 for ($i=1; !$result->EOF; $i++) {
152 list($userGroupId) = $result->fields;
154 $this->
update(
'DELETE FROM user_group_stage WHERE user_group_id = ?', (
int) $userGroupId);
155 $this->
update(
'DELETE FROM user_group_settings WHERE user_group_id = ?', (
int) $userGroupId);
156 $this->
update(
'DELETE FROM user_groups WHERE user_group_id = ?', (
int) $userGroupId);
167 return $this->
_getInsertId(
'user_groups',
'user_group_id');
175 return array(
'name',
'abbrev');
182 return array_merge(parent::getAdditionalFieldNames(), array(
194 'user_group_id' => (
int) $userGroup->getId()
203 function getById($userGroupId, $contextId =
null) {
204 $params = array((
int) $userGroupId);
205 if ($contextId !==
null) $params[] = (int) $contextId;
209 WHERE user_group_id = ?' . ($contextId !==
null?
' AND context_id = ?':
''),
222 $allDefaults = $this->
getByRoleId($contextId, $roleId,
true);
223 if ($allDefaults->eof())
return false;
224 return $allDefaults->next();
234 'SELECT is_default FROM user_groups
235 WHERE user_group_id = ?',
239 $result = $result->GetArray();
240 if (isset($result[0][
'is_default'])) {
241 return $result[0][
'is_default'];
255 function getByRoleId($contextId, $roleId, $default =
false, $dbResultRange =
null) {
256 $params = array((
int) $contextId, (
int) $roleId);
257 if ($default) $params[] = 1;
261 WHERE context_id = ? AND
263 ' . ($default?
' AND is_default = ?':
'')
264 .
' ORDER BY user_group_id',
278 $params = array((
int) $roleId);
279 if ($contextId) $params[] = (int) $contextId;
282 'SELECT user_group_id
285 ' . ($contextId?
' AND context_id = ?':
''),
289 $userGroupIds = array();
290 while (!$result->EOF) {
291 $userGroupIds[] = (int) $result->fields[0];
296 return $userGroupIds;
310 JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
313 ug.user_group_id = ?',
314 array((
int) $userId, (
int) $userGroupId)
318 $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true :
false;
331 $params = array((
int) $userId);
332 if ($contextId) $params[] = (int) $contextId;
337 JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
338 WHERE uug.user_id = ?
339 ' . ($contextId?
' AND ug.context_id = ?':
''),
343 $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true :
false;
356 $params = array((
int) $userId);
357 if ($contextId) $params[] = (int) $contextId;
362 JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
363 WHERE uug.user_id = ?
364 ' . ($contextId?
' AND ug.context_id = ?':
''),
381 WHERE ug.user_group_id = ?
382 AND ug.context_id = ?',
389 $returner = isset($result->fields[0]) && $result->fields[0] == 0 ? false :
true;
401 function getByContextId($contextId =
null, $dbResultRange =
null) {
403 if ($contextId) $params[] = (int) $contextId;
407 FROM user_groups ug' .
408 ($contextId?
' WHERE ug.context_id = ?':
''),
422 $params = array((
int) $contextId);
423 if ($userGroupId) $params[] = (int) $userGroupId;
424 if ($roleId) $params[] = (int) $roleId;
426 'SELECT COUNT(DISTINCT(uug.user_id))
428 JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
429 WHERE context_id = ?' .
430 ($userGroupId?
' AND ug.user_group_id = ?':
'') .
431 ($roleId?
' AND ug.role_id = ?':
''),
435 $returner = $result->fields[0];
438 return (
int) $returner;
450 function getUsersByContextId($contextId, $searchType =
null, $search =
null, $searchMatch =
null, $dbResultRange =
null) {
451 return $this->
getUsersById(
null, $contextId, $searchType, $search, $searchMatch, $dbResultRange);
462 function getUsersNotInRole($roleId, $contextId =
null, $search =
null, $rangeInfo =
null) {
463 $params = isset($search) ? array(IDENTITY_SETTING_GIVENNAME, IDENTITY_SETTING_FAMILYNAME) : array();
464 $params[] = (int) $roleId;
465 if ($contextId) $params[] = (int) $contextId;
466 if(isset($search)) $params = array_merge($params, array_pad(array(), 4,
'%' . $search .
'%'));
471 ' .(isset($search) ?
'
472 LEFT JOIN user_settings usgs ON (usgs.user_id = u.user_id AND usgs.setting_name = ?)
473 LEFT JOIN user_settings usfs ON (usfs.user_id = u.user_id AND usfs.setting_name = ?)
475 WHERE u.user_id NOT IN (
476 SELECT DISTINCT u.user_id
477 FROM users u, user_user_groups uug, user_groups ug
478 WHERE u.user_id = uug.user_id
479 AND ug.user_group_id = uug.user_group_id
480 AND ug.role_id = ?' .
481 ($contextId ?
' AND ug.context_id = ?' :
'') .
483 (isset($search) ?
' AND (usgs.setting_value LIKE ? OR usfs.setting_value LIKE ? OR u.email LIKE ? OR u.username LIKE ?)' :
''),
487 return new DAOResultFactory($result, $this->userDao,
'_returnUserFromRowWithData');
500 function getUsersById($userGroupId =
null, $contextId =
null, $searchType =
null, $search =
null, $searchMatch =
null, $dbResultRange =
null) {
501 $params = $this->userDao->getFetchParameters();
502 $params = array_merge($params, array(IDENTITY_SETTING_GIVENNAME, IDENTITY_SETTING_FAMILYNAME));
503 if ($contextId) $params[] = (int) $contextId;
504 if ($userGroupId) $params[] = (int) $userGroupId;
507 'SELECT DISTINCT u.*,
508 ' . $this->userDao->getFetchColumns() .
'
510 LEFT JOIN user_settings us ON (us.user_id = u.user_id AND us.setting_name = \'affiliation\')
511 LEFT JOIN user_interests ui ON (u.user_id = ui.user_id)
512 LEFT JOIN controlled_vocab_entry_settings cves ON (ui.controlled_vocab_entry_id = cves.controlled_vocab_entry_id)
513 LEFT JOIN user_user_groups uug ON (uug.user_id = u.user_id)
514 LEFT JOIN user_groups ug ON (ug.user_group_id = uug.user_group_id)
515 ' . $this->userDao->getFetchJoins() .
'
516 LEFT JOIN user_settings usgs ON (usgs.user_id = u.user_id AND usgs.setting_name = ?)
517 LEFT JOIN user_settings usfs ON (usfs.user_id = u.user_id AND usfs.setting_name = ?)
520 ($contextId?
'AND ug.context_id = ? ':
'') .
521 ($userGroupId?
'AND ug.user_group_id = ? ':
'') .
522 $this->
_getSearchSql($searchType, $search, $searchMatch, $params);
530 return new DAOResultFactory($result, $this->userDao,
'_returnUserFromRowWithData');
541 $this->userGroupAssignmentDao->deleteByUserId($userId, $userGroupId);
549 $this->userGroupAssignmentDao->deleteAssignmentsByUserGroupId($userGroupId);
558 $this->userGroupAssignmentDao->deleteAssignmentsByContextId($contextId, $userId);
567 $assignment = $this->userGroupAssignmentDao->newDataObject();
568 $assignment->setUserId($userId);
569 $assignment->setUserGroupId($groupId);
570 $this->userGroupAssignmentDao->insertObject($assignment);
580 $assignments = $this->userGroupAssignmentDao->getByUserId($userId, $contextId);
581 while ($assignment = $assignments->next()) {
582 if ($assignment->getUserGroupId() == $groupId) {
583 $this->userGroupAssignmentDao->deleteAssignment($assignment);
595 foreach($assignedStages as $stageId => $stageLocaleKey) {
608 'INSERT INTO user_group_stage (context_id, user_group_id, stage_id) VALUES (?, ?, ?)',
609 array((
int) $contextId, (
int) $userGroupId, (
int) $stageId)
621 'DELETE FROM user_group_stage WHERE context_id = ? AND user_group_id = ? AND stage_id = ?',
622 array((
int) $contextId, (
int) $userGroupId, (
int) $stageId)
637 function updateSetting($userGroupId, $name, $value, $type =
null, $isLocalized =
false) {
638 $keyFields = array(
'setting_name',
'locale',
'user_group_id');
642 $this->
replace(
'user_group_settings',
644 'user_group_id' => (
int) $userGroupId,
645 'setting_name' => $name,
646 'setting_value' => $value,
647 'setting_type' => $type,
653 if (is_array($value))
foreach ($value as $locale => $localeValue) {
654 $this->
update(
'DELETE FROM user_group_settings WHERE user_group_id = ? AND setting_name = ? AND locale = ?', array((
int) $userGroupId, $name, $locale));
655 if (empty($localeValue))
continue;
657 $this->
update(
'INSERT INTO user_group_settings
658 (user_group_id, setting_name, setting_value, setting_type, locale)
659 VALUES (?, ?, ?, ?, ?)',
661 $userGroupId, $name, $this->
convertToDB($localeValue, $type), $type, $locale
676 function getSetting($userGroupId, $name, $locale =
null) {
677 $params = array((
int) $userGroupId, $name);
678 if ($locale) $params[] = $locale;
680 'SELECT setting_name, setting_value, setting_type, locale
681 FROM user_group_settings
682 WHERE user_group_id = ? AND
684 ($locale?
' AND locale = ?':
''),
688 $recordCount = $result->RecordCount();
690 if ($recordCount == 1) {
691 $row = $result->getRowAssoc(
false);
692 $returner = $this->
convertFromDB($row[
'setting_value'], $row[
'setting_type']);
693 } elseif ($recordCount > 1) {
695 while (!$result->EOF) {
696 $returner[$row[
'locale']] = $this->
convertFromDB($row[
'setting_value'], $row[
'setting_type']);
716 $tree = $xmlParser->parse($filename);
719 $site = $siteDao->getSite();
720 $installedLocales = $site->getInstalledLocales();
722 if (!$tree)
return false;
724 foreach ($tree->getChildren() as $setting) {
725 $roleId = hexdec($setting->getAttribute(
'roleId'));
726 $nameKey = $setting->getAttribute(
'name');
727 $abbrevKey = $setting->getAttribute(
'abbrev');
728 $permitSelfRegistration = $setting->getAttribute(
'permitSelfRegistration');
729 $permitMetadataEdit = $setting->getAttribute(
'permitMetadataEdit');
732 if (in_array($roleId, array(ROLE_ID_MANAGER))) {
733 $permitMetadataEdit = $setting->getAttribute(
'permitMetadataEdit');
736 $defaultStages = explode(
',', $setting->getAttribute(
'stages'));
740 $userGroup->setRoleId($roleId);
741 $userGroup->setContextId($contextId);
742 $userGroup->setPermitSelfRegistration($permitSelfRegistration);
743 $userGroup->setPermitMetadataEdit($permitMetadataEdit);
744 $userGroup->setDefault(
true);
750 if (is_array($defaultStages)) {
751 foreach ($defaultStages as $stageId) {
752 if (!empty($stageId) && $stageId <= WORKFLOW_STAGE_ID_PRODUCTION && $stageId >= WORKFLOW_STAGE_ID_SUBMISSION) {
760 $this->
updateSetting($userGroup->getId(),
'nameLocaleKey', $nameKey);
761 $this->
updateSetting($userGroup->getId(),
'abbrevLocaleKey', $abbrevKey);
764 foreach ($installedLocales as $locale) {
779 while ($userGroup = $userGroups->next()) {
780 $nameKey = $this->
getSetting($userGroup->getId(),
'nameLocaleKey');
783 array($locale => __($nameKey,
null, $locale)),
789 $abbrevKey = $this->
getSetting($userGroup->getId(),
'abbrevLocaleKey');
792 array($locale => __($abbrevKey,
null, $locale)),
805 return $this->
update(
'DELETE FROM user_group_settings WHERE locale = ?', $locale);
816 function _getSearchSql($searchType, $search, $searchMatch, &$params) {
817 $searchTypeMap = array(
818 IDENTITY_SETTING_GIVENNAME =>
'usgs.setting_value',
819 IDENTITY_SETTING_FAMILYNAME =>
'usfs.setting_value',
820 USER_FIELD_USERNAME =>
'u.username',
821 USER_FIELD_EMAIL =>
'u.email',
822 USER_FIELD_AFFILIATION =>
'us.setting_value',
827 if (!empty($search)) {
829 if (!isset($searchTypeMap[$searchType])) {
830 $str = $this->
concat(
'COALESCE(usgs.setting_value,\'\')',
'COALESCE(usfs.setting_value,\'\')',
'u.email',
'COALESCE(us.setting_value,\'\')');
831 $concatFields =
' ( LOWER(' . $str .
') LIKE ? OR LOWER(cves.setting_value) LIKE ? ) ';
833 $search = strtolower($search);
835 $words = preg_split(
'{\s+}', $search);
836 $searchFieldMap = array();
838 foreach ($words as $word) {
839 $searchFieldMap[] = $concatFields;
840 $term =
'%' . $word .
'%';
841 array_push($params, $term, $term);
844 $searchSql .=
' AND ( ' . join(
' AND ', $searchFieldMap) .
' ) ';
846 $fieldName = $searchTypeMap[$searchType];
847 switch ($searchMatch) {
849 $searchSql =
"AND LOWER($fieldName) = LOWER(?)";
853 $searchSql =
"AND LOWER($fieldName) LIKE LOWER(?)";
854 $params[] =
'%' . $search .
'%';
857 $searchSql =
"AND LOWER($fieldName) LIKE LOWER(?)";
858 $params[] = $search .
'%';
863 switch ($searchType) {
864 case USER_FIELD_USERID:
865 $searchSql =
'AND u.user_id = ?';
870 $searchSql .= $this->userDao->getOrderBy();
888 $params = array((
int) $contextId, (
int) $stageId);
889 if ($roleId) $params[] = (int) $roleId;
894 JOIN user_group_stage ugs ON (ug.user_group_id = ugs.user_group_id AND ug.context_id = ugs.context_id)
895 WHERE ugs.context_id = ? AND
897 ' . ($roleId?
'AND ug.role_id = ?':
'') .
'
898 ORDER BY ug.role_id ASC',
916 FROM user_group_stage
917 WHERE context_id = ? AND
919 array((
int) $contextId, (
int) $userGroupId)
923 while (!$result->EOF) {
924 $stageId = $result->Fields(
'stage_id');
941 FROM user_group_stage
942 WHERE user_group_id = ? AND
944 array((
int) $userGroupId, (
int) $stageId)
947 $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true :
false;
963 FROM user_group_stage ugs,
965 WHERE ugs.user_group_id = uug.user_group_id AND
966 ugs.context_id = ? AND
969 array((
int) $contextId, (
int) $userId, (
int) $stageId)
972 $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true :
false;
985 $params = array((
int) $contextId);
986 if ($roleId) $params[] = (int) $roleId;
989 'SELECT ug.user_group_id
991 JOIN user_group_settings ugs ON (ugs.user_group_id = ug.user_group_id AND ugs.setting_name = \'recommendOnly\' AND ugs.setting_value = \'1\')
992 WHERE ug.context_id = ?
993 ' . ($roleId?
' AND ug.role_id = ?':
''),
997 $userGroupIds = array();
998 while (!$result->EOF) {
999 $userGroupIds[] = (int) $result->fields[0];
1000 $result->MoveNext();
1004 return $userGroupIds;
1014 $params = array((
int) $contextId);
1015 if ($roleId) $params[] = (int) $roleId;
1018 'SELECT ug.user_group_id
1020 WHERE permit_metadata_edit = 1 AND
1022 ' . ($roleId?
' AND ug.role_id = ?':
''),
1026 $userGroupIds = array();
1027 while (!$result->EOF) {
1028 $userGroupIds[] = (int) $result->fields[0];
1029 $result->MoveNext();
1033 return $userGroupIds;
1041 return array(ROLE_ID_MANAGER);