Open Journal Systems  3.3.0
UserGroupDAO.inc.php
1 <?php
2 
18 import('lib.pkp.classes.security.UserGroup');
19 import('lib.pkp.classes.workflow.WorkflowStageDAO');
20 
21 class UserGroupDAO extends DAO {
23  var $userDao;
24 
27 
31  function __construct() {
32  parent::__construct();
33  $this->userDao = DAORegistry::getDAO('UserDAO');
34  $this->userGroupAssignmentDao = DAORegistry::getDAO('UserGroupAssignmentDAO');
35  }
36 
41  function newDataObject() {
42  return new UserGroup();
43  }
44 
50  function _returnFromRow($row) {
51  $userGroup = $this->newDataObject();
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']);
59 
60  $this->getDataObjectSettings('user_group_settings', 'user_group_id', $row['user_group_id'], $userGroup);
61 
62  HookRegistry::call('UserGroupDAO::_returnFromRow', array(&$userGroup, &$row));
63 
64  return $userGroup;
65  }
66 
72  function insertObject($userGroup) {
73  $this->update(
74  'INSERT INTO user_groups
75  (role_id, context_id, is_default, show_title, permit_self_registration, permit_metadata_edit)
76  VALUES
77  (?, ?, ?, ?, ?, ?)',
78  array(
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,
85  )
86  );
87 
88  $userGroup->setId($this->getInsertId());
89  $this->updateLocaleFields($userGroup);
90  return $userGroup->getId();
91  }
92 
97  function updateObject($userGroup) {
98  $this->update(
99  'UPDATE user_groups SET
100  role_id = ?,
101  context_id = ?,
102  is_default = ?,
103  show_title = ?,
104  permit_self_registration = ?,
105  permit_metadata_edit = ?
106  WHERE user_group_id = ?',
107  array(
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(),
115  )
116  );
117 
118  $this->updateLocaleFields($userGroup);
119  }
120 
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);
131  $this->removeAllStagesFromGroup($contextId, $userGroupId);
132  }
133 
139  function deleteObject($userGroup) {
140  $this->deleteById($userGroup->getContextId(), $userGroup->getId());
141  }
142 
143 
148  function deleteByContextId($contextId) {
149  $result = $this->retrieve('SELECT user_group_id FROM user_groups WHERE context_id = ?', (int) $contextId);
150 
151  for ($i=1; !$result->EOF; $i++) {
152  list($userGroupId) = $result->fields;
153 
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);
157 
158  $result->MoveNext();
159  }
160  }
161 
166  function getInsertId() {
167  return $this->_getInsertId('user_groups', 'user_group_id');
168  }
169 
174  function getLocaleFieldNames() {
175  return array('name', 'abbrev');
176  }
177 
181  function getAdditionalFieldNames() {
182  return array_merge(parent::getAdditionalFieldNames(), array(
183  'recommendOnly',
184 
185  ));
186  }
187 
192  function updateLocaleFields($userGroup) {
193  $this->updateDataObjectSettings('user_group_settings', $userGroup, array(
194  'user_group_id' => (int) $userGroup->getId()
195  ));
196  }
197 
203  function getById($userGroupId, $contextId = null) {
204  $params = array((int) $userGroupId);
205  if ($contextId !== null) $params[] = (int) $contextId;
206  $result = $this->retrieve(
207  'SELECT *
208  FROM user_groups
209  WHERE user_group_id = ?' . ($contextId !== null?' AND context_id = ?':''),
210  $params
211  );
212 
213  return $this->_returnFromRow($result->GetRowAssoc(false));
214  }
215 
221  function getDefaultByRoleId($contextId, $roleId) {
222  $allDefaults = $this->getByRoleId($contextId, $roleId, true);
223  if ($allDefaults->eof()) return false;
224  return $allDefaults->next();
225  }
226 
232  function isDefault($userGroupId) {
233  $result = $this->retrieve(
234  'SELECT is_default FROM user_groups
235  WHERE user_group_id = ?',
236  (int) $userGroupId
237  );
238 
239  $result = $result->GetArray();
240  if (isset($result[0]['is_default'])) {
241  return $result[0]['is_default'];
242  } else {
243  return false;
244  }
245  }
246 
255  function getByRoleId($contextId, $roleId, $default = false, $dbResultRange = null) {
256  $params = array((int) $contextId, (int) $roleId);
257  if ($default) $params[] = 1; // true
258  $result = $this->retrieveRange(
259  'SELECT *
260  FROM user_groups
261  WHERE context_id = ? AND
262  role_id = ?
263  ' . ($default?' AND is_default = ?':'')
264  . ' ORDER BY user_group_id',
265  $params,
266  $dbResultRange
267  );
268 
269  return new DAOResultFactory($result, $this, '_returnFromRow');
270  }
271 
277  function getUserGroupIdsByRoleId($roleId, $contextId = null) {
278  $params = array((int) $roleId);
279  if ($contextId) $params[] = (int) $contextId;
280 
281  $result = $this->retrieve(
282  'SELECT user_group_id
283  FROM user_groups
284  WHERE role_id = ?
285  ' . ($contextId?' AND context_id = ?':''),
286  $params
287  );
288 
289  $userGroupIds = array();
290  while (!$result->EOF) {
291  $userGroupIds[] = (int) $result->fields[0];
292  $result->MoveNext();
293  }
294 
295  $result->Close();
296  return $userGroupIds;
297  }
298 
306  function userInGroup($userId, $userGroupId) {
307  $result = $this->retrieve(
308  'SELECT count(*)
309  FROM user_groups ug
310  JOIN user_user_groups uug ON ug.user_group_id = uug.user_group_id
311  WHERE
312  uug.user_id = ? AND
313  ug.user_group_id = ?',
314  array((int) $userId, (int) $userGroupId)
315  );
316 
317  // > 0 because user could belong to more than one user group with this role
318  $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false;
319 
320  $result->Close();
321  return $returner;
322  }
323 
330  function userInAnyGroup($userId, $contextId = null) {
331  $params = array((int) $userId);
332  if ($contextId) $params[] = (int) $contextId;
333 
334  $result = $this->retrieve(
335  'SELECT count(*)
336  FROM user_groups ug
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 = ?':''),
340  $params
341  );
342 
343  $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false;
344 
345  $result->Close();
346  return $returner;
347  }
348 
355  function getByUserId($userId, $contextId = null){
356  $params = array((int) $userId);
357  if ($contextId) $params[] = (int) $contextId;
358 
359  $result = $this->retrieve(
360  'SELECT ug.*
361  FROM user_groups ug
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 = ?':''),
365  $params
366  );
367 
368  return new DAOResultFactory($result, $this, '_returnFromRow');
369  }
370 
377  function contextHasGroup($contextId, $userGroupId) {
378  $result = $this->retrieve(
379  'SELECT count(*)
380  FROM user_groups ug
381  WHERE ug.user_group_id = ?
382  AND ug.context_id = ?',
383  array (
384  (int) $userGroupId,
385  (int) $contextId
386  )
387  );
388 
389  $returner = isset($result->fields[0]) && $result->fields[0] == 0 ? false : true;
390 
391  $result->Close();
392  return $returner;
393  }
394 
401  function getByContextId($contextId = null, $dbResultRange = null) {
402  $params = array();
403  if ($contextId) $params[] = (int) $contextId;
404 
405  $result = $this->retrieveRange(
406  'SELECT ug.*
407  FROM user_groups ug' .
408  ($contextId?' WHERE ug.context_id = ?':''),
409  $params,
410  $dbResultRange
411  );
412 
413  return new DAOResultFactory($result, $this, '_returnFromRow');
414  }
415 
421  function getContextUsersCount($contextId, $userGroupId = null, $roleId = null) {
422  $params = array((int) $contextId);
423  if ($userGroupId) $params[] = (int) $userGroupId;
424  if ($roleId) $params[] = (int) $roleId;
425  $result = $this->retrieve(
426  'SELECT COUNT(DISTINCT(uug.user_id))
427  FROM user_groups ug
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 = ?':''),
432  $params
433  );
434 
435  $returner = $result->fields[0];
436 
437  $result->Close();
438  return (int) $returner;
439  }
440 
450  function getUsersByContextId($contextId, $searchType = null, $search = null, $searchMatch = null, $dbResultRange = null) {
451  return $this->getUsersById(null, $contextId, $searchType, $search, $searchMatch, $dbResultRange);
452  }
453 
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 . '%'));
467 
468  $result = $this->retrieveRange(
469  'SELECT DISTINCT u.*
470  FROM users u
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 = ?)
474  ':'') .'
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 = ?' : '') .
482  ')' .
483  (isset($search) ? ' AND (usgs.setting_value LIKE ? OR usfs.setting_value LIKE ? OR u.email LIKE ? OR u.username LIKE ?)' : ''),
484  $params,
485  $rangeInfo
486  );
487  return new DAOResultFactory($result, $this->userDao, '_returnUserFromRowWithData');
488  }
489 
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;
505 
506  $sql =
507  'SELECT DISTINCT u.*,
508  ' . $this->userDao->getFetchColumns() .'
509  FROM users AS u
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 = ?)
518 
519  WHERE 1=1 ' .
520  ($contextId?'AND ug.context_id = ? ':'') .
521  ($userGroupId?'AND ug.user_group_id = ? ':'') .
522  $this->_getSearchSql($searchType, $search, $searchMatch, $params);
523 
524  $result = $this->retrieveRange(
525  $sql,
526  $params,
527  $dbResultRange
528  );
529 
530  return new DAOResultFactory($result, $this->userDao, '_returnUserFromRowWithData');
531  }
532 
533  //
534  // UserGroupAssignment related
535  //
540  function deleteAssignmentsByUserId($userId, $userGroupId = null) {
541  $this->userGroupAssignmentDao->deleteByUserId($userId, $userGroupId);
542  }
543 
548  function deleteAssignmentsByUserGroupId($userGroupId) {
549  $this->userGroupAssignmentDao->deleteAssignmentsByUserGroupId($userGroupId);
550  }
551 
557  function deleteAssignmentsByContextId($contextId, $userId = null) {
558  $this->userGroupAssignmentDao->deleteAssignmentsByContextId($contextId, $userId);
559  }
560 
566  function assignUserToGroup($userId, $groupId) {
567  $assignment = $this->userGroupAssignmentDao->newDataObject();
568  $assignment->setUserId($userId);
569  $assignment->setUserGroupId($groupId);
570  $this->userGroupAssignmentDao->insertObject($assignment);
571  }
572 
579  function removeUserFromGroup($userId, $groupId, $contextId) {
580  $assignments = $this->userGroupAssignmentDao->getByUserId($userId, $contextId);
581  while ($assignment = $assignments->next()) {
582  if ($assignment->getUserGroupId() == $groupId) {
583  $this->userGroupAssignmentDao->deleteAssignment($assignment);
584  }
585  }
586  }
587 
593  function removeAllStagesFromGroup($contextId, $userGroupId) {
594  $assignedStages = $this->getAssignedStagesByUserGroupId($contextId, $userGroupId);
595  foreach($assignedStages as $stageId => $stageLocaleKey) {
596  $this->removeGroupFromStage($contextId, $userGroupId, $stageId);
597  }
598  }
599 
606  function assignGroupToStage($contextId, $userGroupId, $stageId) {
607  $this->update(
608  'INSERT INTO user_group_stage (context_id, user_group_id, stage_id) VALUES (?, ?, ?)',
609  array((int) $contextId, (int) $userGroupId, (int) $stageId)
610  );
611  }
612 
619  function removeGroupFromStage($contextId, $userGroupId, $stageId) {
620  $this->update(
621  'DELETE FROM user_group_stage WHERE context_id = ? AND user_group_id = ? AND stage_id = ?',
622  array((int) $contextId, (int) $userGroupId, (int) $stageId)
623  );
624  }
625 
626  //
627  // Extra settings (not handled by rest of Dao)
628  //
637  function updateSetting($userGroupId, $name, $value, $type = null, $isLocalized = false) {
638  $keyFields = array('setting_name', 'locale', 'user_group_id');
639 
640  if (!$isLocalized) {
641  $value = $this->convertToDB($value, $type);
642  $this->replace('user_group_settings',
643  array(
644  'user_group_id' => (int) $userGroupId,
645  'setting_name' => $name,
646  'setting_value' => $value,
647  'setting_type' => $type,
648  'locale' => ''
649  ),
650  $keyFields
651  );
652  } else {
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;
656  $type = null;
657  $this->update('INSERT INTO user_group_settings
658  (user_group_id, setting_name, setting_value, setting_type, locale)
659  VALUES (?, ?, ?, ?, ?)',
660  array(
661  $userGroupId, $name, $this->convertToDB($localeValue, $type), $type, $locale
662  )
663  );
664  }
665  }
666  }
667 
668 
676  function getSetting($userGroupId, $name, $locale = null) {
677  $params = array((int) $userGroupId, $name);
678  if ($locale) $params[] = $locale;
679  $result = $this->retrieve(
680  'SELECT setting_name, setting_value, setting_type, locale
681  FROM user_group_settings
682  WHERE user_group_id = ? AND
683  setting_name = ?' .
684  ($locale?' AND locale = ?':''),
685  $params
686  );
687 
688  $recordCount = $result->RecordCount();
689  $returner = false;
690  if ($recordCount == 1) {
691  $row = $result->getRowAssoc(false);
692  $returner = $this->convertFromDB($row['setting_value'], $row['setting_type']);
693  } elseif ($recordCount > 1) {
694  $returner = array();
695  while (!$result->EOF) {
696  $returner[$row['locale']] = $this->convertFromDB($row['setting_value'], $row['setting_type']);
697  $result->MoveNext();
698  }
699  $result->Close();
700  }
701  return $returner;
702  }
703 
704  //
705  // Install/Defaults with settings
706  //
707 
714  function installSettings($contextId, $filename) {
715  $xmlParser = new XMLParser();
716  $tree = $xmlParser->parse($filename);
717 
718  $siteDao = DAORegistry::getDAO('SiteDAO'); /* @var $siteDao SiteDAO */
719  $site = $siteDao->getSite();
720  $installedLocales = $site->getInstalledLocales();
721 
722  if (!$tree) return false;
723 
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');
730 
731  // If has manager role then permitMetadataEdit can't be overriden
732  if (in_array($roleId, array(ROLE_ID_MANAGER))) {
733  $permitMetadataEdit = $setting->getAttribute('permitMetadataEdit');
734  }
735 
736  $defaultStages = explode(',', $setting->getAttribute('stages'));
737 
738  // create a role associated with this user group
739  $userGroup = $this->newDataObject();
740  $userGroup->setRoleId($roleId);
741  $userGroup->setContextId($contextId);
742  $userGroup->setPermitSelfRegistration($permitSelfRegistration);
743  $userGroup->setPermitMetadataEdit($permitMetadataEdit);
744  $userGroup->setDefault(true);
745 
746  // insert the group into the DB
747  $userGroupId = $this->insertObject($userGroup);
748 
749  // Install default groups for each stage
750  if (is_array($defaultStages)) { // test for groups with no stage assignments
751  foreach ($defaultStages as $stageId) {
752  if (!empty($stageId) && $stageId <= WORKFLOW_STAGE_ID_PRODUCTION && $stageId >= WORKFLOW_STAGE_ID_SUBMISSION) {
753  $this->assignGroupToStage($contextId, $userGroupId, $stageId);
754  }
755  }
756  }
757 
758  // add the i18n keys to the settings table so that they
759  // can be used when a new locale is added/reloaded
760  $this->updateSetting($userGroup->getId(), 'nameLocaleKey', $nameKey);
761  $this->updateSetting($userGroup->getId(), 'abbrevLocaleKey', $abbrevKey);
762 
763  // install the settings in the current locale for this context
764  foreach ($installedLocales as $locale) {
765  $this->installLocale($locale, $contextId);
766  }
767  }
768 
769  return true;
770  }
771 
777  function installLocale($locale, $contextId = null) {
778  $userGroups = $this->getByContextId($contextId);
779  while ($userGroup = $userGroups->next()) {
780  $nameKey = $this->getSetting($userGroup->getId(), 'nameLocaleKey');
781  $this->updateSetting($userGroup->getId(),
782  'name',
783  array($locale => __($nameKey, null, $locale)),
784  'string',
785  $locale,
786  true
787  );
788 
789  $abbrevKey = $this->getSetting($userGroup->getId(), 'abbrevLocaleKey');
790  $this->updateSetting($userGroup->getId(),
791  'abbrev',
792  array($locale => __($abbrevKey, null, $locale)),
793  'string',
794  $locale,
795  true
796  );
797  }
798  }
799 
804  function deleteSettingsByLocale($locale) {
805  return $this->update('DELETE FROM user_group_settings WHERE locale = ?', $locale);
806  }
807 
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',
823  );
824 
825  $searchSql = '';
826 
827  if (!empty($search)) {
828 
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 ? ) ';
832 
833  $search = strtolower($search);
834 
835  $words = preg_split('{\s+}', $search);
836  $searchFieldMap = array();
837 
838  foreach ($words as $word) {
839  $searchFieldMap[] = $concatFields;
840  $term = '%' . $word . '%';
841  array_push($params, $term, $term);
842  }
843 
844  $searchSql .= ' AND ( ' . join(' AND ', $searchFieldMap) . ' ) ';
845  } else {
846  $fieldName = $searchTypeMap[$searchType];
847  switch ($searchMatch) {
848  case 'is':
849  $searchSql = "AND LOWER($fieldName) = LOWER(?)";
850  $params[] = $search;
851  break;
852  case 'contains':
853  $searchSql = "AND LOWER($fieldName) LIKE LOWER(?)";
854  $params[] = '%' . $search . '%';
855  break;
856  case 'startsWith':
857  $searchSql = "AND LOWER($fieldName) LIKE LOWER(?)";
858  $params[] = $search . '%';
859  break;
860  }
861  }
862  } else {
863  switch ($searchType) {
864  case USER_FIELD_USERID:
865  $searchSql = 'AND u.user_id = ?';
866  break;
867  }
868  }
869 
870  $searchSql .= $this->userDao->getOrderBy(); // FIXME Add "sort field" parameter?
871 
872  return $searchSql;
873  }
874 
875  //
876  // Public helper methods
877  //
878 
887  function getUserGroupsByStage($contextId, $stageId, $roleId = null, $dbResultRange = null) {
888  $params = array((int) $contextId, (int) $stageId);
889  if ($roleId) $params[] = (int) $roleId;
890  return new DAOResultFactory(
891  $this->retrieveRange(
892  'SELECT ug.*
893  FROM user_groups ug
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
896  ugs.stage_id = ?
897  ' . ($roleId?'AND ug.role_id = ?':'') . '
898  ORDER BY ug.role_id ASC',
899  $params,
900  $dbResultRange
901  ),
902  $this,
903  '_returnFromRow'
904  );
905  }
906 
913  function getAssignedStagesByUserGroupId($contextId, $userGroupId) {
914  $result = $this->retrieve(
915  'SELECT stage_id
916  FROM user_group_stage
917  WHERE context_id = ? AND
918  user_group_id = ?',
919  array((int) $contextId, (int) $userGroupId)
920  );
921 
922  $returner = array();
923  while (!$result->EOF) {
924  $stageId = $result->Fields('stage_id');
925  $returner[$stageId] = WorkflowStageDAO::getTranslationKeyFromId($stageId);
926  $result->MoveNext();
927  }
928 
929  return $returner;
930  }
931 
938  function userGroupAssignedToStage($userGroupId, $stageId) {
939  $result = $this->retrieve(
940  'SELECT COUNT(*)
941  FROM user_group_stage
942  WHERE user_group_id = ? AND
943  stage_id = ?',
944  array((int) $userGroupId, (int) $stageId)
945  );
946 
947  $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false;
948 
949  $result->Close();
950  return $returner;
951  }
952 
960  function userAssignmentExists($contextId, $userId, $stageId) {
961  $result = $this->retrieve(
962  'SELECT COUNT(*)
963  FROM user_group_stage ugs,
964  user_user_groups uug
965  WHERE ugs.user_group_id = uug.user_group_id AND
966  ugs.context_id = ? AND
967  uug.user_id = ? AND
968  ugs.stage_id = ?',
969  array((int) $contextId, (int) $userId, (int) $stageId)
970  );
971 
972  $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false;
973 
974  $result->Close();
975  return $returner;
976  }
977 
984  function getRecommendOnlyGroupIds($contextId, $roleId = null) {
985  $params = array((int) $contextId);
986  if ($roleId) $params[] = (int) $roleId;
987 
988  $result = $this->retrieve(
989  'SELECT ug.user_group_id
990  FROM user_groups ug
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 = ?':''),
994  $params
995  );
996 
997  $userGroupIds = array();
998  while (!$result->EOF) {
999  $userGroupIds[] = (int) $result->fields[0];
1000  $result->MoveNext();
1001  }
1002 
1003  $result->Close();
1004  return $userGroupIds;
1005  }
1006 
1013  function getPermitMetadataEditGroupIds($contextId, $roleId = null) {
1014  $params = array((int) $contextId);
1015  if ($roleId) $params[] = (int) $roleId;
1016 
1017  $result = $this->retrieve(
1018  'SELECT ug.user_group_id
1019  FROM user_groups ug
1020  WHERE permit_metadata_edit = 1 AND
1021  ug.context_id = ?
1022  ' . ($roleId?' AND ug.role_id = ?':''),
1023  $params
1024  );
1025 
1026  $userGroupIds = array();
1027  while (!$result->EOF) {
1028  $userGroupIds[] = (int) $result->fields[0];
1029  $result->MoveNext();
1030  }
1031 
1032  $result->Close();
1033  return $userGroupIds;
1034  }
1035 
1040  static function getNotChangeMetadataEditPermissionRoles() {
1041  return array(ROLE_ID_MANAGER);
1042  }
1043 }
1044 
1045 
UserGroupDAO\getByRoleId
getByRoleId($contextId, $roleId, $default=false, $dbResultRange=null)
Definition: UserGroupDAO.inc.php:261
UserGroupDAO\userInGroup
userInGroup($userId, $userGroupId)
Definition: UserGroupDAO.inc.php:312
UserGroupDAO\isDefault
isDefault($userGroupId)
Definition: UserGroupDAO.inc.php:238
UserGroupDAO\contextHasGroup
contextHasGroup($contextId, $userGroupId)
Definition: UserGroupDAO.inc.php:383
UserGroupDAO\assignUserToGroup
assignUserToGroup($userId, $groupId)
Definition: UserGroupDAO.inc.php:572
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
UserGroupDAO\$userGroupAssignmentDao
$userGroupAssignmentDao
Definition: UserGroupDAO.inc.php:32
UserGroupDAO\removeAllStagesFromGroup
removeAllStagesFromGroup($contextId, $userGroupId)
Definition: UserGroupDAO.inc.php:599
UserGroupDAO\updateSetting
updateSetting($userGroupId, $name, $value, $type=null, $isLocalized=false)
Definition: UserGroupDAO.inc.php:643
DAO\retrieveRange
& retrieveRange($sql, $params=false, $dbResultRange=null, $callHooks=true)
Definition: DAO.inc.php:176
UserGroupDAO\_getSearchSql
_getSearchSql($searchType, $search, $searchMatch, &$params)
Definition: UserGroupDAO.inc.php:822
DAO\concat
concat()
Definition: DAO.inc.php:54
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
UserGroupDAO\getSetting
getSetting($userGroupId, $name, $locale=null)
Definition: UserGroupDAO.inc.php:682
UserGroupDAO\getRecommendOnlyGroupIds
getRecommendOnlyGroupIds($contextId, $roleId=null)
Definition: UserGroupDAO.inc.php:990
DAO\convertToDB
convertToDB($value, &$type)
Definition: DAO.inc.php:401
UserGroupDAO\updateObject
updateObject($userGroup)
Definition: UserGroupDAO.inc.php:103
UserGroupDAO\getUsersById
getUsersById($userGroupId=null, $contextId=null, $searchType=null, $search=null, $searchMatch=null, $dbResultRange=null)
Definition: UserGroupDAO.inc.php:506
UserGroupDAO\installSettings
installSettings($contextId, $filename)
Definition: UserGroupDAO.inc.php:720
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
UserGroupDAO\deleteSettingsByLocale
deleteSettingsByLocale($locale)
Definition: UserGroupDAO.inc.php:810
DAO\convertFromDB
convertFromDB($value, $type)
Definition: DAO.inc.php:341
UserGroupDAO\getByUserId
getByUserId($userId, $contextId=null)
Definition: UserGroupDAO.inc.php:361
UserGroupDAO\__construct
__construct()
Definition: UserGroupDAO.inc.php:37
UserGroupDAO\deleteByContextId
deleteByContextId($contextId)
Definition: UserGroupDAO.inc.php:154
UserGroupDAO\getAdditionalFieldNames
getAdditionalFieldNames()
Definition: UserGroupDAO.inc.php:187
UserGroupDAO\assignGroupToStage
assignGroupToStage($contextId, $userGroupId, $stageId)
Definition: UserGroupDAO.inc.php:612
UserGroupDAO\getPermitMetadataEditGroupIds
getPermitMetadataEditGroupIds($contextId, $roleId=null)
Definition: UserGroupDAO.inc.php:1019
UserGroupDAO\removeGroupFromStage
removeGroupFromStage($contextId, $userGroupId, $stageId)
Definition: UserGroupDAO.inc.php:625
UserGroupDAO\getById
getById($userGroupId, $contextId=null)
Definition: UserGroupDAO.inc.php:209
UserGroupDAO\deleteAssignmentsByContextId
deleteAssignmentsByContextId($contextId, $userId=null)
Definition: UserGroupDAO.inc.php:563
UserGroupDAO\removeUserFromGroup
removeUserFromGroup($userId, $groupId, $contextId)
Definition: UserGroupDAO.inc.php:585
UserGroupDAO\userGroupAssignedToStage
userGroupAssignedToStage($userGroupId, $stageId)
Definition: UserGroupDAO.inc.php:944
UserGroupDAO\userAssignmentExists
userAssignmentExists($contextId, $userId, $stageId)
Definition: UserGroupDAO.inc.php:966
UserGroupDAO\getUsersByContextId
getUsersByContextId($contextId, $searchType=null, $search=null, $searchMatch=null, $dbResultRange=null)
Definition: UserGroupDAO.inc.php:456
UserGroupDAO\getLocaleFieldNames
getLocaleFieldNames()
Definition: UserGroupDAO.inc.php:180
UserGroup
Describes user groups.
Definition: UserGroup.inc.php:20
UserGroupDAO\getNotChangeMetadataEditPermissionRoles
static getNotChangeMetadataEditPermissionRoles()
Definition: UserGroupDAO.inc.php:1046
UserGroupDAO\newDataObject
newDataObject()
Definition: UserGroupDAO.inc.php:47
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
UserGroupDAO\getContextUsersCount
getContextUsersCount($contextId, $userGroupId=null, $roleId=null)
Definition: UserGroupDAO.inc.php:427
UserGroupDAO\getAssignedStagesByUserGroupId
getAssignedStagesByUserGroupId($contextId, $userGroupId)
Definition: UserGroupDAO.inc.php:919
UserGroupDAO\deleteById
deleteById($contextId, $userGroupId)
Definition: UserGroupDAO.inc.php:133
UserGroupDAO\getInsertId
getInsertId()
Definition: UserGroupDAO.inc.php:172
DAO\_getInsertId
_getInsertId($table='', $id='')
Definition: DAO.inc.php:255
UserGroupDAO\insertObject
insertObject($userGroup)
Definition: UserGroupDAO.inc.php:78
XMLParser
Generic class for parsing an XML document into a data structure.
Definition: XMLParser.inc.php:28
UserGroupDAO
Operations for retrieving and modifying User Groups and user group assignments.
Definition: UserGroupDAO.inc.php:21
UserGroupDAO\$userDao
$userDao
Definition: UserGroupDAO.inc.php:26
UserGroupDAO\_returnFromRow
_returnFromRow($row)
Definition: UserGroupDAO.inc.php:56
UserGroupDAO\userInAnyGroup
userInAnyGroup($userId, $contextId=null)
Definition: UserGroupDAO.inc.php:336
UserGroupDAO\deleteObject
deleteObject($userGroup)
Definition: UserGroupDAO.inc.php:145
DAO\getDataObjectSettings
getDataObjectSettings($tableName, $idFieldName, $idFieldValue, $dataObject)
Definition: DAO.inc.php:582
DAO\replace
replace($table, $arrFields, $keyCols)
Definition: DAO.inc.php:243
UserGroupDAO\getDefaultByRoleId
getDefaultByRoleId($contextId, $roleId)
Definition: UserGroupDAO.inc.php:227
UserGroupDAO\updateLocaleFields
updateLocaleFields($userGroup)
Definition: UserGroupDAO.inc.php:198
UserGroupDAO\installLocale
installLocale($locale, $contextId=null)
Definition: UserGroupDAO.inc.php:783
UserGroupDAO\deleteAssignmentsByUserGroupId
deleteAssignmentsByUserGroupId($userGroupId)
Definition: UserGroupDAO.inc.php:554
UserGroupDAO\deleteAssignmentsByUserId
deleteAssignmentsByUserId($userId, $userGroupId=null)
Definition: UserGroupDAO.inc.php:546
UserGroupDAO\getUserGroupsByStage
getUserGroupsByStage($contextId, $stageId, $roleId=null, $dbResultRange=null)
Definition: UserGroupDAO.inc.php:893
DAO\updateDataObjectSettings
updateDataObjectSettings($tableName, $dataObject, $idArray)
Definition: DAO.inc.php:488
WorkflowStageDAO\getTranslationKeyFromId
static getTranslationKeyFromId($stageId)
Definition: WorkflowStageDAO.inc.php:62
UserGroupDAO\getByContextId
getByContextId($contextId=null, $dbResultRange=null)
Definition: UserGroupDAO.inc.php:407
HookRegistry\call
static call($hookName, $args=null)
Definition: HookRegistry.inc.php:86
UserGroupDAO\getUsersNotInRole
getUsersNotInRole($roleId, $contextId=null, $search=null, $rangeInfo=null)
Definition: UserGroupDAO.inc.php:468
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
UserGroupDAO\getUserGroupIdsByRoleId
getUserGroupIdsByRoleId($roleId, $contextId=null)
Definition: UserGroupDAO.inc.php:283