• Main Page
  • Modules
  • Classes
  • Files
  • File List

classes/stageAssignment/StageAssignmentDAO.inc.php

00001 <?php
00002 
00016 import('classes.stageAssignment.StageAssignment');
00017 
00018 class StageAssignmentDAO extends DAO {
00022    function StageAssignmentDAO() {
00023       parent::DAO();
00024    }
00025 
00031    function getById($stageAssignmentId) {
00032       $result =& $this->retrieve(
00033          $this->getBaseQueryForAssignmentSelection()
00034          . 'WHERE stage_assignment_id = ?',
00035          (int) $stageAssignmentId
00036       );
00037       return $this->_fromRow($result->GetRowAssoc(false));
00038    }
00039 
00048    function getBySubmissionAndStageId($submissionId, $stageId = null, $userGroupId = null, $userId = null) {
00049       return $this->_getByIds($submissionId, $stageId, $userGroupId, $userId);
00050    }
00051 
00060    function getBySubmissionAndRoleId($submissionId, $roleId, $stageId = null, $userId = null) {
00061       return $this->_getByIds($submissionId, $stageId, null, $userId, $roleId);
00062    }
00063 
00068    function getByUserId($userId) {
00069       return $this->_getByIds(null, null, null, $userId);
00070    }
00071 
00078    function getEditorsAssignedToStage($submissionId, $stageId) {
00079       $pressManagerAssignmentFactory = $this->getBySubmissionAndRoleId($submissionId, ROLE_ID_PRESS_MANAGER, $stageId);
00080       $seriesEditorAssignmentFactory = $this->getBySubmissionAndRoleId($submissionId, ROLE_ID_SERIES_EDITOR, $stageId);
00081       return array_merge($pressManagerAssignmentFactory->toArray(), $seriesEditorAssignmentFactory->toArray());
00082    }
00083 
00092    function editorAssignedToStage($submissionId, $stageId = null) {
00093       $params = array((int) $submissionId, ROLE_ID_PRESS_MANAGER, ROLE_ID_SERIES_EDITOR);
00094       if ($stageId) $params[] = (int) $stageId;
00095       $result =& $this->retrieve(
00096          'SELECT  COUNT(*)
00097          FROM  stage_assignments sa
00098             JOIN user_groups ug ON (sa.user_group_id = ug.user_group_id)
00099             JOIN user_group_stage ugs ON (ug.user_group_id = ugs.user_group_id)
00100          WHERE sa.submission_id = ? AND
00101             ug.role_id IN (?, ?)' .
00102             ($stageId?' AND ugs.stage_id = ?':''),
00103          $params
00104       );
00105       $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false;
00106 
00107       $result->Close();
00108       unset($result);
00109 
00110       return $returner;
00111    }
00112 
00120    function build($submissionId, $userGroupId, $userId) {
00121 
00122       // If one exists, fetch and return.
00123       $stageAssignment =& $this->getBySubmissionAndStageId($submissionId, null, $userGroupId, $userId);
00124       if (!$stageAssignment->wasEmpty()) return $stageAssignment;
00125 
00126       // Otherwise, build one.
00127       unset($stageAssignment);
00128       $stageAssignment = $this->newDataObject();
00129       $stageAssignment->setSubmissionId($submissionId);
00130       $stageAssignment->setUserGroupId($userGroupId);
00131       $stageAssignment->setUserId($userId);
00132       $this->insertObject($stageAssignment);
00133       $stageAssignment->setId($this->getInsertStageAssignmentId());
00134       return $stageAssignment;
00135    }
00136 
00141    function newDataObject() {
00142       return new StageAssignment();
00143    }
00144 
00150    function _fromRow(&$row) {
00151       $stageAssignment = $this->newDataObject();
00152 
00153       $stageAssignment->setId($row['stage_assignment_id']);
00154       $stageAssignment->setSubmissionId($row['submission_id']);
00155       $stageAssignment->setUserId($row['user_id']);
00156       $stageAssignment->setUserGroupId($row['user_group_id']);
00157       $stageAssignment->setDateAssigned($row['date_assigned']);
00158       $stageAssignment->setStageId($row['stage_id']);
00159 
00160       return $stageAssignment;
00161    }
00162 
00168    function insertObject(&$stageAssignment) {
00169       return $this->update(
00170          sprintf(
00171             'INSERT INTO stage_assignments
00172                (submission_id, user_group_id, user_id, date_assigned)
00173             VALUES
00174                (?, ?, ?, %s)',
00175             $this->datetimeToDB(Core::getCurrentDate())
00176          ),
00177          array(
00178             $stageAssignment->getSubmissionId(),
00179             $this->nullOrInt($stageAssignment->getUserGroupId()),
00180             $this->nullOrInt($stageAssignment->getUserId())
00181          )
00182       );
00183    }
00184 
00190    function deleteObject($stageAssignment) {
00191       return $this->deleteByAll(
00192          $stageAssignment->getSubmissionId(),
00193          $stageAssignment->getUserGroupId(),
00194          $stageAssignment->getUserId()
00195       );
00196    }
00197 
00205    function deleteByAll($submissionId, $userGroupId, $userId) {
00206       return $this->update(
00207          'DELETE FROM stage_assignments
00208          WHERE submission_id = ?
00209             AND user_group_id = ?
00210             AND user_id = ?',
00211          array((int) $submissionId, (int) $userGroupId, (int) $userId)
00212       );
00213    }
00214 
00219    function getInsertStageAssignmentId() {
00220       return $this->getInsertId('stage_assignments', 'stage_assignment_id');
00221    }
00222 
00235    function _getByIds($submissionId = null, $stageId = null, $userGroupId = null, $userId = null, $roleId = null, $single = false) {
00236       $conditions = array();
00237       $params = array();
00238       if (isset($submissionId)) {
00239          $conditions[] = 'sa.submission_id = ?';
00240          $params[] = (int) $submissionId;
00241       }
00242       if (isset($stageId)) {
00243          $conditions[] = 'ugs.stage_id = ?';
00244          $params[] = (int) $stageId;
00245       }
00246       if (isset($userGroupId)) {
00247          $conditions[] = 'sa.user_group_id = ?';
00248          $params[] = (int) $userGroupId;
00249       }
00250       if (isset($userId)) {
00251          $conditions[] = 'sa.user_id = ?';
00252          $params[] = (int) $userId;
00253       }
00254 
00255       if (isset($roleId)) {
00256          $conditions[] = 'ug.role_id = ?';
00257          $params[] = (int) $roleId;
00258       }
00259 
00260       $result =& $this->retrieve(
00261          $this->getBaseQueryForAssignmentSelection() .
00262          (isset($roleId)?' LEFT JOIN user_groups ug ON sa.user_group_id = ug.user_group_id ':'') .
00263          'WHERE ' . (implode(' AND ', $conditions)),
00264          $params
00265       );
00266 
00267       $returner = null;
00268       if ( $single ) {
00269             // all four parameters must be specified for a single record to be returned
00270             if (!$submissionId && !$stageId && !$userGroupId && !$userId) return false;
00271             // no matches were found.
00272             if ($result->RecordCount() == 0) return false;
00273             $returner =& $this->_fromRow($result->GetRowAssoc(false));
00274             $result->Close();
00275       } else {
00276          // In any other case, return a list of all assignments
00277          $returner = new DAOResultFactory($result, $this, '_fromRow');
00278       }
00279       return $returner;
00280    }
00281 
00286    function getBaseQueryForAssignmentSelection() {
00287       return 'SELECT ugs.stage_id AS stage_id, sa.* FROM stage_assignments sa
00288          JOIN user_group_stage ugs ON sa.user_group_id = ugs.user_group_id ';
00289    }
00290 }
00291 
00292 ?>

Generated on Mon Sep 17 2012 13:58:55 for Open Monograph Press by  doxygen 1.7.1