00001 <?php
00002
00016
00017
00018
00019 import('submission.editor.EditorSubmission');
00020 import('submission.author.AuthorSubmission');
00021
00022 class EditorSubmissionDAO extends DAO {
00023 var $articleDao;
00024 var $authorDao;
00025 var $userDao;
00026 var $editAssignmentDao;
00027
00031 function EditorSubmissionDAO() {
00032 parent::DAO();
00033 $this->articleDao = &DAORegistry::getDAO('ArticleDAO');
00034 $this->authorDao = &DAORegistry::getDAO('AuthorDAO');
00035 $this->userDao = &DAORegistry::getDAO('UserDAO');
00036 $this->editAssignmentDao = &DAORegistry::getDAO('EditAssignmentDAO');
00037 }
00038
00044 function &getEditorSubmission($articleId) {
00045 $primaryLocale = Locale::getPrimaryLocale();
00046 $locale = Locale::getLocale();
00047 $result = &$this->retrieve(
00048 'SELECT
00049 a.*,
00050 COALESCE(stl.setting_value, stpl.setting_value) AS section_title,
00051 COALESCE(sal.setting_value, sapl.setting_value) AS section_abbrev
00052 FROM articles a
00053 LEFT JOIN sections s ON s.section_id = a.section_id
00054 LEFT JOIN section_settings stpl ON (s.section_id = stpl.section_id AND stpl.setting_name = ? AND stpl.locale = ?)
00055 LEFT JOIN section_settings stl ON (s.section_id = stl.section_id AND stl.setting_name = ? AND stl.locale = ?)
00056 LEFT JOIN section_settings sapl ON (s.section_id = sapl.section_id AND sapl.setting_name = ? AND sapl.locale = ?)
00057 LEFT JOIN section_settings sal ON (s.section_id = sal.section_id AND sal.setting_name = ? AND sal.locale = ?)
00058 WHERE a.article_id = ?',
00059 array(
00060 'title',
00061 $primaryLocale,
00062 'title',
00063 $locale,
00064 'abbrev',
00065 $primaryLocale,
00066 'abbrev',
00067 $locale,
00068 $articleId
00069 )
00070 );
00071
00072 $returner = null;
00073 if ($result->RecordCount() != 0) {
00074 $returner = &$this->_returnEditorSubmissionFromRow($result->GetRowAssoc(false));
00075 }
00076
00077 $result->Close();
00078 unset($result);
00079
00080 return $returner;
00081 }
00082
00088 function &_returnEditorSubmissionFromRow(&$row) {
00089 $editorSubmission = &new EditorSubmission();
00090
00091
00092 $this->articleDao->_articleFromRow($editorSubmission, $row);
00093
00094
00095 $editAssignments =& $this->editAssignmentDao->getEditAssignmentsByArticleId($row['article_id']);
00096 $editorSubmission->setEditAssignments($editAssignments->toArray());
00097
00098
00099 for ($i = 1; $i <= $row['current_round']; $i++) {
00100 $editorSubmission->setDecisions($this->getEditorDecisions($row['article_id'], $i), $i);
00101 }
00102
00103 HookRegistry::call('EditorSubmissionDAO::_returnEditorSubmissionFromRow', array(&$editorSubmission, &$row));
00104
00105 return $editorSubmission;
00106 }
00107
00112 function insertEditorSubmission(&$editorSubmission) {
00113 $this->update(
00114 sprintf('INSERT INTO edit_assignments
00115 (article_id, editor_id, date_notified, date_completed, date_acknowledged)
00116 VALUES
00117 (?, ?, %s, %s, %s)',
00118 $this->datetimeToDB($editorSubmission->getDateNotified()), $this->datetimeToDB($editorSubmission->getDateCompleted()), $this->datetimeToDB($editorSubmission->getDateAcknowledged())),
00119 array(
00120 $editorSubmission->getArticleId(),
00121 $editorSubmission->getEditorId()
00122 )
00123 );
00124
00125 $editorSubmission->setEditId($this->getInsertEditId());
00126
00127
00128 $reviewAssignments = &$editorSubmission->getReviewAssignments();
00129 for ($i=0, $count=count($reviewAssignments); $i < $count; $i++) {
00130 $reviewAssignments[$i]->setArticleId($editorSubmission->getArticleId());
00131 $this->reviewAssignmentDao->insertReviewAssignment($reviewAssignments[$i]);
00132 }
00133
00134 return $editorSubmission->getEditId();
00135 }
00136
00141 function updateEditorSubmission(&$editorSubmission) {
00142
00143 $editAssignments = $editorSubmission->getEditAssignments();
00144 foreach ($editAssignments as $editAssignment) {
00145 if ($editAssignment->getEditId() > 0) {
00146 $this->editAssignmentDao->updateEditAssignment($editAssignment);
00147 } else {
00148 $this->editAssignmentDao->insertEditAssignment($editAssignment);
00149 }
00150 }
00151 }
00152
00159 function &getEditorSubmissions($journalId, $status = true, $sectionId = 0, $rangeInfo = null) {
00160 $primaryLocale = Locale::getPrimaryLocale();
00161 $locale = Locale::getLocale();
00162 $params = array(
00163 'title',
00164 $primaryLocale,
00165 'title',
00166 $locale,
00167 'abbrev',
00168 $primaryLocale,
00169 'abbrev',
00170 $locale,
00171 $journalId,
00172 $status
00173 );
00174 if ($sectionId) $params[] = $sectionId;
00175
00176 $sql = 'SELECT a.*,
00177 COALESCE(stl.setting_value, stpl.setting_value) AS section_title,
00178 COALESCE(sal.setting_value, sapl.setting_value) AS section_abbrev
00179
00180 FROM articles a
00181 LEFT JOIN sections s ON (s.section_id = a.section_id)
00182 LEFT JOIN section_settings stpl ON (s.section_id = stpl.section_id AND stpl.setting_name = ? AND stpl.locale = ?)
00183 LEFT JOIN section_settings stl ON (s.section_id = stl.section_id AND stl.setting_name = ? AND stl.locale = ?)
00184 LEFT JOIN section_settings sapl ON (s.section_id = sapl.section_id AND sapl.setting_name = ? AND sapl.locale = ?)
00185 LEFT JOIN section_settings sal ON (s.section_id = sal.section_id AND sal.setting_name = ? AND sal.locale = ?)
00186 WHERE a.journal_id = ?
00187 AND a.status = ?' .
00188 ($sectionId?' AND a.section_id = ?':'') .
00189 ' ORDER BY article_id ASC';
00190
00191 $result = &$this->retrieveRange($sql, $params, $rangeInfo);
00192 $returner = &new DAOResultFactory($result, $this, '_returnEditorSubmissionFromRow');
00193 return $returner;
00194 }
00195
00211 function &getUnfilteredEditorSubmissions($journalId, $sectionId = 0, $editorId = 0, $searchField = null, $searchMatch = null, $search = null, $dateField = null, $dateFrom = null, $dateTo = null, $status = true, $rangeInfo = null) {
00212 $primaryLocale = Locale::getPrimaryLocale();
00213 $locale = Locale::getLocale();
00214 $params = array(
00215 'title',
00216 $primaryLocale,
00217 'title',
00218 $locale,
00219 'abbrev',
00220 $primaryLocale,
00221 'abbrev',
00222 $locale,
00223 'title',
00224 $primaryLocale,
00225 'title',
00226 $locale,
00227 $journalId
00228 );
00229 $searchSql = '';
00230
00231 if (!empty($search)) switch ($searchField) {
00232 case SUBMISSION_FIELD_TITLE:
00233 if ($searchMatch === 'is') {
00234 $searchSql = ' AND LOWER(COALESCE(atl.setting_value, atpl.setting_value)) = LOWER(?)';
00235 } else {
00236 $searchSql = ' AND LOWER(COALESCE(atl.setting_value, atpl.setting_value)) LIKE LOWER(?)';
00237 $search = '%' . $search . '%';
00238 }
00239 $params[] = $search;
00240 break;
00241 case SUBMISSION_FIELD_AUTHOR:
00242 $searchSql = $this->_generateUserNameSearchSQL($search, $searchMatch, 'aa.', $params);
00243 break;
00244 case SUBMISSION_FIELD_EDITOR:
00245 $searchSql = $this->_generateUserNameSearchSQL($search, $searchMatch, 'ed.', $params);
00246 break;
00247 case SUBMISSION_FIELD_REVIEWER:
00248 $searchSql = $this->_generateUserNameSearchSQL($search, $searchMatch, 're.', $params);
00249 break;
00250 case SUBMISSION_FIELD_COPYEDITOR:
00251 $searchSql = $this->_generateUserNameSearchSQL($search, $searchMatch, 'ce.', $params);
00252 break;
00253 case SUBMISSION_FIELD_LAYOUTEDITOR:
00254 $searchSql = $this->_generateUserNameSearchSQL($search, $searchMatch, 'le.', $params);
00255 break;
00256 case SUBMISSION_FIELD_PROOFREADER:
00257 $searchSql = $this->_generateUserNameSearchSQL($search, $searchMatch, 'pe.', $params);
00258 break;
00259 }
00260 if (!empty($dateFrom) || !empty($dateTo)) switch($dateField) {
00261 case SUBMISSION_FIELD_DATE_SUBMITTED:
00262 if (!empty($dateFrom)) {
00263 $searchSql .= ' AND a.date_submitted >= ' . $this->datetimeToDB($dateFrom);
00264 }
00265 if (!empty($dateTo)) {
00266 $searchSql .= ' AND a.date_submitted <= ' . $this->datetimeToDB($dateTo);
00267 }
00268 break;
00269 case SUBMISSION_FIELD_DATE_COPYEDIT_COMPLETE:
00270 if (!empty($dateFrom)) {
00271 $searchSql .= ' AND c.date_final_completed >= ' . $this->datetimeToDB($dateFrom);
00272 }
00273 if (!empty($dateTo)) {
00274 $searchSql .= ' AND c.date_final_completed <= ' . $this->datetimeToDB($dateTo);
00275 }
00276 break;
00277 case SUBMISSION_FIELD_DATE_LAYOUT_COMPLETE:
00278 if (!empty($dateFrom)) {
00279 $searchSql .= ' AND l.date_completed >= ' . $this->datetimeToDB($dateFrom);
00280 }
00281 if (!empty($dateTo)) {
00282 $searchSql .= ' AND l.date_completed <= ' . $this->datetimeToDB($dateTo);
00283 }
00284 break;
00285 case SUBMISSION_FIELD_DATE_PROOFREADING_COMPLETE:
00286 if (!empty($dateFrom)) {
00287 $searchSql .= ' AND p.date_proofreader_completed >= ' . $this->datetimeToDB($dateFrom);
00288 }
00289 if (!empty($dateTo)) {
00290 $searchSql .= ' AND p.date_proofreader_completed <= ' . $this->datetimeToDB($dateTo);
00291 }
00292 break;
00293 }
00294
00295 $sql = 'SELECT DISTINCT
00296 a.*,
00297 COALESCE(stl.setting_value, stpl.setting_value) AS section_title,
00298 COALESCE(sal.setting_value, sapl.setting_value) AS section_abbrev
00299 FROM
00300 articles a
00301 INNER JOIN article_authors aa ON (aa.article_id = a.article_id)
00302 LEFT JOIN sections s ON (s.section_id = a.section_id)
00303 LEFT JOIN edit_assignments e ON (e.article_id = a.article_id)
00304 LEFT JOIN users ed ON (e.editor_id = ed.user_id)
00305 LEFT JOIN copyed_assignments c ON (a.article_id = c.article_id)
00306 LEFT JOIN users ce ON (c.copyeditor_id = ce.user_id)
00307 LEFT JOIN proof_assignments p ON (p.article_id = a.article_id)
00308 LEFT JOIN users pe ON (pe.user_id = p.proofreader_id)
00309 LEFT JOIN layouted_assignments l ON (l.article_id = a.article_id)
00310 LEFT JOIN users le ON (le.user_id = l.editor_id)
00311 LEFT JOIN review_assignments r ON (r.article_id = a.article_id)
00312 LEFT JOIN users re ON (re.user_id = r.reviewer_id AND cancelled = 0)
00313 LEFT JOIN section_settings stpl ON (s.section_id = stpl.section_id AND stpl.setting_name = ? AND stpl.locale = ?)
00314 LEFT JOIN section_settings stl ON (s.section_id = stl.section_id AND stl.setting_name = ? AND stl.locale = ?)
00315 LEFT JOIN section_settings sapl ON (s.section_id = sapl.section_id AND sapl.setting_name = ? AND sapl.locale = ?)
00316 LEFT JOIN section_settings sal ON (s.section_id = sal.section_id AND sal.setting_name = ? AND sal.locale = ?)
00317 LEFT JOIN article_settings atpl ON (a.article_id = atpl.article_id AND atpl.setting_name = ? AND atpl.locale = ?)
00318 LEFT JOIN article_settings atl ON (a.article_id = atl.article_id AND atl.setting_name = ? AND atl.locale = ?)
00319 WHERE
00320 a.journal_id = ? AND a.submission_progress = 0';
00321
00322
00323
00324
00325 if ($status === true) $sql .= ' AND a.status = ' . STATUS_QUEUED;
00326 elseif ($status === false) $sql .= ' AND a.status <> ' . STATUS_QUEUED;
00327
00328 if ($sectionId) {
00329 $searchSql .= ' AND a.section_id = ?';
00330 $params[] = $sectionId;
00331 }
00332
00333 if ($editorId) {
00334 $searchSql .= ' AND ed.user_id = ?';
00335 $params[] = $editorId;
00336 }
00337
00338 $result = &$this->retrieveRange(
00339 $sql . ' ' . $searchSql . ' ORDER BY article_id ASC',
00340 count($params)===1?array_shift($params):$params,
00341 $rangeInfo
00342 );
00343 return $result;
00344 }
00345
00349 function _generateUserNameSearchSQL($search, $searchMatch, $prefix, &$params) {
00350 $first_last = $this->_dataSource->Concat($prefix.'first_name', '\' \'', $prefix.'last_name');
00351 $first_middle_last = $this->_dataSource->Concat($prefix.'first_name', '\' \'', $prefix.'middle_name', '\' \'', $prefix.'last_name');
00352 $last_comma_first = $this->_dataSource->Concat($prefix.'last_name', '\', \'', $prefix.'first_name');
00353 $last_comma_first_middle = $this->_dataSource->Concat($prefix.'last_name', '\', \'', $prefix.'first_name', '\' \'', $prefix.'middle_name');
00354 if ($searchMatch === 'is') {
00355 $searchSql = " AND (LOWER({$prefix}last_name) = LOWER(?) OR LOWER($first_last) = LOWER(?) OR LOWER($first_middle_last) = LOWER(?) OR LOWER($last_comma_first) = LOWER(?) OR LOWER($last_comma_first_middle) = LOWER(?))";
00356 } else {
00357 $searchSql = " AND (LOWER({$prefix}last_name) LIKE LOWER(?) OR LOWER($first_last) LIKE LOWER(?) OR LOWER($first_middle_last) LIKE LOWER(?) OR LOWER($last_comma_first) LIKE LOWER(?) OR LOWER($last_comma_first_middle) LIKE LOWER(?))";
00358 $search = '%' . $search . '%';
00359 }
00360 $params[] = $params[] = $params[] = $params[] = $params[] = $search;
00361 return $searchSql;
00362 }
00363
00369 function &getCopyedAssignment($articleId) {
00370 $result = &$this->retrieve(
00371 'SELECT * from copyed_assignments where article_id = ? ', $articleId
00372 );
00373 return $result;
00374 }
00375
00390 function &getEditorSubmissionsUnassigned($journalId, $sectionId, $editorId, $searchField = null, $searchMatch = null, $search = null, $dateField = null, $dateFrom = null, $dateTo = null, $rangeInfo = null) {
00391 $editorSubmissions = array();
00392
00393
00394 $result = $this->getUnfilteredEditorSubmissions($journalId, $sectionId, $editorId, $searchField, $searchMatch, $search, $dateField, $dateFrom, $dateTo, true);
00395
00396 while (!$result->EOF) {
00397 $editorSubmission = &$this->_returnEditorSubmissionFromRow($result->GetRowAssoc(false));
00398
00399
00400 $editAssignments =& $editorSubmission->getEditAssignments();
00401
00402 if (empty($editAssignments)) {
00403 $editorSubmissions[] =& $editorSubmission;
00404 }
00405 unset($editorSubmission);
00406 $result->MoveNext();
00407 }
00408 $result->Close();
00409 unset($result);
00410
00411 if (isset($rangeInfo) && $rangeInfo->isValid()) {
00412 $returner = &new ArrayItemIterator($editorSubmissions, $rangeInfo->getPage(), $rangeInfo->getCount());
00413 } else {
00414 $returner = &new ArrayItemIterator($editorSubmissions);
00415 }
00416 return $returner;
00417 }
00418
00433 function &getEditorSubmissionsInReview($journalId, $sectionId, $editorId, $searchField = null, $searchMatch = null, $search = null, $dateField = null, $dateFrom = null, $dateTo = null, $rangeInfo = null) {
00434 $editorSubmissions = array();
00435
00436
00437 $result = $this->getUnfilteredEditorSubmissions($journalId, $sectionId, $editorId, $searchField, $searchMatch, $search, $dateField, $dateFrom, $dateTo, true);
00438
00439 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00440 while (!$result->EOF) {
00441 $editorSubmission = &$this->_returnEditorSubmissionFromRow($result->GetRowAssoc(false));
00442 $articleId = $editorSubmission->getArticleId();
00443 for ($i = 1; $i <= $editorSubmission->getCurrentRound(); $i++) {
00444 $reviewAssignment =& $reviewAssignmentDao->getReviewAssignmentsByArticleId($articleId, $i);
00445 if (!empty($reviewAssignment)) {
00446 $editorSubmission->setReviewAssignments($reviewAssignment, $i);
00447 }
00448 }
00449
00450
00451 $inReview = true;
00452 $decisions = $editorSubmission->getDecisions();
00453 $decision = array_pop($decisions);
00454 if (!empty($decision)) {
00455 $latestDecision = array_pop($decision);
00456 if ($latestDecision['decision'] == SUBMISSION_EDITOR_DECISION_ACCEPT) {
00457 $inReview = false;
00458 }
00459 }
00460
00461
00462 $editAssignments =& $editorSubmission->getEditAssignments();
00463
00464 if (!empty($editAssignments) && $inReview) {
00465 $editorSubmissions[] =& $editorSubmission;
00466 }
00467 unset($editorSubmission);
00468 $result->MoveNext();
00469 }
00470 $result->Close();
00471 unset($result);
00472
00473 if (isset($rangeInfo) && $rangeInfo->isValid()) {
00474 $returner = &new ArrayItemIterator($editorSubmissions, $rangeInfo->getPage(), $rangeInfo->getCount());
00475 } else {
00476 $returner = &new ArrayItemIterator($editorSubmissions);
00477 }
00478 return $returner;
00479 }
00480
00495 function &getEditorSubmissionsInEditing($journalId, $sectionId, $editorId, $searchField = null, $searchMatch = null, $search = null, $dateField = null, $dateFrom = null, $dateTo = null, $rangeInfo = null) {
00496 $editorSubmissions = array();
00497
00498
00499 $result = $this->getUnfilteredEditorSubmissions($journalId, $sectionId, $editorId, $searchField, $searchMatch, $search, $dateField, $dateFrom, $dateTo, true);
00500
00501 while (!$result->EOF) {
00502 $editorSubmission = &$this->_returnEditorSubmissionFromRow($result->GetRowAssoc(false));
00503 $articleId = $editorSubmission->getArticleId();
00504
00505
00506 $copyedAssignment = $this->getCopyedAssignment($articleId);
00507 $row = $copyedAssignment->GetRowAssoc(false);
00508 $editorSubmission->setCopyeditorDateFinalCompleted($this->datetimeFromDB($row['date_final_completed']));
00509
00510
00511 $layoutAssignmentDao = &DAORegistry::getDAO('LayoutAssignmentDAO');
00512 $layoutAssignment =& $layoutAssignmentDao->getLayoutAssignmentByArticleId($articleId);
00513 $editorSubmission->setLayoutAssignment($layoutAssignment);
00514
00515
00516 $proofAssignmentDao = &DAORegistry::getDAO('ProofAssignmentDAO');
00517 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($articleId);
00518 $editorSubmission->setProofAssignment($proofAssignment);
00519
00520
00521 $inEditing = false;
00522 $decisions = $editorSubmission->getDecisions();
00523 $decision = array_pop($decisions);
00524 if (!empty($decision)) {
00525 $latestDecision = array_pop($decision);
00526 if ($latestDecision['decision'] == SUBMISSION_EDITOR_DECISION_ACCEPT) {
00527 $inEditing = true;
00528 }
00529 }
00530
00531
00532 $editAssignments = $editorSubmission->getEditAssignments();
00533
00534 if ($inEditing && !empty($editAssignments)) {
00535 $editorSubmissions[] =& $editorSubmission;
00536 }
00537 unset($editorSubmission);
00538 $result->MoveNext();
00539 }
00540 $result->Close();
00541 unset($result);
00542
00543 if (isset($rangeInfo) && $rangeInfo->isValid()) {
00544 $returner = &new ArrayItemIterator($editorSubmissions, $rangeInfo->getPage(), $rangeInfo->getCount());
00545 } else {
00546 $returner = &new ArrayItemIterator($editorSubmissions);
00547 }
00548 return $returner;
00549 }
00550
00565 function &getEditorSubmissionsArchives($journalId, $sectionId, $editorId, $searchField = null, $searchMatch = null, $search = null, $dateField = null, $dateFrom = null, $dateTo = null, $rangeInfo = null) {
00566 $editorSubmissions = array();
00567
00568 $result = $this->getUnfilteredEditorSubmissions($journalId, $sectionId, $editorId, $searchField, $searchMatch, $search, $dateField, $dateFrom, $dateTo, false, $rangeInfo);
00569 while (!$result->EOF) {
00570 $editorSubmission = &$this->_returnEditorSubmissionFromRow($result->GetRowAssoc(false));
00571 $articleId = $editorSubmission->getArticleId();
00572
00573
00574 $copyedAssignment = $this->getCopyedAssignment($articleId);
00575 $row = $copyedAssignment->GetRowAssoc(false);
00576 $editorSubmission->setCopyeditorDateFinalCompleted($this->datetimeFromDB($row['date_final_completed']));
00577
00578
00579 $layoutAssignmentDao = &DAORegistry::getDAO('LayoutAssignmentDAO');
00580 $layoutAssignment =& $layoutAssignmentDao->getLayoutAssignmentByArticleId($articleId);
00581 $editorSubmission->setLayoutAssignment($layoutAssignment);
00582
00583
00584 $proofAssignmentDao = &DAORegistry::getDAO('ProofAssignmentDAO');
00585 $proofAssignment =& $proofAssignmentDao->getProofAssignmentByArticleId($articleId);
00586 $editorSubmission->setProofAssignment($proofAssignment);
00587
00588 $editorSubmissions[] =& $editorSubmission;
00589 unset($editorSubmission);
00590 $result->MoveNext();
00591 }
00592
00593 if (isset($rangeInfo) && $rangeInfo->isValid()) {
00594 $returner = &new VirtualArrayIterator($editorSubmissions, $result->MaxRecordCount(), $rangeInfo->getPage(), $rangeInfo->getCount());
00595 } else {
00596 $returner = &new ArrayItemIterator($editorSubmissions);
00597 }
00598
00599 $result->Close();
00600 unset($result);
00601
00602 return $returner;
00603 }
00604
00608 function &getEditorSubmissionsCount($journalId) {
00609
00610 $submissionsCount = array();
00611 for($i = 0; $i < 3; $i++) {
00612 $submissionsCount[$i] = 0;
00613 }
00614
00615 $result =& $this->getUnfilteredEditorSubmissions($journalId);
00616
00617 while (!$result->EOF) {
00618 $editorSubmission = &$this->_returnEditorSubmissionFromRow($result->GetRowAssoc(false));
00619
00620
00621 $inReview = true;
00622 $notDeclined = true;
00623 $decisions = $editorSubmission->getDecisions();
00624 $decision = array_pop($decisions);
00625 if (!empty($decision)) {
00626 $latestDecision = array_pop($decision);
00627 if ($latestDecision['decision'] == SUBMISSION_EDITOR_DECISION_ACCEPT) {
00628 $inReview = false;
00629 }
00630 }
00631
00632
00633 $editAssignments = $editorSubmission->getEditAssignments();
00634
00635 if (empty($editAssignments)) {
00636
00637 $submissionsCount[0] += 1;
00638 } else {
00639 if ($inReview) {
00640 if ($notDeclined) {
00641
00642 $submissionsCount[1] += 1;
00643 }
00644 } else {
00645
00646 $submissionsCount[2] += 1;
00647 }
00648 }
00649 unset($editorSubmission);
00650 $result->MoveNext();
00651 }
00652 $result->Close();
00653 unset($result);
00654
00655 return $submissionsCount;
00656 }
00657
00658
00659
00660
00661
00667 function getEditorDecisions($articleId, $round = null) {
00668 $decisions = array();
00669
00670 if ($round == null) {
00671 $result = &$this->retrieve(
00672 'SELECT edit_decision_id, editor_id, decision, date_decided FROM edit_decisions WHERE article_id = ? ORDER BY date_decided ASC', $articleId
00673 );
00674 } else {
00675 $result = &$this->retrieve(
00676 'SELECT edit_decision_id, editor_id, decision, date_decided FROM edit_decisions WHERE article_id = ? AND round = ? ORDER BY date_decided ASC',
00677 array($articleId, $round)
00678 );
00679 }
00680
00681 while (!$result->EOF) {
00682 $decisions[] = array('editDecisionId' => $result->fields[0], 'editorId' => $result->fields[1], 'decision' => $result->fields[2], 'dateDecided' => $this->datetimeFromDB($result->fields[3]));
00683 $result->moveNext();
00684 }
00685 $result->Close();
00686 unset($result);
00687
00688 return $decisions;
00689 }
00690
00695 function transferEditorDecisions($oldUserId, $newUserId) {
00696 $this->update(
00697 'UPDATE edit_decisions SET editor_id = ? WHERE editor_id = ?',
00698 array($newUserId, $oldUserId)
00699 );
00700 }
00701
00709 function &getUsersNotAssignedToArticle($journalId, $articleId, $roleId, $searchType=null, $search=null, $searchMatch=null, $rangeInfo = null) {
00710 $users = array();
00711
00712 $paramArray = array('interests', $articleId, $journalId, $roleId);
00713 $searchSql = '';
00714
00715 if (isset($search)) switch ($searchType) {
00716 case USER_FIELD_USERID:
00717 $searchSql = 'AND user_id=?';
00718 $paramArray[] = $search;
00719 break;
00720 case USER_FIELD_FIRSTNAME:
00721 $searchSql = 'AND LOWER(first_name) ' . ($searchMatch=='is'?'=':'LIKE') . ' LOWER(?)';
00722 $paramArray[] = ($searchMatch=='is'?$search:'%' . $search . '%');
00723 break;
00724 case USER_FIELD_LASTNAME:
00725 $searchSql = 'AND LOWER(last_name) ' . ($searchMatch=='is'?'=':'LIKE') . ' LOWER(?)';
00726 $paramArray[] = ($searchMatch=='is'?$search:'%' . $search . '%');
00727 break;
00728 case USER_FIELD_USERNAME:
00729 $searchSql = 'AND LOWER(username) ' . ($searchMatch=='is'?'=':'LIKE') . ' LOWER(?)';
00730 $paramArray[] = ($searchMatch=='is'?$search:'%' . $search . '%');
00731 break;
00732 case USER_FIELD_EMAIL:
00733 $searchSql = 'AND LOWER(email) ' . ($searchMatch=='is'?'=':'LIKE') . ' LOWER(?)';
00734 $paramArray[] = ($searchMatch=='is'?$search:'%' . $search . '%');
00735 break;
00736 case USER_FIELD_INTERESTS:
00737 $searchSql = 'AND LOWER(s.setting_value) ' . ($searchMatch=='is'?'=':'LIKE') . ' LOWER(?)';
00738 $paramArray[] = ($searchMatch=='is'?$search:'%' . $search . '%');
00739 break;
00740 case USER_FIELD_INITIAL:
00741 $searchSql = 'AND (LOWER(last_name) LIKE LOWER(?) OR LOWER(username) LIKE LOWER(?))';
00742 $paramArray[] = $search . '%';
00743 $paramArray[] = $search . '%';
00744 break;
00745 }
00746
00747 $result = &$this->retrieveRange(
00748 'SELECT DISTINCT
00749 u.*
00750 FROM users u
00751 LEFT JOIN user_settings s ON (u.user_id = s.user_id AND s.setting_name = ?)
00752 LEFT JOIN roles r ON (r.user_id = u.user_id)
00753 LEFT JOIN edit_assignments e ON (e.editor_id = u.user_id AND e.article_id = ?)
00754 WHERE r.journal_id = ? AND
00755 r.role_id = ? AND
00756 (e.article_id IS NULL) ' . $searchSql . '
00757 ORDER BY last_name, first_name',
00758 $paramArray, $rangeInfo
00759 );
00760
00761 $returner = &new DAOResultFactory($result, $this->userDao, '_returnUserFromRowWithData');
00762 return $returner;
00763 }
00764
00769 function getInsertEditId() {
00770 return $this->getInsertId('edit_assignments', 'edit_id');
00771 }
00772 }
00773
00774 ?>