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
00123 $stageAssignment =& $this->getBySubmissionAndStageId($submissionId, null, $userGroupId, $userId);
00124 if (!$stageAssignment->wasEmpty()) return $stageAssignment;
00125
00126
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
00270 if (!$submissionId && !$stageId && !$userGroupId && !$userId) return false;
00271
00272 if ($result->RecordCount() == 0) return false;
00273 $returner =& $this->_fromRow($result->GetRowAssoc(false));
00274 $result->Close();
00275 } else {
00276
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 ?>