00001 <?php
00002
00016
00017
00018
00019 import('submission.editAssignment.EditAssignment');
00020
00021 class EditAssignmentDAO extends DAO {
00027 function &getEditAssignment($editId) {
00028 $result = &$this->retrieve(
00029 'SELECT e.*, u.first_name, u.last_name, u.email, u.initials, r.role_id AS editor_role_id FROM articles a LEFT JOIN edit_assignments e ON (a.article_id = e.article_id) LEFT JOIN users u ON (e.editor_id = u.user_id) LEFT JOIN roles r ON (r.user_id = e.editor_id AND r.role_id = ' . ROLE_ID_EDITOR . ' AND r.journal_id = a.journal_id) WHERE e.edit_id = ? AND a.article_id = e.article_id',
00030 $editId
00031 );
00032
00033 $returner = null;
00034 if ($result->RecordCount() != 0) {
00035 $returner = &$this->_returnEditAssignmentFromRow($result->GetRowAssoc(false));
00036 }
00037
00038 $result->Close();
00039 unset($result);
00040
00041 return $returner;
00042 }
00043
00049 function &getEditAssignmentsByArticleId($articleId) {
00050 $result = &$this->retrieve(
00051 'SELECT e.*, u.first_name, u.last_name, u.email, u.initials, r.role_id AS editor_role_id FROM articles a LEFT JOIN edit_assignments e ON (a.article_id = e.article_id) LEFT JOIN users u ON (e.editor_id = u.user_id) LEFT JOIN roles r ON (r.user_id = e.editor_id AND r.role_id = ' . ROLE_ID_EDITOR . ' AND r.journal_id = a.journal_id) WHERE e.article_id = ? AND a.article_id = e.article_id ORDER BY e.date_notified ASC',
00052 $articleId
00053 );
00054
00055 $returner = &new DAOResultFactory($result, $this, '_returnEditAssignmentFromRow');
00056 return $returner;
00057 }
00058
00064 function &getEditorAssignmentsByArticleId($articleId) {
00065 $result = &$this->retrieve(
00066 'SELECT e.*, u.first_name, u.last_name, u.email, u.initials, r.role_id AS editor_role_id FROM articles a, edit_assignments e, users u, roles r WHERE r.user_id = e.editor_id AND r.role_id = ' . ROLE_ID_EDITOR . ' AND e.article_id = ? AND r.journal_id = a.journal_id AND a.article_id = e.article_id AND e.editor_id = u.user_id ORDER BY e.date_notified ASC',
00067 $articleId
00068 );
00069
00070 $returner = &new DAOResultFactory($result, $this, '_returnEditAssignmentFromRow');
00071 return $returner;
00072 }
00073
00080 function &getReviewingSectionEditorAssignmentsByArticleId($articleId) {
00081 $result = &$this->retrieve(
00082 'SELECT e.*, u.first_name, u.last_name, u.email, u.initials, r.role_id AS editor_role_id FROM articles a LEFT JOIN edit_assignments e ON (a.article_id = e.article_id) LEFT JOIN users u ON (e.editor_id = u.user_id) LEFT JOIN roles r ON (r.user_id = e.editor_id AND r.role_id = ' . ROLE_ID_EDITOR . ' AND r.journal_id = a.journal_id) WHERE e.article_id = ? AND a.article_id = e.article_id AND r.role_id IS NULL AND e.can_review = 1 ORDER BY e.date_notified ASC',
00083 $articleId
00084 );
00085
00086 $returner = &new DAOResultFactory($result, $this, '_returnEditAssignmentFromRow');
00087 return $returner;
00088 }
00089
00096 function &getEditingSectionEditorAssignmentsByArticleId($articleId) {
00097 $result = &$this->retrieve(
00098 'SELECT e.*, u.first_name, u.last_name, u.email, u.initials, r.role_id AS editor_role_id FROM articles a LEFT JOIN edit_assignments e ON (a.article_id = e.article_id) LEFT JOIN users u ON (e.editor_id = u.user_id) LEFT JOIN roles r ON (r.user_id = e.editor_id AND r.role_id = ' . ROLE_ID_EDITOR . ' AND r.journal_id = a.journal_id) WHERE e.article_id = ? AND a.article_id = e.article_id AND r.role_id IS NULL AND e.can_edit = 1 ORDER BY e.date_notified ASC',
00099 $articleId
00100 );
00101
00102 $returner = &new DAOResultFactory($result, $this, '_returnEditAssignmentFromRow');
00103 return $returner;
00104 }
00105
00111 function &getEditAssignmentsByUserId($userId) {
00112 $result = &$this->retrieve(
00113 'SELECT e.*, u.first_name, u.last_name, u.email, u.initials, r.role_id AS editor_role_id FROM articles a LEFT JOIN edit_assignments e ON (a.article_id = e.article_id) LEFT JOIN users u ON (e.editor_id = u.user_id) LEFT JOIN roles r ON (r.user_id = e.editor_id AND r.role_id = ' . ROLE_ID_EDITOR . ' AND r.journal_id = a.journal_id) WHERE e.editor_id = ? AND a.article_id = e.article_id ORDER BY e.date_notified ASC',
00114 $userId
00115 );
00116
00117 $returner = &new DAOResultFactory($result, $this, '_returnEditAssignmentFromRow');
00118 return $returner;
00119 }
00120
00126 function &_returnEditAssignmentFromRow(&$row) {
00127 $editAssignment = &new EditAssignment();
00128 $editAssignment->setEditId($row['edit_id']);
00129 $editAssignment->setArticleId($row['article_id']);
00130 $editAssignment->setEditorId($row['editor_id']);
00131 $editAssignment->setCanReview($row['can_review']);
00132 $editAssignment->setCanEdit($row['can_edit']);
00133 $editAssignment->setEditorFullName($row['first_name'].' '.$row['last_name']);
00134 $editAssignment->setEditorFirstName($row['first_name']);
00135 $editAssignment->setEditorLastName($row['last_name']);
00136 $editAssignment->setEditorInitials($row['initials']);
00137 $editAssignment->setEditorEmail($row['email']);
00138 $editAssignment->setIsEditor($row['editor_role_id']==ROLE_ID_EDITOR?1:0);
00139 $editAssignment->setDateUnderway($this->datetimeFromDB($row['date_underway']));
00140 $editAssignment->setDateNotified($this->datetimeFromDB($row['date_notified']));
00141
00142 HookRegistry::call('EditAssignmentDAO::_returnEditAssignmentFromRow', array(&$editAssignment, &$row));
00143
00144 return $editAssignment;
00145 }
00146
00151 function insertEditAssignment(&$editAssignment) {
00152 $this->update(
00153 sprintf('INSERT INTO edit_assignments
00154 (article_id, editor_id, can_edit, can_review, date_notified, date_underway)
00155 VALUES
00156 (?, ?, ?, ?, %s, %s)',
00157 $this->datetimeToDB($editAssignment->getDateNotified()),
00158 $this->datetimeToDB($editAssignment->getDateUnderway())),
00159 array(
00160 $editAssignment->getArticleId(),
00161 $editAssignment->getEditorId(),
00162 $editAssignment->getCanEdit()?1:0,
00163 $editAssignment->getCanReview()?1:0
00164 )
00165 );
00166
00167 $editAssignment->setEditId($this->getInsertEditId());
00168 return $editAssignment->getEditId();
00169 }
00170
00175 function updateEditAssignment(&$editAssignment) {
00176 return $this->update(
00177 sprintf('UPDATE edit_assignments
00178 SET article_id = ?,
00179 editor_id = ?,
00180 can_review = ?,
00181 can_edit = ?,
00182 date_notified = %s,
00183 date_underway = %s
00184 WHERE edit_id = ?',
00185 $this->datetimeToDB($editAssignment->getDateNotified()),
00186 $this->datetimeToDB($editAssignment->getDateUnderway())),
00187 array(
00188 $editAssignment->getArticleId(),
00189 $editAssignment->getEditorId(),
00190 $editAssignment->getCanReview() ? 1:0,
00191 $editAssignment->getCanEdit() ? 1:0,
00192 $editAssignment->getEditId()
00193 )
00194 );
00195 }
00196
00201 function deleteEditAssignmentById($editId) {
00202 return $this->update(
00203 'DELETE FROM edit_assignments WHERE edit_id = ?',
00204 $editId
00205 );
00206 }
00207
00212 function deleteEditAssignmentsByArticle($articleId) {
00213 return $this->update(
00214 'DELETE FROM edit_assignments WHERE article_id = ?',
00215 $articleId
00216 );
00217 }
00218
00223 function getInsertEditId() {
00224 return $this->getInsertId('edit_assignments', 'edit_id');
00225 }
00226
00231 function getEditorStatistics($journalId) {
00232 $statistics = Array();
00233
00234
00235 $result =& $this->retrieve(
00236 'SELECT ea.editor_id,
00237 COUNT(ea.article_id) AS complete
00238 FROM edit_assignments ea,
00239 articles a
00240 WHERE ea.article_id = a.article_id AND
00241 a.journal_id = ? AND (
00242 a.status = ' . STATUS_ARCHIVED . ' OR
00243 a.status = ' . STATUS_PUBLISHED . ' OR
00244 a.status = ' . STATUS_DECLINED . '
00245 )
00246 GROUP BY ea.editor_id',
00247 $journalId
00248 );
00249
00250 while (!$result->EOF) {
00251 $row = $result->GetRowAssoc(false);
00252 if (!isset($statistics[$row['editor_id']])) $statistics[$row['editor_id']] = array();
00253 $statistics[$row['editor_id']]['complete'] = $row['complete'];
00254 $result->MoveNext();
00255 }
00256 $result->Close();
00257 unset($result);
00258
00259
00260 $result =& $this->retrieve(
00261 'SELECT ea.editor_id,
00262 COUNT(ea.article_id) AS incomplete
00263 FROM edit_assignments ea,
00264 articles a
00265 WHERE ea.article_id = a.article_id AND
00266 a.journal_id = ? AND
00267 a.status = ' . STATUS_QUEUED . '
00268 GROUP BY ea.editor_id',
00269 $journalId
00270 );
00271
00272 while (!$result->EOF) {
00273 $row = $result->GetRowAssoc(false);
00274 if (!isset($statistics[$row['editor_id']])) $statistics[$row['editor_id']] = array();
00275 $statistics[$row['editor_id']]['incomplete'] = $row['incomplete'];
00276 $result->MoveNext();
00277 }
00278 $result->Close();
00279 unset($result);
00280
00281 return $statistics;
00282 }
00283 }
00284
00285 ?>