From 5676fa728fee7331afa42c03bf0d553163aad3af Mon Sep 17 00:00:00 2001 From: Jason Nugent Date: Mon, 4 Feb 2013 11:37:32 -0400 Subject: [PATCH] *8095* move remaining OMP UserGroupDAO functionality to pkp-lib --- classes/core/PKPApplication.inc.php | 1 + ...rGroupDAO.inc.php => UserGroupDAO.inc.php} | 153 +++++++++++++++--- 2 files changed, 130 insertions(+), 24 deletions(-) rename classes/security/{PKPUserGroupDAO.inc.php => UserGroupDAO.inc.php} (85%) diff --git a/classes/core/PKPApplication.inc.php b/classes/core/PKPApplication.inc.php index e47fee5a9a3..168dc7af93f 100644 --- a/classes/core/PKPApplication.inc.php +++ b/classes/core/PKPApplication.inc.php @@ -334,6 +334,7 @@ function getDAOMap() { 'SubmissionSubjectEntryDAO' => 'lib.pkp.classes.submission.SubmissionSubjectEntryDAO', 'TimeZoneDAO' => 'lib.pkp.classes.i18n.TimeZoneDAO', 'TemporaryFileDAO' => 'lib.pkp.classes.file.TemporaryFileDAO', + 'UserGroupDAO' => 'lib.pkp.classes.security.UserGroupDAO', 'VersionDAO' => 'lib.pkp.classes.site.VersionDAO', 'XMLDAO' => 'lib.pkp.classes.db.XMLDAO' ); diff --git a/classes/security/PKPUserGroupDAO.inc.php b/classes/security/UserGroupDAO.inc.php similarity index 85% rename from classes/security/PKPUserGroupDAO.inc.php rename to classes/security/UserGroupDAO.inc.php index 035045000c8..af76a728a6f 100644 --- a/classes/security/PKPUserGroupDAO.inc.php +++ b/classes/security/UserGroupDAO.inc.php @@ -1,12 +1,12 @@ userDao =& DAORegistry::getDAO('UserDAO'); $this->userGroupAssignmentDao =& DAORegistry::getDAO('UserGroupAssignmentDAO'); @@ -47,7 +47,7 @@ function &newDataObject() { /** * Internal function to return a UserGroup object from a row. * @param $row array - * @return PKPUserGroup + * @return UserGroup */ function &_returnFromRow($row) { $userGroup =& $this->newDataObject(); @@ -59,7 +59,7 @@ function &_returnFromRow($row) { $this->getDataObjectSettings('user_group_settings', 'user_group_id', $row['user_group_id'], $userGroup); - HookRegistry::call('PKPUserGroupDAO::_returnFromRow', array(&$userGroup, &$row)); + HookRegistry::call('UserGroupDAO::_returnFromRow', array(&$userGroup, &$row)); return $userGroup; } @@ -849,11 +849,11 @@ function _getSearchSql($searchType, $search, $searchMatch, &$paramArray) { */ function getPathFromId($stageId) { static $stageMapping = array( - WORKFLOW_STAGE_ID_SUBMISSION => WORKFLOW_STAGE_PATH_SUBMISSION, - WORKFLOW_STAGE_ID_INTERNAL_REVIEW => WORKFLOW_STAGE_PATH_INTERNAL_REVIEW, - WORKFLOW_STAGE_ID_EXTERNAL_REVIEW => WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW, - WORKFLOW_STAGE_ID_EDITING => WORKFLOW_STAGE_PATH_EDITING, - WORKFLOW_STAGE_ID_PRODUCTION => WORKFLOW_STAGE_PATH_PRODUCTION + WORKFLOW_STAGE_ID_SUBMISSION => WORKFLOW_STAGE_PATH_SUBMISSION, + WORKFLOW_STAGE_ID_INTERNAL_REVIEW => WORKFLOW_STAGE_PATH_INTERNAL_REVIEW, + WORKFLOW_STAGE_ID_EXTERNAL_REVIEW => WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW, + WORKFLOW_STAGE_ID_EDITING => WORKFLOW_STAGE_PATH_EDITING, + WORKFLOW_STAGE_ID_PRODUCTION => WORKFLOW_STAGE_PATH_PRODUCTION ); if (isset($stageMapping[$stageId])) { return $stageMapping[$stageId]; @@ -869,11 +869,11 @@ function getPathFromId($stageId) { */ function getIdFromPath($stagePath) { static $stageMapping = array( - WORKFLOW_STAGE_PATH_SUBMISSION => WORKFLOW_STAGE_ID_SUBMISSION, - WORKFLOW_STAGE_PATH_INTERNAL_REVIEW => WORKFLOW_STAGE_ID_INTERNAL_REVIEW, - WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW => WORKFLOW_STAGE_ID_EXTERNAL_REVIEW, - WORKFLOW_STAGE_PATH_EDITING => WORKFLOW_STAGE_ID_EDITING, - WORKFLOW_STAGE_PATH_PRODUCTION => WORKFLOW_STAGE_ID_PRODUCTION + WORKFLOW_STAGE_PATH_SUBMISSION => WORKFLOW_STAGE_ID_SUBMISSION, + WORKFLOW_STAGE_PATH_INTERNAL_REVIEW => WORKFLOW_STAGE_ID_INTERNAL_REVIEW, + WORKFLOW_STAGE_PATH_EXTERNAL_REVIEW => WORKFLOW_STAGE_ID_EXTERNAL_REVIEW, + WORKFLOW_STAGE_PATH_EDITING => WORKFLOW_STAGE_ID_EDITING, + WORKFLOW_STAGE_PATH_PRODUCTION => WORKFLOW_STAGE_ID_PRODUCTION ); if (isset($stageMapping[$stagePath])) { return $stageMapping[$stagePath]; @@ -900,11 +900,11 @@ function getTranslationKeyFromId($stageId) { */ static function getWorkflowStageTranslationKeys() { static $stageMapping = array( - WORKFLOW_STAGE_ID_SUBMISSION => 'submission.submission', - WORKFLOW_STAGE_ID_INTERNAL_REVIEW => 'workflow.review.internalReview', - WORKFLOW_STAGE_ID_EXTERNAL_REVIEW => 'workflow.review.externalReview', - WORKFLOW_STAGE_ID_EDITING => 'submission.editorial', - WORKFLOW_STAGE_ID_PRODUCTION => 'submission.production' + WORKFLOW_STAGE_ID_SUBMISSION => 'submission.submission', + WORKFLOW_STAGE_ID_INTERNAL_REVIEW => 'workflow.review.internalReview', + WORKFLOW_STAGE_ID_EXTERNAL_REVIEW => 'workflow.review.externalReview', + WORKFLOW_STAGE_ID_EDITING => 'submission.editorial', + WORKFLOW_STAGE_ID_PRODUCTION => 'submission.production' ); return $stageMapping; @@ -920,14 +920,119 @@ function getWorkflowStageKeysAndPaths() { $stageMapping = array(); foreach ($workflowStages as $stageId => $translationKey) { $stageMapping[$stageId] = array( - 'id' => $stageId, - 'translationKey' => $translationKey, - 'path' => $this->getPathFromId($stageId) + 'id' => $stageId, + 'translationKey' => $translationKey, + 'path' => $this->getPathFromId($stageId) ); } return $stageMapping; } + + + /** + * Get the user groups assigned to each stage. Provide the ability to omit authors and reviewers + * Since these are typically stored differently and displayed in different circumstances + * @param $contextId + * @param $stageId + * @return DAOResultFactory + */ + function &getUserGroupsByStage($contextId, $stageId, $omitAuthors = false, $omitReviewers = false, $roleId = null) { + $params = array((int) $contextId, (int) $stageId); + if ($omitAuthors) $params[] = ROLE_ID_AUTHOR; + if ($omitReviewers) $params[] = ROLE_ID_REVIEWER; + if ($roleId) $params[] = $roleId; + $result =& $this->retrieve( + 'SELECT ug.* + FROM user_groups ug + JOIN user_group_stage ugs ON (ug.user_group_id = ugs.user_group_id AND ug.context_id = ugs.context_id) + WHERE ugs.context_id = ? AND + ugs.stage_id = ?' . + ($omitAuthors?' AND ug.role_id <> ?':'') . + ($omitReviewers?' AND ug.role_id <> ?':'') . + ($roleId?' AND ug.role_id = ?':'') . + ' ORDER BY role_id ASC', + $params + ); + + $returner = new DAOResultFactory($result, $this, '_returnFromRow'); + return $returner; + } + + /** + * Get all stages assigned to one user group in one context. + * @param Integer $contextId The user group context. + * @param Integer $userGroupId + */ + function getAssignedStagesByUserGroupId($contextId, $userGroupId) { + $result =& $this->retrieve( + 'SELECT stage_id + FROM user_group_stage + WHERE context_id = ? AND + user_group_id = ?', + array((int) $contextId, (int) $userGroupId) + ); + + $returner = array(); + + while (!$result->EOF) { + $stageId = $result->Fields('stage_id'); + $returner[$stageId] = $this->getTranslationKeyFromId($stageId); + $result->MoveNext(); + } + + return $returner; + } + + /** + * Check if a user group is assigned to a stage + * @param int $userGroupId + * @param int $stageId + * @return bool + */ + function userGroupAssignedToStage($userGroupId, $stageId) { + $result = $this->retrieve( + 'SELECT COUNT(*) + FROM user_group_stage + WHERE user_group_id = ? AND + stage_id = ?', + array((int) $userGroupId, (int) $stageId) + ); + + $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false; + + $result->Close(); + unset($result); + + return $returner; + } + + /** + * Check to see whether a user is assigned to a stage ID via a user group. + * @param $contextId int + * @param $userId int + * @param $staeId int + * @return boolean + */ + function userAssignmentExists($contextId, $userId, $stageId) { + $result =& $this->retrieve( + 'SELECT COUNT(*) + FROM user_group_stage ugs, + user_user_groups uug + WHERE ugs.user_group_id = uug.user_group_id AND + ugs.context_id = ? AND + uug.user_id = ? AND + ugs.stage_id = ?', + array((int) $contextId, (int) $userId, (int) $stageId) + ); + + $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false; + + $result->Close(); + unset($result); + + return $returner; + } } ?>