Open Monograph Press  3.3.0
StageAssignmentDAO.inc.php
1 <?php
2 
17 import('lib.pkp.classes.stageAssignment.StageAssignment');
18 
19 class StageAssignmentDAO extends DAO {
20 
26  function getById($stageAssignmentId) {
27  $result = $this->retrieve(
29  . 'WHERE stage_assignment_id = ?',
30  (int) $stageAssignmentId
31  );
32  return $this->_fromRow($result->GetRowAssoc(false));
33  }
34 
43  function getBySubmissionAndStageId($submissionId, $stageId = null, $userGroupId = null, $userId = null) {
44  return $this->_getByIds($submissionId, $stageId, $userGroupId, $userId);
45  }
46 
55  function getBySubmissionAndRoleId($submissionId, $roleId, $stageId = null, $userId = null) {
56  return $this->_getByIds($submissionId, $stageId, null, $userId, $roleId);
57  }
58 
64  function getByUserId($userId) {
65  return $this->_getByIds(null, null, null, $userId);
66  }
67 
68 
76  function getBySubmissionAndUserIdAndStageId($submissionId, $userId, $stageId = null) {
77  return $this->_getByIds($submissionId, $stageId, null, $userId);
78  }
79 
86  function getEditorsAssignedToStage($submissionId, $stageId) {
87  $managerAssignmentFactory = $this->getBySubmissionAndRoleId($submissionId, ROLE_ID_MANAGER, $stageId);
88  $subEditorAssignmentFactory = $this->getBySubmissionAndRoleId($submissionId, ROLE_ID_SUB_EDITOR, $stageId);
89  return array_merge($managerAssignmentFactory->toArray(), $subEditorAssignmentFactory->toArray());
90  }
91 
100  function editorAssignedToStage($submissionId, $stageId = null) {
101  $params = array((int) $submissionId, ROLE_ID_MANAGER, ROLE_ID_SUB_EDITOR);
102  if ($stageId) $params[] = (int) $stageId;
103  $result = $this->retrieve(
104  'SELECT COUNT(*)
105  FROM stage_assignments sa
106  JOIN user_groups ug ON (sa.user_group_id = ug.user_group_id)
107  JOIN user_group_stage ugs ON (ug.user_group_id = ugs.user_group_id)
108  WHERE sa.submission_id = ? AND
109  ug.role_id IN (?, ?)' .
110  ($stageId?' AND ugs.stage_id = ?':''),
111  $params
112  );
113  $returner = isset($result->fields[0]) && $result->fields[0] > 0 ? true : false;
114 
115  $result->Close();
116  return $returner;
117  }
118 
125  function getByUserGroupId($userGroupId, $contextId) {
126  $params = array(
127  (int) $userGroupId,
128  (int) $contextId
129  );
130 
131  $result = $this->retrieve(
132  'SELECT * FROM stage_assignments sa'
133  . ' JOIN submissions s ON s.submission_id = sa.submission_id'
134  . ' WHERE sa.user_group_id = ? AND s.context_id = ?',
135  $params
136  );
137 
138  return new DAOResultFactory($result, $this, '_fromRow');
139  }
140 
150  function build($submissionId, $userGroupId, $userId, $recommendOnly = false, $canChangeMetadata = null) {
151  if (!isset($canChangeMetadata)) {
152  $userGroupDao = DAORegistry::getDAO('UserGroupDAO'); /* @var $userGroupDao UserGroupDAO */
153 
155  $userGroup = $userGroupDao->getById($userGroupId);
156 
157  $canChangeMetadata = $userGroup->getPermitMetadataEdit();
158  }
159 
160 
161  // If one exists, fetch and return.
162  $stageAssignment = $this->getBySubmissionAndStageId($submissionId, null, $userGroupId, $userId);
163  if (!$stageAssignment->wasEmpty()) return $stageAssignment;
164 
165  // Otherwise, build one.
166  $stageAssignment = $this->newDataObject();
167  $stageAssignment->setSubmissionId($submissionId);
168  $stageAssignment->setUserGroupId($userGroupId);
169  $stageAssignment->setUserId($userId);
170  $stageAssignment->setRecommendOnly($recommendOnly);
171  $stageAssignment->setCanChangeMetadata($canChangeMetadata);
172  $this->insertObject($stageAssignment);
173  $stageAssignment->setId($this->getInsertId());
174  return $stageAssignment;
175  }
176 
181  function newDataObject() {
182  return new StageAssignment();
183  }
184 
190  function _fromRow($row) {
191  $stageAssignment = $this->newDataObject();
192 
193  $stageAssignment->setId($row['stage_assignment_id']);
194  $stageAssignment->setSubmissionId($row['submission_id']);
195  $stageAssignment->setUserId($row['user_id']);
196  $stageAssignment->setUserGroupId($row['user_group_id']);
197  $stageAssignment->setDateAssigned($row['date_assigned']);
198  $stageAssignment->setStageId($row['stage_id']);
199  $stageAssignment->setRecommendOnly((boolean) $row['recommend_only']);
200  $stageAssignment->setCanChangeMetadata($row['can_change_metadata']);
201 
202  return $stageAssignment;
203  }
204 
209  function insertObject($stageAssignment) {
210  $this->update(
211  sprintf(
212  'INSERT INTO stage_assignments
213  (submission_id, user_group_id, user_id, date_assigned, recommend_only, can_change_metadata)
214  VALUES
215  (?, ?, ?, %s, ?, ?)',
217  ),
218  array(
219  $stageAssignment->getSubmissionId(),
220  $this->nullOrInt($stageAssignment->getUserGroupId()),
221  $this->nullOrInt($stageAssignment->getUserId()),
222  (int) $stageAssignment->getRecommendOnly(),
223  (int) $stageAssignment->getCanChangeMetadata()
224  )
225  );
226  }
227 
232  function updateObject($stageAssignment) {
233  $this->update(
234  sprintf(
235  'UPDATE stage_assignments SET
236  submission_id = ?,
237  user_group_id = ?,
238  user_id = ?,
239  date_assigned = %s,
240  recommend_only = ?,
241  can_change_metadata = ?
242  WHERE stage_assignment_id = ?',
244  ),
245  array(
246  (int) $stageAssignment->getSubmissionId(),
247  $this->nullOrInt($stageAssignment->getUserGroupId()),
248  $this->nullOrInt($stageAssignment->getUserId()),
249  (int) $stageAssignment->getRecommendOnly(),
250  (int) $stageAssignment->getCanChangeMetadata(),
251  (int) $stageAssignment->getId()
252  )
253  );
254  }
255 
260  function deleteObject($stageAssignment) {
261  $this->deleteByAll(
262  $stageAssignment->getSubmissionId(),
263  $stageAssignment->getUserGroupId(),
264  $stageAssignment->getUserId()
265  );
266  }
267 
274  function deleteByAll($submissionId, $userGroupId, $userId) {
275  $this->update(
276  'DELETE FROM stage_assignments
277  WHERE submission_id = ?
278  AND user_group_id = ?
279  AND user_id = ?',
280  array((int) $submissionId, (int) $userGroupId, (int) $userId)
281  );
282  }
283 
288  function getInsertId() {
289  return $this->_getInsertId('stage_assignments', 'stage_assignment_id');
290  }
291 
305  function _getByIds($submissionId = null, $stageId = null, $userGroupId = null, $userId = null, $roleId = null, $single = false) {
306  $conditions = array();
307  $params = array();
308  if (isset($submissionId)) {
309  $conditions[] = 'sa.submission_id = ?';
310  $params[] = (int) $submissionId;
311  }
312  if (isset($stageId)) {
313  $conditions[] = 'ugs.stage_id = ?';
314  $params[] = (int) $stageId;
315  }
316  if (isset($userGroupId)) {
317  $conditions[] = 'sa.user_group_id = ?';
318  $params[] = (int) $userGroupId;
319  }
320  if (isset($userId)) {
321  $conditions[] = 'sa.user_id = ?';
322  $params[] = (int) $userId;
323  }
324 
325  if (isset($roleId)) {
326  $conditions[] = 'ug.role_id = ?';
327  $params[] = (int) $roleId;
328  }
329 
330  $result = $this->retrieve(
332  (isset($roleId)?' LEFT JOIN user_groups ug ON sa.user_group_id = ug.user_group_id ':'') .
333  'WHERE ' . (implode(' AND ', $conditions)),
334  $params
335  );
336 
337  if ($single) {
338  // all four parameters must be specified for a single record to be returned
339  if (!$submissionId && !$stageId && !$userGroupId && !$userId) return false;
340  // no matches were found.
341  if ($result->RecordCount() == 0) return false;
342  $returner = $this->_fromRow($result->GetRowAssoc(false));
343  $result->Close();
344  return $returner;
345  } else {
346  // In any other case, return a list of all assignments
347  return new DAOResultFactory($result, $this, '_fromRow');
348  }
349  }
350 
356  return 'SELECT ugs.stage_id AS stage_id, sa.* FROM stage_assignments sa
357  JOIN user_group_stage ugs ON sa.user_group_id = ugs.user_group_id ';
358  }
359 }
360 
361 
StageAssignmentDAO\getBySubmissionAndRoleId
getBySubmissionAndRoleId($submissionId, $roleId, $stageId=null, $userId=null)
Definition: StageAssignmentDAO.inc.php:55
StageAssignmentDAO\deleteByAll
deleteByAll($submissionId, $userGroupId, $userId)
Definition: StageAssignmentDAO.inc.php:274
DAOResultFactory
Wrapper around ADORecordSet providing "factory" features for generating objects from DAOs.
Definition: DAOResultFactory.inc.php:21
StageAssignmentDAO
Operations for retrieving and modifying StageAssignment objects.
Definition: StageAssignmentDAO.inc.php:19
StageAssignmentDAO\_getByIds
_getByIds($submissionId=null, $stageId=null, $userGroupId=null, $userId=null, $roleId=null, $single=false)
Definition: StageAssignmentDAO.inc.php:305
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
StageAssignmentDAO\_fromRow
_fromRow($row)
Definition: StageAssignmentDAO.inc.php:190
StageAssignmentDAO\deleteObject
deleteObject($stageAssignment)
Definition: StageAssignmentDAO.inc.php:260
StageAssignmentDAO\getBySubmissionAndStageId
getBySubmissionAndStageId($submissionId, $stageId=null, $userGroupId=null, $userId=null)
Definition: StageAssignmentDAO.inc.php:43
StageAssignmentDAO\build
build($submissionId, $userGroupId, $userId, $recommendOnly=false, $canChangeMetadata=null)
Definition: StageAssignmentDAO.inc.php:150
DAO\retrieve
& retrieve($sql, $params=false, $callHooks=true)
Definition: DAO.inc.php:85
StageAssignmentDAO\getInsertId
getInsertId()
Definition: StageAssignmentDAO.inc.php:288
StageAssignmentDAO\editorAssignedToStage
editorAssignedToStage($submissionId, $stageId=null)
Definition: StageAssignmentDAO.inc.php:100
DAO\update
update($sql, $params=false, $callHooks=true, $dieOnError=true)
Definition: DAO.inc.php:214
StageAssignment
Basic class describing a Stage Assignment.
Definition: StageAssignment.inc.php:23
DAO\datetimeToDB
datetimeToDB($dt)
Definition: DAO.inc.php:299
StageAssignmentDAO\getBaseQueryForAssignmentSelection
getBaseQueryForAssignmentSelection()
Definition: StageAssignmentDAO.inc.php:355
DAO\_getInsertId
_getInsertId($table='', $id='')
Definition: DAO.inc.php:255
StageAssignmentDAO\getByUserId
getByUserId($userId)
Definition: StageAssignmentDAO.inc.php:64
StageAssignmentDAO\getBySubmissionAndUserIdAndStageId
getBySubmissionAndUserIdAndStageId($submissionId, $userId, $stageId=null)
Definition: StageAssignmentDAO.inc.php:76
StageAssignmentDAO\getById
getById($stageAssignmentId)
Definition: StageAssignmentDAO.inc.php:26
Core\getCurrentDate
static getCurrentDate($ts=null)
Definition: Core.inc.php:63
StageAssignmentDAO\getByUserGroupId
getByUserGroupId($userGroupId, $contextId)
Definition: StageAssignmentDAO.inc.php:125
StageAssignmentDAO\updateObject
updateObject($stageAssignment)
Definition: StageAssignmentDAO.inc.php:232
DAO
Operations for retrieving and modifying objects from a database.
Definition: DAO.inc.php:31
StageAssignmentDAO\insertObject
insertObject($stageAssignment)
Definition: StageAssignmentDAO.inc.php:209
StageAssignmentDAO\getEditorsAssignedToStage
getEditorsAssignedToStage($submissionId, $stageId)
Definition: StageAssignmentDAO.inc.php:86
StageAssignmentDAO\newDataObject
newDataObject()
Definition: StageAssignmentDAO.inc.php:181