00001 <?php
00002
00015
00016
00017
00018 import('submission.common.Action');
00019
00020 class SectionEditorAction extends Action {
00021
00025 function SectionEditorAction() {
00026 parent::Action();
00027 }
00028
00038 function changeSection($sectionEditorSubmission, $sectionId) {
00039 if (!HookRegistry::call('SectionEditorAction::changeSection', array(&$sectionEditorSubmission, $sectionId))) {
00040 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00041 $sectionEditorSubmission->setSectionId($sectionId);
00042 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00043 }
00044 }
00045
00051 function recordDecision($sectionEditorSubmission, $decision) {
00052 $editAssignments =& $sectionEditorSubmission->getEditAssignments();
00053 if (empty($editAssignments)) return;
00054
00055 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00056 $user = &Request::getUser();
00057 $editorDecision = array(
00058 'editDecisionId' => null,
00059 'editorId' => $user->getUserId(),
00060 'decision' => $decision,
00061 'dateDecided' => date(Core::getCurrentDate())
00062 );
00063
00064 if (!HookRegistry::call('SectionEditorAction::recordDecision', array(&$sectionEditorSubmission, $editorDecision))) {
00065 $sectionEditorSubmission->setStatus(STATUS_QUEUED);
00066 $sectionEditorSubmission->stampStatusModified();
00067 $sectionEditorSubmission->addDecision($editorDecision, $sectionEditorSubmission->getCurrentRound());
00068 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00069
00070 $decisions = SectionEditorSubmission::getEditorDecisionOptions();
00071
00072 import('article.log.ArticleLog');
00073 import('article.log.ArticleEventLogEntry');
00074 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_EDITOR_DECISION, ARTICLE_LOG_TYPE_EDITOR, $user->getUserId(), 'log.editor.decision', array('editorName' => $user->getFullName(), 'articleId' => $sectionEditorSubmission->getArticleId(), 'decision' => Locale::translate($decisions[$decision])));
00075 }
00076 }
00077
00083 function addReviewer($sectionEditorSubmission, $reviewerId, $round = null) {
00084 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00085 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00086 $userDao = &DAORegistry::getDAO('UserDAO');
00087 $user = &Request::getUser();
00088
00089 $reviewer = &$userDao->getUser($reviewerId);
00090
00091
00092
00093 if ($round == null) {
00094 $round = $sectionEditorSubmission->getCurrentRound();
00095 }
00096
00097 $assigned = $sectionEditorSubmissionDao->reviewerExists($sectionEditorSubmission->getArticleId(), $reviewerId, $round);
00098
00099
00100
00101 if (!$assigned && isset($reviewer) && !HookRegistry::call('SectionEditorAction::addReviewer', array(&$sectionEditorSubmission, $reviewerId))) {
00102 $reviewAssignment = &new ReviewAssignment();
00103 $reviewAssignment->setReviewerId($reviewerId);
00104 $reviewAssignment->setDateAssigned(Core::getCurrentDate());
00105 $reviewAssignment->setRound($round);
00106
00107
00108 $journalId = $sectionEditorSubmission->getJournalId();
00109 $sectionDao =& DAORegistry::getDAO('SectionDAO');
00110 $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO');
00111
00112 $sectionId = $sectionEditorSubmission->getSectionId();
00113 $section =& $sectionDao->getSection($sectionId, $journalId);
00114 if ($section && ($reviewFormId = (int) $section->getReviewFormId())) {
00115 if ($reviewFormDao->reviewFormExists($reviewFormId, $journalId)) {
00116 $reviewAssignment->setReviewFormId($reviewFormId);
00117 }
00118 }
00119
00120 $sectionEditorSubmission->addReviewAssignment($reviewAssignment);
00121 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00122
00123 $reviewAssignment = $reviewAssignmentDao->getReviewAssignment($sectionEditorSubmission->getArticleId(), $reviewerId, $round);
00124
00125 $journal = &Request::getJournal();
00126 $settingsDao = &DAORegistry::getDAO('JournalSettingsDAO');
00127 $settings = &$settingsDao->getJournalSettings($journal->getJournalId());
00128 if (isset($settings['numWeeksPerReview'])) SectionEditorAction::setDueDate($sectionEditorSubmission->getArticleId(), $reviewAssignment->getReviewId(), null, $settings['numWeeksPerReview']);
00129
00130
00131 import('article.log.ArticleLog');
00132 import('article.log.ArticleEventLogEntry');
00133 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_REVIEW_ASSIGN, ARTICLE_LOG_TYPE_REVIEW, $reviewAssignment->getReviewId(), 'log.review.reviewerAssigned', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $sectionEditorSubmission->getArticleId(), 'round' => $round));
00134 }
00135 }
00136
00142 function clearReview($sectionEditorSubmission, $reviewId) {
00143 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00144 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00145 $userDao = &DAORegistry::getDAO('UserDAO');
00146 $user = &Request::getUser();
00147
00148 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00149
00150 if (isset($reviewAssignment) && $reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId() && !HookRegistry::call('SectionEditorAction::clearReview', array(&$sectionEditorSubmission, $reviewAssignment))) {
00151 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00152 if (!isset($reviewer)) return false;
00153 $sectionEditorSubmission->removeReviewAssignment($reviewId);
00154 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00155
00156
00157 import('article.log.ArticleLog');
00158 import('article.log.ArticleEventLogEntry');
00159 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_REVIEW_CLEAR, ARTICLE_LOG_TYPE_REVIEW, $reviewAssignment->getReviewId(), 'log.review.reviewCleared', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $sectionEditorSubmission->getArticleId(), 'round' => $reviewAssignment->getRound()));
00160 }
00161 }
00162
00169 function notifyReviewer($sectionEditorSubmission, $reviewId, $send = false) {
00170 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00171 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00172 $userDao = &DAORegistry::getDAO('UserDAO');
00173
00174 $journal = &Request::getJournal();
00175 $user = &Request::getUser();
00176
00177 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00178
00179 $isEmailBasedReview = $journal->getSetting('mailSubmissionsToReviewers')==1?true:false;
00180 $reviewerAccessKeysEnabled = $journal->getSetting('reviewerAccessKeysEnabled');
00181
00182
00183
00184
00185
00186 $preventAddressChanges = $reviewerAccessKeysEnabled;
00187
00188 import('mail.ArticleMailTemplate');
00189
00190 $email = &new ArticleMailTemplate($sectionEditorSubmission, $isEmailBasedReview?'REVIEW_REQUEST_ATTACHED':($reviewerAccessKeysEnabled?'REVIEW_REQUEST_ONECLICK':'REVIEW_REQUEST'), null, $isEmailBasedReview?true:null);
00191
00192 if ($preventAddressChanges) {
00193 $email->setAddressFieldsEnabled(false);
00194 }
00195
00196 if ($reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId() && $reviewAssignment->getReviewFileId()) {
00197 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00198 if (!isset($reviewer)) return true;
00199
00200 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00201 HookRegistry::call('SectionEditorAction::notifyReviewer', array(&$sectionEditorSubmission, &$reviewAssignment, &$email));
00202 if ($email->isEnabled()) {
00203 $email->setAssoc(ARTICLE_EMAIL_REVIEW_NOTIFY_REVIEWER, ARTICLE_EMAIL_TYPE_REVIEW, $reviewId);
00204 if ($reviewerAccessKeysEnabled) {
00205 import('security.AccessKeyManager');
00206 import('pages.reviewer.ReviewerHandler');
00207 $accessKeyManager =& new AccessKeyManager();
00208
00209
00210 $keyLifetime = ($journal->getSetting('numWeeksPerReview') + 4) * 7;
00211
00212 $email->addPrivateParam('ACCESS_KEY', $accessKeyManager->createKey('ReviewerContext', $reviewer->getUserId(), $reviewId, $keyLifetime));
00213 }
00214
00215 if ($preventAddressChanges) {
00216
00217 $email->clearAllRecipients();
00218 $email->addRecipient($reviewer->getEmail(), $reviewer->getFullName());
00219 }
00220 $email->send();
00221 }
00222
00223 $reviewAssignment->setDateNotified(Core::getCurrentDate());
00224 $reviewAssignment->setCancelled(0);
00225 $reviewAssignment->stampModified();
00226 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00227 return true;
00228 } else {
00229 if (!Request::getUserVar('continued') || $preventAddressChanges) {
00230 $email->addRecipient($reviewer->getEmail(), $reviewer->getFullName());
00231 }
00232
00233 if (!Request::getUserVar('continued')) {
00234 $weekLaterDate = strftime(Config::getVar('general', 'date_format_short'), strtotime('+1 week'));
00235
00236 if ($reviewAssignment->getDateDue() != null) {
00237 $reviewDueDate = strftime(Config::getVar('general', 'date_format_short'), strtotime($reviewAssignment->getDateDue()));
00238 } else {
00239 $numWeeks = max((int) $journal->getSetting('numWeeksPerReview'), 2);
00240 $reviewDueDate = strftime(Config::getVar('general', 'date_format_short'), strtotime('+' . $numWeeks . ' week'));
00241 }
00242
00243 $submissionUrl = Request::url(null, 'reviewer', 'submission', $reviewId, $reviewerAccessKeysEnabled?array('key' => 'ACCESS_KEY'):array());
00244
00245 $paramArray = array(
00246 'reviewerName' => $reviewer->getFullName(),
00247 'weekLaterDate' => $weekLaterDate,
00248 'reviewDueDate' => $reviewDueDate,
00249 'reviewerUsername' => $reviewer->getUsername(),
00250 'reviewerPassword' => $reviewer->getPassword(),
00251 'editorialContactSignature' => $user->getContactSignature(),
00252 'reviewGuidelines' => $journal->getLocalizedSetting('reviewGuidelines'),
00253 'submissionReviewUrl' => $submissionUrl,
00254 'abstractTermIfEnabled' => ($sectionEditorSubmission->getArticleAbstract() == ''?'':Locale::translate('article.abstract')),
00255 'passwordResetUrl' => Request::url(null, 'login', 'resetPassword', $reviewer->getUsername(), array('confirm' => Validation::generatePasswordResetHash($reviewer->getUserId())))
00256 );
00257 $email->assignParams($paramArray);
00258 if ($isEmailBasedReview) {
00259
00260
00261 import('file.TemporaryFileManager');
00262 $temporaryFileManager = &new TemporaryFileManager();
00263 $reviewVersion =& $sectionEditorSubmission->getReviewFile();
00264 if ($reviewVersion) {
00265 $temporaryFile = $temporaryFileManager->articleToTemporaryFile($reviewVersion, $user->getUserId());
00266 $email->addPersistAttachment($temporaryFile);
00267 }
00268 }
00269 }
00270 $email->displayEditForm(Request::url(null, null, 'notifyReviewer'), array('reviewId' => $reviewId, 'articleId' => $sectionEditorSubmission->getArticleId()));
00271 return false;
00272 }
00273 }
00274 return true;
00275 }
00276
00283 function cancelReview($sectionEditorSubmission, $reviewId, $send = false) {
00284 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00285 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00286 $userDao = &DAORegistry::getDAO('UserDAO');
00287
00288 $journal = &Request::getJournal();
00289 $user = &Request::getUser();
00290
00291 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00292 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00293 if (!isset($reviewer)) return true;
00294
00295 if ($reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId()) {
00296
00297
00298 if ($reviewAssignment->getDateNotified() != null && !$reviewAssignment->getCancelled() && ($reviewAssignment->getDateCompleted() == null || $reviewAssignment->getDeclined())) {
00299 import('mail.ArticleMailTemplate');
00300 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'REVIEW_CANCEL');
00301
00302 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00303 HookRegistry::call('SectionEditorAction::cancelReview', array(&$sectionEditorSubmission, &$reviewAssignment, &$email));
00304 if ($email->isEnabled()) {
00305 $email->setAssoc(ARTICLE_EMAIL_REVIEW_CANCEL, ARTICLE_EMAIL_TYPE_REVIEW, $reviewId);
00306 $email->send();
00307 }
00308
00309 $reviewAssignment->setCancelled(1);
00310 $reviewAssignment->setDateCompleted(Core::getCurrentDate());
00311 $reviewAssignment->stampModified();
00312
00313 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00314
00315
00316 import('article.log.ArticleLog');
00317 import('article.log.ArticleEventLogEntry');
00318 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_REVIEW_CANCEL, ARTICLE_LOG_TYPE_REVIEW, $reviewAssignment->getReviewId(), 'log.review.reviewCancelled', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $sectionEditorSubmission->getArticleId(), 'round' => $reviewAssignment->getRound()));
00319 } else {
00320 if (!Request::getUserVar('continued')) {
00321 $email->addRecipient($reviewer->getEmail(), $reviewer->getFullName());
00322
00323 $paramArray = array(
00324 'reviewerName' => $reviewer->getFullName(),
00325 'reviewerUsername' => $reviewer->getUsername(),
00326 'reviewerPassword' => $reviewer->getPassword(),
00327 'editorialContactSignature' => $user->getContactSignature()
00328 );
00329 $email->assignParams($paramArray);
00330 }
00331 $email->displayEditForm(Request::url(null, null, 'cancelReview', 'send'), array('reviewId' => $reviewId, 'articleId' => $sectionEditorSubmission->getArticleId()));
00332 return false;
00333 }
00334 }
00335 }
00336 return true;
00337 }
00338
00345 function remindReviewer($sectionEditorSubmission, $reviewId, $send = false) {
00346 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00347 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00348 $userDao = &DAORegistry::getDAO('UserDAO');
00349
00350 $journal = &Request::getJournal();
00351 $user = &Request::getUser();
00352 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00353 $reviewerAccessKeysEnabled = $journal->getSetting('reviewerAccessKeysEnabled');
00354
00355
00356
00357
00358
00359 $preventAddressChanges = $reviewerAccessKeysEnabled;
00360
00361 import('mail.ArticleMailTemplate');
00362 $email = &new ArticleMailTemplate($sectionEditorSubmission, $reviewerAccessKeysEnabled?'REVIEW_REMIND_ONECLICK':'REVIEW_REMIND');
00363
00364 if ($preventAddressChanges) {
00365 $email->setAddressFieldsEnabled(false);
00366 }
00367
00368 if ($send && !$email->hasErrors()) {
00369 HookRegistry::call('SectionEditorAction::remindReviewer', array(&$sectionEditorSubmission, &$reviewAssignment, &$email));
00370 $email->setAssoc(ARTICLE_EMAIL_REVIEW_REMIND, ARTICLE_EMAIL_TYPE_REVIEW, $reviewId);
00371
00372 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00373
00374 if ($reviewerAccessKeysEnabled) {
00375 import('security.AccessKeyManager');
00376 import('pages.reviewer.ReviewerHandler');
00377 $accessKeyManager =& new AccessKeyManager();
00378
00379
00380 $keyLifetime = ($journal->getSetting('numWeeksPerReview') + 4) * 7;
00381 $email->addPrivateParam('ACCESS_KEY', $accessKeyManager->createKey('ReviewerContext', $reviewer->getUserId(), $reviewId, $keyLifetime));
00382 }
00383
00384 if ($preventAddressChanges) {
00385
00386 $email->clearAllRecipients();
00387 $email->addRecipient($reviewer->getEmail(), $reviewer->getFullName());
00388 }
00389
00390 $email->send();
00391
00392 $reviewAssignment->setDateReminded(Core::getCurrentDate());
00393 $reviewAssignment->setReminderWasAutomatic(0);
00394 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00395 return true;
00396 } elseif ($reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId()) {
00397 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00398
00399 if (!Request::getUserVar('continued')) {
00400 if (!isset($reviewer)) return true;
00401 $email->addRecipient($reviewer->getEmail(), $reviewer->getFullName());
00402
00403 $submissionUrl = Request::url(null, 'reviewer', 'submission', $reviewId, $reviewerAccessKeysEnabled?array('key' => 'ACCESS_KEY'):array());
00404
00405
00406
00407
00408 $paramArray = array(
00409 'reviewerName' => $reviewer->getFullName(),
00410 'reviewerUsername' => $reviewer->getUsername(),
00411 'reviewerPassword' => $reviewer->getPassword(),
00412 'reviewDueDate' => strftime(Config::getVar('general', 'date_format_short'), strtotime($reviewAssignment->getDateDue())),
00413 'editorialContactSignature' => $user->getContactSignature(),
00414 'passwordResetUrl' => Request::url(null, 'login', 'resetPassword', $reviewer->getUsername(), array('confirm' => Validation::generatePasswordResetHash($reviewer->getUserId()))),
00415 'submissionReviewUrl' => $submissionUrl
00416 );
00417 $email->assignParams($paramArray);
00418
00419 }
00420 $email->displayEditForm(
00421 Request::url(null, null, 'remindReviewer', 'send'),
00422 array(
00423 'reviewerId' => $reviewer->getUserId(),
00424 'articleId' => $sectionEditorSubmission->getArticleId(),
00425 'reviewId' => $reviewId
00426 )
00427 );
00428 return false;
00429 }
00430 return true;
00431 }
00432
00439 function thankReviewer($sectionEditorSubmission, $reviewId, $send = false) {
00440 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00441 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00442 $userDao = &DAORegistry::getDAO('UserDAO');
00443
00444 $journal = &Request::getJournal();
00445 $user = &Request::getUser();
00446
00447 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00448
00449 import('mail.ArticleMailTemplate');
00450 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'REVIEW_ACK');
00451
00452 if ($reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId()) {
00453 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00454 if (!isset($reviewer)) return true;
00455
00456 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00457 HookRegistry::call('SectionEditorAction::thankReviewer', array(&$sectionEditorSubmission, &$reviewAssignment, &$email));
00458 if ($email->isEnabled()) {
00459 $email->setAssoc(ARTICLE_EMAIL_REVIEW_THANK_REVIEWER, ARTICLE_EMAIL_TYPE_REVIEW, $reviewId);
00460 $email->send();
00461 }
00462
00463 $reviewAssignment->setDateAcknowledged(Core::getCurrentDate());
00464 $reviewAssignment->stampModified();
00465 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00466 } else {
00467 if (!Request::getUserVar('continued')) {
00468 $email->addRecipient($reviewer->getEmail(), $reviewer->getFullName());
00469
00470 $paramArray = array(
00471 'reviewerName' => $reviewer->getFullName(),
00472 'editorialContactSignature' => $user->getContactSignature()
00473 );
00474 $email->assignParams($paramArray);
00475 }
00476 $email->displayEditForm(Request::url(null, null, 'thankReviewer', 'send'), array('reviewId' => $reviewId, 'articleId' => $sectionEditorSubmission->getArticleId()));
00477 return false;
00478 }
00479 }
00480 return true;
00481 }
00482
00489 function rateReviewer($articleId, $reviewId, $quality = null) {
00490 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00491 $userDao = &DAORegistry::getDAO('UserDAO');
00492 $user = &Request::getUser();
00493
00494 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00495 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00496 if (!isset($reviewer)) return false;
00497
00498 if ($reviewAssignment->getArticleId() == $articleId && !HookRegistry::call('SectionEditorAction::rateReviewer', array(&$reviewAssignment, &$reviewer, &$quality))) {
00499
00500
00501 if ($quality != null && ($quality >= 1 && $quality <= 5)) {
00502 $reviewAssignment->setQuality($quality);
00503 }
00504
00505 $reviewAssignment->setDateRated(Core::getCurrentDate());
00506 $reviewAssignment->stampModified();
00507
00508 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00509
00510
00511 import('article.log.ArticleLog');
00512 import('article.log.ArticleEventLogEntry');
00513 ArticleLog::logEvent($articleId, ARTICLE_LOG_REVIEW_RATE, ARTICLE_LOG_TYPE_REVIEW, $reviewAssignment->getReviewId(), 'log.review.reviewerRated', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $articleId, 'round' => $reviewAssignment->getRound()));
00514 }
00515 }
00516
00523 function makeReviewerFileViewable($articleId, $reviewId, $fileId, $revision, $viewable = false) {
00524 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00525 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
00526
00527 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00528 $articleFile = &$articleFileDao->getArticleFile($fileId, $revision);
00529
00530 if ($reviewAssignment->getArticleId() == $articleId && $reviewAssignment->getReviewerFileId() == $fileId && !HookRegistry::call('SectionEditorAction::makeReviewerFileViewable', array(&$reviewAssignment, &$articleFile, &$viewable))) {
00531 $articleFile->setViewable($viewable);
00532 $articleFileDao->updateArticleFile($articleFile);
00533 }
00534 }
00535
00543 function setDueDate($articleId, $reviewId, $dueDate = null, $numWeeks = null) {
00544 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00545 $userDao = &DAORegistry::getDAO('UserDAO');
00546 $user = &Request::getUser();
00547
00548 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00549 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00550 if (!isset($reviewer)) return false;
00551
00552 if ($reviewAssignment->getArticleId() == $articleId && !HookRegistry::call('SectionEditorAction::setDueDate', array(&$reviewAssignment, &$reviewer, &$dueDate, &$numWeeks))) {
00553 $today = getDate();
00554 $todayTimestamp = mktime(0, 0, 0, $today['mon'], $today['mday'], $today['year']);
00555 if ($dueDate != null) {
00556 $dueDateParts = explode('-', $dueDate);
00557
00558
00559 if ($todayTimestamp <= strtotime($dueDate)) {
00560 $reviewAssignment->setDateDue(date('Y-m-d H:i:s', mktime(0, 0, 0, $dueDateParts[1], $dueDateParts[2], $dueDateParts[0])));
00561 } else {
00562 $reviewAssignment->setDateDue(date('Y-m-d H:i:s', $todayTimestamp));
00563 }
00564 } else {
00565
00566 $newDueDateTimestamp = $todayTimestamp + ($numWeeks * 7 * 24 * 60 * 60);
00567
00568 $reviewAssignment->setDateDue(date('Y-m-d H:i:s', $newDueDateTimestamp));
00569 }
00570
00571 $reviewAssignment->stampModified();
00572 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00573
00574
00575 import('article.log.ArticleLog');
00576 import('article.log.ArticleEventLogEntry');
00577 ArticleLog::logEvent(
00578 $articleId,
00579 ARTICLE_LOG_REVIEW_SET_DUE_DATE,
00580 ARTICLE_LOG_TYPE_REVIEW,
00581 $reviewAssignment->getReviewId(),
00582 'log.review.reviewDueDateSet',
00583 array(
00584 'reviewerName' => $reviewer->getFullName(),
00585 'dueDate' => strftime(Config::getVar('general', 'date_format_short'),
00586 strtotime($reviewAssignment->getDateDue())),
00587 'articleId' => $articleId,
00588 'round' => $reviewAssignment->getRound()
00589 )
00590 );
00591 }
00592 }
00593
00599 function unsuitableSubmission($sectionEditorSubmission, $send = false) {
00600 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00601 $userDao = &DAORegistry::getDAO('UserDAO');
00602
00603 $journal = &Request::getJournal();
00604 $user = &Request::getUser();
00605
00606 $author = &$userDao->getUser($sectionEditorSubmission->getUserId());
00607 if (!isset($author)) return true;
00608
00609 import('mail.ArticleMailTemplate');
00610 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'SUBMISSION_UNSUITABLE');
00611
00612 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00613 HookRegistry::call('SectionEditorAction::unsuitableSubmission', array(&$sectionEditorSubmission, &$author, &$email));
00614 if ($email->isEnabled()) {
00615 $email->setAssoc(ARTICLE_EMAIL_EDITOR_NOTIFY_AUTHOR_UNSUITABLE, ARTICLE_EMAIL_TYPE_EDITOR, $user->getUserId());
00616 $email->send();
00617 }
00618 SectionEditorAction::archiveSubmission($sectionEditorSubmission);
00619 return true;
00620 } else {
00621 if (!Request::getUserVar('continued')) {
00622 $paramArray = array(
00623 'editorialContactSignature' => $user->getContactSignature(),
00624 'authorName' => $author->getFullName()
00625 );
00626 $email->assignParams($paramArray);
00627 $email->addRecipient($author->getEmail(), $author->getFullName());
00628 }
00629 $email->displayEditForm(Request::url(null, null, 'unsuitableSubmission'), array('articleId' => $sectionEditorSubmission->getArticleId()));
00630 return false;
00631 }
00632 }
00633
00641 function setReviewerRecommendation($articleId, $reviewId, $recommendation, $acceptOption) {
00642 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00643 $userDao = &DAORegistry::getDAO('UserDAO');
00644 $user = &Request::getUser();
00645
00646 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00647 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId(), true);
00648
00649 if ($reviewAssignment->getArticleId() == $articleId && !HookRegistry::call('SectionEditorAction::setReviewerRecommendation', array(&$reviewAssignment, &$reviewer, &$recommendation, &$acceptOption))) {
00650 $reviewAssignment->setRecommendation($recommendation);
00651
00652 $nowDate = Core::getCurrentDate();
00653 if (!$reviewAssignment->getDateConfirmed()) {
00654 $reviewAssignment->setDateConfirmed($nowDate);
00655 }
00656 $reviewAssignment->setDateCompleted($nowDate);
00657 $reviewAssignment->stampModified();
00658
00659 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00660
00661
00662 import('article.log.ArticleLog');
00663 import('article.log.ArticleEventLogEntry');
00664 ArticleLog::logEvent($articleId, ARTICLE_LOG_REVIEW_RECOMMENDATION_BY_PROXY, ARTICLE_LOG_TYPE_REVIEW, $reviewAssignment->getReviewId(), 'log.review.reviewRecommendationSetByProxy', array('editorName' => $user->getFullName(), 'reviewerName' => $reviewer->getFullName(), 'articleId' => $articleId, 'round' => $reviewAssignment->getRound()));
00665 }
00666 }
00667
00673 function clearReviewForm($sectionEditorSubmission, $reviewId) {
00674 $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
00675 $reviewAssignment =& $reviewAssignmentDao->getReviewAssignmentById($reviewId);
00676
00677 if (HookRegistry::call('SectionEditorAction::clearReviewForm', array(&$sectionEditorSubmission, &$reviewAssignment, &$reviewId))) return $reviewId;
00678
00679 if (isset($reviewAssignment) && $reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId()) {
00680 $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO');
00681 $responses = $reviewFormResponseDao->getReviewReviewFormResponseValues($reviewId);
00682 if (!empty($responses)) {
00683 $reviewFormResponseDao->deleteReviewFormResponseByReviewId($reviewId);
00684 }
00685 $reviewAssignment->setReviewFormId(null);
00686 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00687 }
00688 }
00689
00696 function addReviewForm($sectionEditorSubmission, $reviewId, $reviewFormId) {
00697 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00698 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00699
00700 if (HookRegistry::call('SectionEditorAction::addReviewForm', array(&$sectionEditorSubmission, &$reviewAssignment, &$reviewId, &$reviewFormId))) return $reviewFormId;
00701
00702 if (isset($reviewAssignment) && $reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId()) {
00703
00704
00705 if ($reviewAssignment->getReviewFormId() != $reviewFormId) {
00706 $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO');
00707 $responses = $reviewFormResponseDao->getReviewReviewFormResponseValues($reviewId);
00708 if (!empty($responses)) {
00709 $reviewFormResponseDao->deleteReviewFormResponseByReviewId($reviewId);
00710 }
00711 $reviewAssignment->setReviewFormId($reviewFormId);
00712 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00713 }
00714 }
00715 }
00716
00722 function viewReviewFormResponse($sectionEditorSubmission, $reviewId) {
00723 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00724 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00725
00726 if (HookRegistry::call('SectionEditorAction::viewReviewFormResponse', array(&$sectionEditorSubmission, &$reviewAssignment, &$reviewId))) return $reviewId;
00727
00728 if (isset($reviewAssignment) && $reviewAssignment->getArticleId() == $sectionEditorSubmission->getArticleId()) {
00729 $reviewFormId = $reviewAssignment->getReviewFormId();
00730 if ($reviewFormId != null) {
00731 import('submission.form.ReviewFormResponseForm');
00732 $reviewForm =& new ReviewFormResponseForm($reviewId, $reviewFormId);
00733 $reviewForm->initData();
00734 $reviewForm->display();
00735 }
00736 }
00737 }
00738
00746 function setCopyeditFile($sectionEditorSubmission, $fileId, $revision) {
00747 import('file.ArticleFileManager');
00748 $articleFileManager = &new ArticleFileManager($sectionEditorSubmission->getArticleId());
00749 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00750 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
00751 $user = &Request::getUser();
00752
00753 if (!HookRegistry::call('SectionEditorAction::setCopyeditFile', array(&$sectionEditorSubmission, &$fileId, &$revision))) {
00754
00755 $newFileId = $articleFileManager->copyToCopyeditFile($fileId, $revision);
00756
00757 $sectionEditorSubmission->setCopyeditFileId($newFileId);
00758 $sectionEditorSubmission->setCopyeditorInitialRevision(1);
00759
00760 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00761
00762
00763 import('article.log.ArticleLog');
00764 import('article.log.ArticleEventLogEntry');
00765 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_COPYEDIT_SET_FILE, ARTICLE_LOG_TYPE_COPYEDIT, $sectionEditorSubmission->getCopyeditFileId(), 'log.copyedit.copyeditFileSet');
00766 }
00767 }
00768
00776 function resubmitFile($sectionEditorSubmission, $fileId, $revision) {
00777 import('file.ArticleFileManager');
00778 $articleFileManager = &new ArticleFileManager($sectionEditorSubmission->getArticleId());
00779 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00780 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
00781 $user = &Request::getUser();
00782
00783 if (!HookRegistry::call('SectionEditorAction::resubmitFile', array(&$sectionEditorSubmission, &$fileId, &$revision))) {
00784
00785 $currentRound = $sectionEditorSubmission->getCurrentRound();
00786 $sectionEditorSubmission->setCurrentRound($currentRound + 1);
00787 $sectionEditorSubmission->stampStatusModified();
00788
00789
00790 $newFileId = $articleFileManager->copyToReviewFile($fileId, $revision, $sectionEditorSubmission->getReviewFileId());
00791 $newReviewFile = $articleFileDao->getArticleFile($newFileId);
00792 $newReviewFile->setRound($sectionEditorSubmission->getCurrentRound());
00793 $articleFileDao->updateArticleFile($newReviewFile);
00794
00795
00796
00797 $editorFileId = $sectionEditorSubmission->getEditorFileId() != null ? $sectionEditorSubmission->getEditorFileId() : null;
00798
00799
00800 $editorFileId = $articleFileManager->copyToEditorFile($newFileId, null, $editorFileId);
00801 $newEditorFile = $articleFileDao->getArticleFile($editorFileId);
00802 $newEditorFile->setRound($sectionEditorSubmission->getCurrentRound());
00803 $articleFileDao->updateArticleFile($newEditorFile);
00804
00805
00806 $reviewRevision = $articleFileDao->getRevisionNumber($newFileId);
00807 $sectionEditorSubmission->setReviewRevision($reviewRevision);
00808
00809 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00810
00811
00812 $previousRound = $sectionEditorSubmission->getCurrentRound() - 1;
00813 foreach ($sectionEditorSubmission->getReviewAssignments($previousRound) as $reviewAssignment) {
00814 if ($reviewAssignment->getRecommendation() !== null && $reviewAssignment->getRecommendation() !== '') {
00815
00816 SectionEditorAction::addReviewer($sectionEditorSubmission, $reviewAssignment->getReviewerId(), $sectionEditorSubmission->getCurrentRound());
00817 }
00818 }
00819
00820
00821
00822 import('article.log.ArticleLog');
00823 import('article.log.ArticleEventLogEntry');
00824 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_REVIEW_RESUBMIT, ARTICLE_LOG_TYPE_EDITOR, $user->getUserId(), 'log.review.resubmit', array('articleId' => $sectionEditorSubmission->getArticleId()));
00825 }
00826 }
00827
00833 function selectCopyeditor($sectionEditorSubmission, $copyeditorId) {
00834 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00835 $userDao = &DAORegistry::getDAO('UserDAO');
00836 $user = &Request::getUser();
00837
00838
00839
00840 $assigned = $sectionEditorSubmissionDao->copyeditorExists($sectionEditorSubmission->getArticleId(), $copyeditorId);
00841
00842
00843
00844 if (!$assigned && !HookRegistry::call('SectionEditorAction::selectCopyeditor', array(&$sectionEditorSubmission, &$copyeditorId))) {
00845 $sectionEditorSubmission->setCopyeditorId($copyeditorId);
00846 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00847
00848 $copyeditor = &$userDao->getUser($copyeditorId);
00849
00850
00851 import('article.log.ArticleLog');
00852 import('article.log.ArticleEventLogEntry');
00853 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_COPYEDIT_ASSIGN, ARTICLE_LOG_TYPE_COPYEDIT, $copyeditorId, 'log.copyedit.copyeditorAssigned', array('copyeditorName' => $copyeditor->getFullName(), 'articleId' => $sectionEditorSubmission->getArticleId()));
00854 }
00855 }
00856
00862 function notifyCopyeditor($sectionEditorSubmission, $send = false) {
00863 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00864 $userDao = &DAORegistry::getDAO('UserDAO');
00865 $journal = &Request::getJournal();
00866 $user = &Request::getUser();
00867
00868 import('mail.ArticleMailTemplate');
00869 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'COPYEDIT_REQUEST');
00870
00871 $copyeditor = &$userDao->getUser($sectionEditorSubmission->getCopyeditorId());
00872 if (!isset($copyeditor)) return true;
00873
00874 if ($sectionEditorSubmission->getInitialCopyeditFile() && (!$email->isEnabled() || ($send && !$email->hasErrors()))) {
00875 HookRegistry::call('SectionEditorAction::notifyCopyeditor', array(&$sectionEditorSubmission, &$copyeditor, &$email));
00876 if ($email->isEnabled()) {
00877 $email->setAssoc(ARTICLE_EMAIL_COPYEDIT_NOTIFY_COPYEDITOR, ARTICLE_EMAIL_TYPE_COPYEDIT, $sectionEditorSubmission->getArticleId());
00878 $email->send();
00879 }
00880
00881 $sectionEditorSubmission->setCopyeditorDateNotified(Core::getCurrentDate());
00882 $sectionEditorSubmission->setCopyeditorDateUnderway(null);
00883 $sectionEditorSubmission->setCopyeditorDateCompleted(null);
00884 $sectionEditorSubmission->setCopyeditorDateAcknowledged(null);
00885 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00886 } else {
00887 if (!Request::getUserVar('continued')) {
00888 $email->addRecipient($copyeditor->getEmail(), $copyeditor->getFullName());
00889 $paramArray = array(
00890 'copyeditorName' => $copyeditor->getFullName(),
00891 'copyeditorUsername' => $copyeditor->getUsername(),
00892 'copyeditorPassword' => $copyeditor->getPassword(),
00893 'editorialContactSignature' => $user->getContactSignature(),
00894 'submissionCopyeditingUrl' => Request::url(null, 'copyeditor', 'submission', $sectionEditorSubmission->getArticleId())
00895 );
00896 $email->assignParams($paramArray);
00897 }
00898 $email->displayEditForm(Request::url(null, null, 'notifyCopyeditor', 'send'), array('articleId' => $sectionEditorSubmission->getArticleId()));
00899 return false;
00900 }
00901 return true;
00902 }
00903
00908 function initiateCopyedit($sectionEditorSubmission) {
00909 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00910
00911
00912 if ($sectionEditorSubmission->getInitialCopyeditFile() && !HookRegistry::call('SectionEditorAction::initiateCopyedit', array(&$sectionEditorSubmission))) {
00913 $sectionEditorSubmission->setCopyeditorDateNotified(Core::getCurrentDate());
00914 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00915 }
00916 }
00917
00923 function thankCopyeditor($sectionEditorSubmission, $send = false) {
00924 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00925 $userDao = &DAORegistry::getDAO('UserDAO');
00926 $journal = &Request::getJournal();
00927 $user = &Request::getUser();
00928
00929 import('mail.ArticleMailTemplate');
00930 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'COPYEDIT_ACK');
00931
00932 $copyeditor = &$userDao->getUser($sectionEditorSubmission->getCopyeditorId());
00933 if (!isset($copyeditor)) return true;
00934
00935 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00936 HookRegistry::call('SectionEditorAction::thankCopyeditor', array(&$sectionEditorSubmission, &$copyeditor, &$email));
00937 if ($email->isEnabled()) {
00938 $email->setAssoc(ARTICLE_EMAIL_COPYEDIT_NOTIFY_ACKNOWLEDGE, ARTICLE_EMAIL_TYPE_COPYEDIT, $sectionEditorSubmission->getArticleId());
00939 $email->send();
00940 }
00941
00942 $sectionEditorSubmission->setCopyeditorDateAcknowledged(Core::getCurrentDate());
00943 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00944 } else {
00945 if (!Request::getUserVar('continued')) {
00946 $email->addRecipient($copyeditor->getEmail(), $copyeditor->getFullName());
00947 $paramArray = array(
00948 'copyeditorName' => $copyeditor->getFullName(),
00949 'editorialContactSignature' => $user->getContactSignature()
00950 );
00951 $email->assignParams($paramArray);
00952 }
00953 $email->displayEditForm(Request::url(null, null, 'thankCopyeditor', 'send'), array('articleId' => $sectionEditorSubmission->getArticleId()));
00954 return false;
00955 }
00956 return true;
00957 }
00958
00964 function notifyAuthorCopyedit($sectionEditorSubmission, $send = false) {
00965 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
00966 $userDao = &DAORegistry::getDAO('UserDAO');
00967 $journal = &Request::getJournal();
00968 $user = &Request::getUser();
00969
00970 import('mail.ArticleMailTemplate');
00971 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'COPYEDIT_AUTHOR_REQUEST');
00972
00973 $author = &$userDao->getUser($sectionEditorSubmission->getUserId());
00974 if (!isset($author)) return true;
00975
00976 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00977 HookRegistry::call('SectionEditorAction::notifyAuthorCopyedit', array(&$sectionEditorSubmission, &$author, &$email));
00978 if ($email->isEnabled()) {
00979 $email->setAssoc(ARTICLE_EMAIL_COPYEDIT_NOTIFY_AUTHOR, ARTICLE_EMAIL_TYPE_COPYEDIT, $sectionEditorSubmission->getArticleId());
00980 $email->send();
00981 }
00982
00983 $sectionEditorSubmission->setCopyeditorDateAuthorNotified(Core::getCurrentDate());
00984 $sectionEditorSubmission->setCopyeditorDateAuthorUnderway(null);
00985 $sectionEditorSubmission->setCopyeditorDateAuthorCompleted(null);
00986 $sectionEditorSubmission->setCopyeditorDateAuthorAcknowledged(null);
00987 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
00988 } else {
00989 if (!Request::getUserVar('continued')) {
00990 $email->addRecipient($author->getEmail(), $author->getFullName());
00991 $paramArray = array(
00992 'authorName' => $author->getFullName(),
00993 'authorUsername' => $author->getUsername(),
00994 'authorPassword' => $author->getPassword(),
00995 'editorialContactSignature' => $user->getContactSignature(),
00996 'submissionCopyeditingUrl' => Request::url(null, 'author', 'submission', $sectionEditorSubmission->getArticleId())
00997
00998 );
00999 $email->assignParams($paramArray);
01000 }
01001 $email->displayEditForm(Request::url(null, null, 'notifyAuthorCopyedit', 'send'), array('articleId' => $sectionEditorSubmission->getArticleId()));
01002 return false;
01003 }
01004 return true;
01005 }
01006
01012 function thankAuthorCopyedit($sectionEditorSubmission, $send = false) {
01013 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01014 $userDao = &DAORegistry::getDAO('UserDAO');
01015 $journal = &Request::getJournal();
01016 $user = &Request::getUser();
01017
01018 import('mail.ArticleMailTemplate');
01019 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'COPYEDIT_AUTHOR_ACK');
01020
01021 $author = &$userDao->getUser($sectionEditorSubmission->getUserId());
01022 if (!isset($author)) return true;
01023
01024 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
01025 HookRegistry::call('SectionEditorAction::thankAuthorCopyedit', array(&$sectionEditorSubmission, &$author, &$email));
01026 if ($email->isEnabled()) {
01027 $email->setAssoc(ARTICLE_EMAIL_COPYEDIT_NOTIFY_AUTHOR_ACKNOWLEDGE, ARTICLE_EMAIL_TYPE_COPYEDIT, $sectionEditorSubmission->getArticleId());
01028 $email->send();
01029 }
01030
01031 $sectionEditorSubmission->setCopyeditorDateAuthorAcknowledged(Core::getCurrentDate());
01032 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01033 } else {
01034 if (!Request::getUserVar('continued')) {
01035 $email->addRecipient($author->getEmail(), $author->getFullName());
01036 $paramArray = array(
01037 'authorName' => $author->getFullName(),
01038 'editorialContactSignature' => $user->getContactSignature()
01039 );
01040 $email->assignParams($paramArray);
01041 }
01042 $email->displayEditForm(Request::url(null, null, 'thankAuthorCopyedit', 'send'), array('articleId' => $sectionEditorSubmission->getArticleId()));
01043 return false;
01044 }
01045 return true;
01046 }
01047
01054 function notifyFinalCopyedit($sectionEditorSubmission, $send = false) {
01055 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01056 $userDao = &DAORegistry::getDAO('UserDAO');
01057 $journal = &Request::getJournal();
01058 $user = &Request::getUser();
01059
01060 import('mail.ArticleMailTemplate');
01061 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'COPYEDIT_FINAL_REQUEST');
01062
01063 $copyeditor = &$userDao->getUser($sectionEditorSubmission->getCopyeditorId());
01064 if (!isset($copyeditor)) return true;
01065
01066 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
01067 HookRegistry::call('SectionEditorAction::notifyFinalCopyedit', array(&$sectionEditorSubmission, &$copyeditor, &$email));
01068 if ($email->isEnabled()) {
01069 $email->setAssoc(ARTICLE_EMAIL_COPYEDIT_NOTIFY_FINAL, ARTICLE_EMAIL_TYPE_COPYEDIT, $sectionEditorSubmission->getArticleId());
01070 $email->send();
01071 }
01072
01073 $sectionEditorSubmission->setCopyeditorDateFinalNotified(Core::getCurrentDate());
01074 $sectionEditorSubmission->setCopyeditorDateFinalUnderway(null);
01075 $sectionEditorSubmission->setCopyeditorDateFinalCompleted(null);
01076 $sectionEditorSubmission->setCopyeditorDateFinalAcknowledged(null);
01077
01078 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01079 } else {
01080 if (!Request::getUserVar('continued')) {
01081 $email->addRecipient($copyeditor->getEmail(), $copyeditor->getFullName());
01082 $paramArray = array(
01083 'copyeditorName' => $copyeditor->getFullName(),
01084 'copyeditorUsername' => $copyeditor->getUsername(),
01085 'copyeditorPassword' => $copyeditor->getPassword(),
01086 'editorialContactSignature' => $user->getContactSignature(),
01087 'submissionCopyeditingUrl' => Request::url(null, 'copyeditor', 'submission', $sectionEditorSubmission->getArticleId())
01088 );
01089 $email->assignParams($paramArray);
01090 }
01091 $email->displayEditForm(Request::url(null, null, 'notifyFinalCopyedit', 'send'), array('articleId' => $sectionEditorSubmission->getArticleId()));
01092 return false;
01093 }
01094 return true;
01095 }
01096
01102 function thankFinalCopyedit($sectionEditorSubmission, $send = false) {
01103 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01104 $userDao = &DAORegistry::getDAO('UserDAO');
01105 $journal = &Request::getJournal();
01106 $user = &Request::getUser();
01107
01108 import('mail.ArticleMailTemplate');
01109 $email = &new ArticleMailTemplate($sectionEditorSubmission, 'COPYEDIT_FINAL_ACK');
01110
01111 $copyeditor = &$userDao->getUser($sectionEditorSubmission->getCopyeditorId());
01112 if (!isset($copyeditor)) return true;
01113
01114 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
01115 HookRegistry::call('SectionEditorAction::thankFinalCopyedit', array(&$sectionEditorSubmission, &$copyeditor, &$email));
01116 if ($email->isEnabled()) {
01117 $email->setAssoc(ARTICLE_EMAIL_COPYEDIT_NOTIFY_FINAL_ACKNOWLEDGE, ARTICLE_EMAIL_TYPE_COPYEDIT, $sectionEditorSubmission->getArticleId());
01118 $email->send();
01119 }
01120
01121 $sectionEditorSubmission->setCopyeditorDateFinalAcknowledged(Core::getCurrentDate());
01122 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01123 } else {
01124 if (!Request::getUserVar('continued')) {
01125 $email->addRecipient($copyeditor->getEmail(), $copyeditor->getFullName());
01126 $paramArray = array(
01127 'copyeditorName' => $copyeditor->getFullName(),
01128 'editorialContactSignature' => $user->getContactSignature()
01129 );
01130 $email->assignParams($paramArray);
01131 }
01132 $email->displayEditForm(Request::url(null, null, 'thankFinalCopyedit', 'send'), array('articleId' => $sectionEditorSubmission->getArticleId()));
01133 return false;
01134 }
01135 return true;
01136 }
01137
01142 function uploadReviewVersion($sectionEditorSubmission) {
01143 import('file.ArticleFileManager');
01144 $articleFileManager = &new ArticleFileManager($sectionEditorSubmission->getArticleId());
01145 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01146
01147 $fileName = 'upload';
01148 if ($articleFileManager->uploadedFileExists($fileName) && !HookRegistry::call('SectionEditorAction::uploadReviewVersion', array(&$sectionEditorSubmission))) {
01149 if ($sectionEditorSubmission->getReviewFileId() != null) {
01150 $reviewFileId = $articleFileManager->uploadReviewFile($fileName, $sectionEditorSubmission->getReviewFileId());
01151
01152 $sectionEditorSubmission->setReviewRevision($sectionEditorSubmission->getReviewRevision()+1);
01153 } else {
01154 $reviewFileId = $articleFileManager->uploadReviewFile($fileName);
01155 $sectionEditorSubmission->setReviewRevision(1);
01156 }
01157 $editorFileId = $articleFileManager->copyToEditorFile($reviewFileId, $sectionEditorSubmission->getReviewRevision(), $sectionEditorSubmission->getEditorFileId());
01158 }
01159
01160 if (isset($reviewFileId) && $reviewFileId != 0 && isset($editorFileId) && $editorFileId != 0) {
01161 $sectionEditorSubmission->setReviewFileId($reviewFileId);
01162 $sectionEditorSubmission->setEditorFileId($editorFileId);
01163
01164 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01165 }
01166 }
01167
01172 function uploadEditorVersion($sectionEditorSubmission) {
01173 import('file.ArticleFileManager');
01174 $articleFileManager = &new ArticleFileManager($sectionEditorSubmission->getArticleId());
01175 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01176 $user = &Request::getUser();
01177
01178 $fileName = 'upload';
01179 if ($articleFileManager->uploadedFileExists($fileName) && !HookRegistry::call('SectionEditorAction::uploadEditorVersion', array(&$sectionEditorSubmission))) {
01180 if ($sectionEditorSubmission->getEditorFileId() != null) {
01181 $fileId = $articleFileManager->uploadEditorDecisionFile($fileName, $sectionEditorSubmission->getEditorFileId());
01182 } else {
01183 $fileId = $articleFileManager->uploadEditorDecisionFile($fileName);
01184 }
01185 }
01186
01187 if (isset($fileId) && $fileId != 0) {
01188 $sectionEditorSubmission->setEditorFileId($fileId);
01189
01190 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01191
01192
01193 import('article.log.ArticleLog');
01194 import('article.log.ArticleEventLogEntry');
01195 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_EDITOR_FILE, ARTICLE_LOG_TYPE_EDITOR, $sectionEditorSubmission->getEditorFileId(), 'log.editor.editorFile');
01196 }
01197 }
01198
01204 function uploadCopyeditVersion($sectionEditorSubmission, $copyeditStage) {
01205 import('file.ArticleFileManager');
01206 $articleFileManager = &new ArticleFileManager($sectionEditorSubmission->getArticleId());
01207 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
01208 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01209
01210
01211 if ($copyeditStage == 'final' && $sectionEditorSubmission->getCopyeditorDateAuthorCompleted() == null) return;
01212 if ($copyeditStage == 'author' && $sectionEditorSubmission->getCopyeditorDateCompleted() == null) return;
01213
01214 $fileName = 'upload';
01215 if ($articleFileManager->uploadedFileExists($fileName) && !HookRegistry::call('SectionEditorAction::uploadCopyeditVersion', array(&$sectionEditorSubmission))) {
01216 if ($sectionEditorSubmission->getCopyeditFileId() != null) {
01217 $copyeditFileId = $articleFileManager->uploadCopyeditFile($fileName, $sectionEditorSubmission->getCopyeditFileId());
01218 } else {
01219 $copyeditFileId = $articleFileManager->uploadCopyeditFile($fileName);
01220 }
01221 }
01222
01223
01224 if (isset($copyeditFileId) && $copyeditFileId != 0) {
01225 $sectionEditorSubmission->setCopyeditFileId($copyeditFileId);
01226
01227 if ($copyeditStage == 'initial') {
01228 $sectionEditorSubmission->setCopyeditorInitialRevision($articleFileDao->getRevisionNumber($copyeditFileId));
01229 } elseif ($copyeditStage == 'author') {
01230 $sectionEditorSubmission->setCopyeditorEditorAuthorRevision($articleFileDao->getRevisionNumber($copyeditFileId));
01231 } elseif ($copyeditStage == 'final') {
01232 $sectionEditorSubmission->setCopyeditorFinalRevision($articleFileDao->getRevisionNumber($copyeditFileId));
01233 }
01234
01235 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01236 }
01237 }
01238
01243 function completeCopyedit($sectionEditorSubmission) {
01244 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01245 $userDao = &DAORegistry::getDAO('UserDAO');
01246 $journal = &Request::getJournal();
01247 $user = &Request::getUser();
01248
01249
01250 if ($journal->getSetting('useCopyeditors')) return;
01251
01252 if (HookRegistry::call('SectionEditorAction::completeCopyedit', array(&$sectionEditorSubmission))) return;
01253
01254 $sectionEditorSubmission->setCopyeditorDateCompleted(Core::getCurrentDate());
01255 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01256
01257 import('article.log.ArticleLog');
01258 import('article.log.ArticleEventLogEntry');
01259 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_COPYEDIT_INITIAL, ARTICLE_LOG_TYPE_COPYEDIT, $user->getUserId(), 'log.copyedit.initialEditComplete', Array('copyeditorName' => $user->getFullName(), 'articleId' => $sectionEditorSubmission->getArticleId()));
01260 }
01261
01266 function completeFinalCopyedit($sectionEditorSubmission) {
01267 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01268 $userDao = &DAORegistry::getDAO('UserDAO');
01269 $journal = &Request::getJournal();
01270 $user = &Request::getUser();
01271
01272
01273 if ($journal->getSetting('useCopyeditors')) return;
01274
01275 if (HookRegistry::call('SectionEditorAction::completeFinalCopyedit', array(&$sectionEditorSubmission))) return;
01276
01277 $sectionEditorSubmission->setCopyeditorDateFinalCompleted(Core::getCurrentDate());
01278 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01279
01280 if ($copyEdFile =& $sectionEditorSubmission->getFinalCopyeditFile()) {
01281
01282 $layoutDao = &DAORegistry::getDAO('LayoutAssignmentDAO');
01283 $layoutAssignment = &$layoutDao->getLayoutAssignmentByArticleId($sectionEditorSubmission->getArticleId());
01284
01285 if (isset($layoutAssignment) && !$layoutAssignment->getLayoutFileId()) {
01286 import('file.ArticleFileManager');
01287 $articleFileManager = &new ArticleFileManager($sectionEditorSubmission->getArticleId());
01288 if ($layoutFileId = $articleFileManager->copyToLayoutFile($copyEdFile->getFileId(), $copyEdFile->getRevision())) {
01289 $layoutAssignment->setLayoutFileId($layoutFileId);
01290 $layoutDao->updateLayoutAssignment($layoutAssignment);
01291 }
01292 }
01293 }
01294
01295 import('article.log.ArticleLog');
01296 import('article.log.ArticleEventLogEntry');
01297 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_COPYEDIT_FINAL, ARTICLE_LOG_TYPE_COPYEDIT, $user->getUserId(), 'log.copyedit.finalEditComplete', Array('copyeditorName' => $user->getFullName(), 'articleId' => $sectionEditorSubmission->getArticleId()));
01298 }
01299
01304 function archiveSubmission($sectionEditorSubmission) {
01305 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01306 $user = &Request::getUser();
01307
01308 if (HookRegistry::call('SectionEditorAction::archiveSubmission', array(&$sectionEditorSubmission))) return;
01309
01310 $sectionEditorSubmission->setStatus(STATUS_ARCHIVED);
01311 $sectionEditorSubmission->stampStatusModified();
01312
01313 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01314
01315
01316 import('article.log.ArticleLog');
01317 import('article.log.ArticleEventLogEntry');
01318 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_EDITOR_ARCHIVE, ARTICLE_LOG_TYPE_EDITOR, $sectionEditorSubmission->getArticleId(), 'log.editor.archived', array('articleId' => $sectionEditorSubmission->getArticleId()));
01319 }
01320
01325 function restoreToQueue($sectionEditorSubmission) {
01326 if (HookRegistry::call('SectionEditorAction::restoreToQueue', array(&$sectionEditorSubmission))) return;
01327
01328 $sectionEditorSubmissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01329
01330
01331
01332 $publishedArticleDao =& DAORegistry::getDAO('PublishedArticleDAO');
01333 $publishedArticle =& $publishedArticleDao->getPublishedArticleByArticleId($sectionEditorSubmission->getArticleId());
01334 if ($publishedArticle) {
01335 $sectionEditorSubmission->setStatus(STATUS_PUBLISHED);
01336 } else {
01337 $sectionEditorSubmission->setStatus(STATUS_QUEUED);
01338 }
01339 unset($publishedArticle);
01340
01341 $sectionEditorSubmission->stampStatusModified();
01342
01343 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01344
01345
01346 import('article.log.ArticleLog');
01347 import('article.log.ArticleEventLogEntry');
01348 ArticleLog::logEvent($sectionEditorSubmission->getArticleId(), ARTICLE_LOG_EDITOR_RESTORE, ARTICLE_LOG_TYPE_EDITOR, $sectionEditorSubmission->getArticleId(), 'log.editor.restored', array('articleId' => $sectionEditorSubmission->getArticleId()));
01349 }
01350
01356 function updateSection($submission, $sectionId) {
01357 if (HookRegistry::call('SectionEditorAction::updateSection', array(&$submission, &$sectionId))) return;
01358
01359 $submissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01360 $submission->setSectionId($sectionId);
01361 $submissionDao->updateSectionEditorSubmission($submission);
01362 }
01363
01369 function updateCommentsStatus($submission, $commentsStatus) {
01370 if (HookRegistry::call('SectionEditorAction::updateCommentsStatus', array(&$submission, &$commentsStatus))) return;
01371
01372 $submissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01373 $submission->setCommentsStatus($commentsStatus);
01374 $submissionDao->updateSectionEditorSubmission($submission);
01375 }
01376
01377
01378
01379
01380
01385 function uploadLayoutVersion($submission) {
01386 import('file.ArticleFileManager');
01387 $articleFileManager = &new ArticleFileManager($submission->getArticleId());
01388 $submissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01389
01390 $layoutAssignment = &$submission->getLayoutAssignment();
01391
01392 $fileName = 'layoutFile';
01393 if ($articleFileManager->uploadedFileExists($fileName) && !HookRegistry::call('SectionEditorAction::uploadLayoutVersion', array(&$submission, &$layoutAssignment))) {
01394 $layoutFileId = $articleFileManager->uploadLayoutFile($fileName, $layoutAssignment->getLayoutFileId());
01395
01396 $layoutAssignment->setLayoutFileId($layoutFileId);
01397 $submissionDao->updateSectionEditorSubmission($submission);
01398 }
01399 }
01400
01406 function assignLayoutEditor($submission, $editorId) {
01407 if (HookRegistry::call('SectionEditorAction::assignLayoutEditor', array(&$submission, &$editorId))) return;
01408
01409 $layoutAssignment = &$submission->getLayoutAssignment();
01410
01411 import('article.log.ArticleLog');
01412 import('article.log.ArticleEventLogEntry');
01413
01414 if ($layoutAssignment->getEditorId()) {
01415 ArticleLog::logEvent($submission->getArticleId(), ARTICLE_LOG_LAYOUT_UNASSIGN, ARTICLE_LOG_TYPE_LAYOUT, $layoutAssignment->getLayoutId(), 'log.layout.layoutEditorUnassigned', array('editorName' => $layoutAssignment->getEditorFullName(), 'articleId' => $submission->getArticleId()));
01416 }
01417
01418 $layoutAssignment->setEditorId($editorId);
01419 $layoutAssignment->setDateNotified(null);
01420 $layoutAssignment->setDateUnderway(null);
01421 $layoutAssignment->setDateCompleted(null);
01422 $layoutAssignment->setDateAcknowledged(null);
01423
01424 $layoutDao = &DAORegistry::getDAO('LayoutAssignmentDAO');
01425 $layoutDao->updateLayoutAssignment($layoutAssignment);
01426 $layoutAssignment =& $layoutDao->getLayoutAssignmentById($layoutAssignment->getLayoutId());
01427
01428 ArticleLog::logEvent($submission->getArticleId(), ARTICLE_LOG_LAYOUT_ASSIGN, ARTICLE_LOG_TYPE_LAYOUT, $layoutAssignment->getLayoutId(), 'log.layout.layoutEditorAssigned', array('editorName' => $layoutAssignment->getEditorFullName(), 'articleId' => $submission->getArticleId()));
01429 }
01430
01437 function notifyLayoutEditor($submission, $send = false) {
01438 $submissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01439 $userDao = &DAORegistry::getDAO('UserDAO');
01440 $journal = &Request::getJournal();
01441 $user = &Request::getUser();
01442
01443 import('mail.ArticleMailTemplate');
01444 $email = &new ArticleMailTemplate($submission, 'LAYOUT_REQUEST');
01445 $layoutAssignment = &$submission->getLayoutAssignment();
01446 $layoutEditor = &$userDao->getUser($layoutAssignment->getEditorId());
01447 if (!isset($layoutEditor)) return true;
01448
01449 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
01450 HookRegistry::call('SectionEditorAction::notifyLayoutEditor', array(&$submission, &$layoutEditor, &$layoutAssignment, &$email));
01451 if ($email->isEnabled()) {
01452 $email->setAssoc(ARTICLE_EMAIL_LAYOUT_NOTIFY_EDITOR, ARTICLE_EMAIL_TYPE_LAYOUT, $layoutAssignment->getLayoutId());
01453 $email->send();
01454 }
01455
01456 $layoutAssignment->setDateNotified(Core::getCurrentDate());
01457 $layoutAssignment->setDateUnderway(null);
01458 $layoutAssignment->setDateCompleted(null);
01459 $layoutAssignment->setDateAcknowledged(null);
01460 $submissionDao->updateSectionEditorSubmission($submission);
01461
01462 } else {
01463 if (!Request::getUserVar('continued')) {
01464 $email->addRecipient($layoutEditor->getEmail(), $layoutEditor->getFullName());
01465 $paramArray = array(
01466 'layoutEditorName' => $layoutEditor->getFullName(),
01467 'layoutEditorUsername' => $layoutEditor->getUsername(),
01468 'editorialContactSignature' => $user->getContactSignature(),
01469 'submissionLayoutUrl' => Request::url(null, 'layoutEditor', 'submission', $submission->getArticleId())
01470 );
01471 $email->assignParams($paramArray);
01472 }
01473 $email->displayEditForm(Request::url(null, null, 'notifyLayoutEditor', 'send'), array('articleId' => $submission->getArticleId()));
01474 return false;
01475 }
01476 return true;
01477 }
01478
01485 function thankLayoutEditor($submission, $send = false) {
01486 $submissionDao = &DAORegistry::getDAO('SectionEditorSubmissionDAO');
01487 $userDao = &DAORegistry::getDAO('UserDAO');
01488 $journal = &Request::getJournal();
01489 $user = &Request::getUser();
01490
01491 import('mail.ArticleMailTemplate');
01492 $email = &new ArticleMailTemplate($submission, 'LAYOUT_ACK');
01493
01494 $layoutAssignment = &$submission->getLayoutAssignment();
01495 $layoutEditor = &$userDao->getUser($layoutAssignment->getEditorId());
01496 if (!isset($layoutEditor)) return true;
01497
01498 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
01499 HookRegistry::call('SectionEditorAction::thankLayoutEditor', array(&$submission, &$layoutEditor, &$layoutAssignment, &$email));
01500 if ($email->isEnabled()) {
01501 $email->setAssoc(ARTICLE_EMAIL_LAYOUT_THANK_EDITOR, ARTICLE_EMAIL_TYPE_LAYOUT, $layoutAssignment->getLayoutId());
01502 $email->send();
01503 }
01504
01505 $layoutAssignment->setDateAcknowledged(Core::getCurrentDate());
01506 $submissionDao->updateSectionEditorSubmission($submission);
01507
01508 } else {
01509 if (!Request::getUserVar('continued')) {
01510 $email->addRecipient($layoutEditor->getEmail(), $layoutEditor->getFullName());
01511 $paramArray = array(
01512 'layoutEditorName' => $layoutEditor->getFullName(),
01513 'editorialContactSignature' => $user->getContactSignature()
01514 );
01515 $email->assignParams($paramArray);
01516 }
01517 $email->displayEditForm(Request::url(null, null, 'thankLayoutEditor', 'send'), array('articleId' => $submission->getArticleId()));
01518 return false;
01519 }
01520 return true;
01521 }
01522
01529 function orderGalley($article, $galleyId, $direction) {
01530 import('submission.layoutEditor.LayoutEditorAction');
01531 LayoutEditorAction::orderGalley($article, $galleyId, $direction);
01532 }
01533
01539 function deleteGalley($article, $galleyId) {
01540 import('submission.layoutEditor.LayoutEditorAction');
01541 LayoutEditorAction::deleteGalley($article, $galleyId);
01542 }
01543
01550 function orderSuppFile($article, $suppFileId, $direction) {
01551 import('submission.layoutEditor.LayoutEditorAction');
01552 LayoutEditorAction::orderSuppFile($article, $suppFileId, $direction);
01553 }
01554
01560 function deleteSuppFile($article, $suppFileId) {
01561 import('submission.layoutEditor.LayoutEditorAction');
01562 LayoutEditorAction::deleteSuppFile($article, $suppFileId);
01563 }
01564
01571 function deleteArticleFile($submission, $fileId, $revision) {
01572 import('file.ArticleFileManager');
01573 $file =& $submission->getEditorFile();
01574
01575 if (isset($file) && $file->getFileId() == $fileId && !HookRegistry::call('SectionEditorAction::deleteArticleFile', array(&$submission, &$fileId, &$revision))) {
01576 $articleFileManager = &new ArticleFileManager($submission->getArticleId());
01577 $articleFileManager->deleteFile($fileId, $revision);
01578 }
01579 }
01580
01587 function deleteArticleImage($submission, $fileId, $revision) {
01588 import('file.ArticleFileManager');
01589 $articleGalleyDao =& DAORegistry::getDAO('ArticleGalleyDAO');
01590 if (HookRegistry::call('SectionEditorAction::deleteArticleImage', array(&$submission, &$fileId, &$revision))) return;
01591 foreach ($submission->getGalleys() as $galley) {
01592 $images =& $articleGalleyDao->getGalleyImages($galley->getGalleyId());
01593 foreach ($images as $imageFile) {
01594 if ($imageFile->getArticleId() == $submission->getArticleId() && $fileId == $imageFile->getFileId() && $imageFile->getRevision() == $revision) {
01595 $articleFileManager = &new ArticleFileManager($submission->getArticleId());
01596 $articleFileManager->deleteFile($imageFile->getFileId(), $imageFile->getRevision());
01597 }
01598 }
01599 unset($images);
01600 }
01601 }
01602
01607 function addSubmissionNote($articleId) {
01608 import('file.ArticleFileManager');
01609
01610 $articleNoteDao = &DAORegistry::getDAO('ArticleNoteDAO');
01611 $user = &Request::getUser();
01612
01613 $articleNote = &new ArticleNote();
01614 $articleNote->setArticleId($articleId);
01615 $articleNote->setUserId($user->getUserId());
01616 $articleNote->setDateCreated(Core::getCurrentDate());
01617 $articleNote->setDateModified(Core::getCurrentDate());
01618 $articleNote->setTitle(Request::getUserVar('title'));
01619 $articleNote->setNote(Request::getUserVar('note'));
01620
01621 if (!HookRegistry::call('SectionEditorAction::addSubmissionNote', array(&$articleId, &$articleNote))) {
01622 $articleFileManager = &new ArticleFileManager($articleId);
01623 if ($articleFileManager->uploadedFileExists('upload')) {
01624 $fileId = $articleFileManager->uploadSubmissionNoteFile('upload');
01625 } else {
01626 $fileId = 0;
01627 }
01628
01629 $articleNote->setFileId($fileId);
01630
01631 $articleNoteDao->insertArticleNote($articleNote);
01632 }
01633 }
01634
01639 function removeSubmissionNote($articleId) {
01640 $noteId = Request::getUserVar('noteId');
01641 $fileId = Request::getUserVar('fileId');
01642
01643 if (HookRegistry::call('SectionEditorAction::removeSubmissionNote', array(&$articleId, &$noteId, &$fileId))) return;
01644
01645
01646 if ($fileId) {
01647 import('file.ArticleFileManager');
01648 $articleFileManager = &new ArticleFileManager($articleId);
01649 $articleFileManager->deleteFile($fileId);
01650 }
01651
01652 $articleNoteDao = &DAORegistry::getDAO('ArticleNoteDAO');
01653 $articleNoteDao->deleteArticleNoteById($noteId);
01654 }
01655
01660 function updateSubmissionNote($articleId) {
01661 import('file.ArticleFileManager');
01662
01663 $articleNoteDao = &DAORegistry::getDAO('ArticleNoteDAO');
01664 $user = &Request::getUser();
01665
01666 $articleNote = &new ArticleNote();
01667 $articleNote->setNoteId(Request::getUserVar('noteId'));
01668 $articleNote->setArticleId($articleId);
01669 $articleNote->setUserId($user->getUserId());
01670 $articleNote->setDateModified(Core::getCurrentDate());
01671 $articleNote->setTitle(Request::getUserVar('title'));
01672 $articleNote->setNote(Request::getUserVar('note'));
01673 $articleNote->setFileId(Request::getUserVar('fileId'));
01674
01675 if (HookRegistry::call('SectionEditorAction::updateSubmissionNote', array(&$articleId, &$articleNote))) return;
01676
01677 $articleFileManager = &new ArticleFileManager($articleId);
01678
01679
01680 if ($articleFileManager->uploadedFileExists('upload')) {
01681
01682 $fileId = $articleFileManager->uploadSubmissionNoteFile('upload', $articleNote->getFileId(), true);
01683 $articleNote->setFileId($fileId);
01684
01685 } else {
01686 if (Request::getUserVar('removeUploadedFile')) {
01687 $articleFileManager = &new ArticleFileManager($articleId);
01688 $articleFileManager->deleteFile($articleNote->getFileId());
01689 $articleNote->setFileId(0);
01690 }
01691 }
01692
01693 $articleNoteDao->updateArticleNote($articleNote);
01694 }
01695
01700 function clearAllSubmissionNotes($articleId) {
01701 if (HookRegistry::call('SectionEditorAction::clearAllSubmissionNotes', array(&$articleId))) return;
01702
01703 import('file.ArticleFileManager');
01704
01705 $articleNoteDao = &DAORegistry::getDAO('ArticleNoteDAO');
01706
01707 $fileIds = $articleNoteDao->getAllArticleNoteFileIds($articleId);
01708
01709 if (!empty($fileIds)) {
01710 $articleFileDao = &DAORegistry::getDAO('ArticleFileDAO');
01711 $articleFileManager = &new ArticleFileManager($articleId);
01712
01713 foreach ($fileIds as $fileId) {
01714 $articleFileManager->deleteFile($fileId);
01715 }
01716 }
01717
01718 $articleNoteDao->clearAllArticleNotes($articleId);
01719
01720 }
01721
01722
01723
01724
01725
01731 function viewPeerReviewComments(&$article, $reviewId) {
01732 if (HookRegistry::call('SectionEditorAction::viewPeerReviewComments', array(&$article, &$reviewId))) return;
01733
01734 import('submission.form.comment.PeerReviewCommentForm');
01735
01736 $commentForm = &new PeerReviewCommentForm($article, $reviewId, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
01737 $commentForm->initData();
01738 $commentForm->display();
01739 }
01740
01747 function postPeerReviewComment(&$article, $reviewId, $emailComment) {
01748 if (HookRegistry::call('SectionEditorAction::postPeerReviewComment', array(&$article, &$reviewId, &$emailComment))) return;
01749
01750 import('submission.form.comment.PeerReviewCommentForm');
01751
01752 $commentForm = &new PeerReviewCommentForm($article, $reviewId, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
01753 $commentForm->readInputData();
01754
01755 if ($commentForm->validate()) {
01756 $commentForm->execute();
01757
01758 if ($emailComment) {
01759 $commentForm->email();
01760 }
01761
01762 } else {
01763 $commentForm->display();
01764 return false;
01765 }
01766 return true;
01767 }
01768
01773 function viewEditorDecisionComments($article) {
01774 if (HookRegistry::call('SectionEditorAction::viewEditorDecisionComments', array(&$article))) return;
01775
01776 import('submission.form.comment.EditorDecisionCommentForm');
01777
01778 $commentForm = &new EditorDecisionCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
01779 $commentForm->initData();
01780 $commentForm->display();
01781 }
01782
01788 function postEditorDecisionComment($article, $emailComment) {
01789 if (HookRegistry::call('SectionEditorAction::postEditorDecisionComment', array(&$article, &$emailComment))) return;
01790
01791 import('submission.form.comment.EditorDecisionCommentForm');
01792
01793 $commentForm = &new EditorDecisionCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
01794 $commentForm->readInputData();
01795
01796 if ($commentForm->validate()) {
01797 $commentForm->execute();
01798
01799 if ($emailComment) {
01800 $commentForm->email();
01801 }
01802 } else {
01803 $commentForm->display();
01804 return false;
01805 }
01806 return true;
01807 }
01808
01814 function emailEditorDecisionComment($sectionEditorSubmission, $send) {
01815 $userDao =& DAORegistry::getDAO('UserDAO');
01816 $articleCommentDao =& DAORegistry::getDAO('ArticleCommentDAO');
01817 $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
01818
01819 $journal =& Request::getJournal();
01820
01821 $user =& Request::getUser();
01822 import('mail.ArticleMailTemplate');
01823 $email = &new ArticleMailTemplate($sectionEditorSubmission);
01824
01825 $copyeditor =& $sectionEditorSubmission->getCopyeditor();
01826
01827 if ($send && !$email->hasErrors()) {
01828 HookRegistry::call('SectionEditorAction::emailEditorDecisionComment', array(&$sectionEditorSubmission, &$send));
01829 $email->send();
01830
01831 $decisions = $sectionEditorSubmission->getDecisions();
01832 $decisions = array_pop($decisions);
01833 $decision = array_pop($decisions);
01834
01835 if ($decision && $decision['decision'] == SUBMISSION_EDITOR_DECISION_DECLINE) {
01836
01837
01838 $sectionEditorSubmission->setStatus(STATUS_ARCHIVED);
01839 $sectionEditorSubmission->stampStatusModified();
01840 $sectionEditorSubmissionDao->updateSectionEditorSubmission($sectionEditorSubmission);
01841 }
01842
01843 $articleComment =& new ArticleComment();
01844 $articleComment->setCommentType(COMMENT_TYPE_EDITOR_DECISION);
01845 $articleComment->setRoleId(Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
01846 $articleComment->setArticleId($sectionEditorSubmission->getArticleId());
01847 $articleComment->setAuthorId($sectionEditorSubmission->getUserId());
01848 $articleComment->setCommentTitle($email->getSubject());
01849 $articleComment->setComments($email->getBody());
01850 $articleComment->setDatePosted(Core::getCurrentDate());
01851 $articleComment->setViewable(true);
01852 $articleComment->setAssocId($sectionEditorSubmission->getArticleId());
01853 $articleCommentDao->insertArticleComment($articleComment);
01854
01855 return true;
01856 } else {
01857 if (!Request::getUserVar('continued')) {
01858 $authorUser =& $userDao->getUser($sectionEditorSubmission->getUserId());
01859 $authorEmail = $authorUser->getEmail();
01860 $email->addRecipient($authorEmail, $authorUser->getFullName());
01861 if ($journal->getSetting('notifyAllAuthorsOnDecision')) foreach ($sectionEditorSubmission->getAuthors() as $author) {
01862 if ($author->getEmail() != $authorEmail) {
01863 $email->addCc ($author->getEmail(), $author->getFullName());
01864 }
01865 }
01866 } else {
01867 if (Request::getUserVar('importPeerReviews')) {
01868 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
01869 $reviewAssignments = &$reviewAssignmentDao->getReviewAssignmentsByArticleId($sectionEditorSubmission->getArticleId(), $sectionEditorSubmission->getCurrentRound());
01870 $reviewIndexes = &$reviewAssignmentDao->getReviewIndexesForRound($sectionEditorSubmission->getArticleId(), $sectionEditorSubmission->getCurrentRound());
01871
01872 $body = '';
01873 foreach ($reviewAssignments as $reviewAssignment) {
01874
01875 if ($reviewAssignment->getDateCompleted() != null && !$reviewAssignment->getCancelled()) {
01876
01877 $articleComments = &$articleCommentDao->getArticleComments($sectionEditorSubmission->getArticleId(), COMMENT_TYPE_PEER_REVIEW, $reviewAssignment->getReviewId());
01878 $body .= "------------------------------------------------------\n";
01879 $body .= Locale::translate('submission.comments.importPeerReviews.reviewerLetter', array('reviewerLetter' => chr(ord('A') + $reviewIndexes[$reviewAssignment->getReviewId()]))) . "\n";
01880 if (is_array($articleComments)) {
01881 foreach ($articleComments as $comment) {
01882
01883 if ($comment->getViewable()) {
01884 $body .= $comment->getComments() . "\n\n";
01885 }
01886 }
01887 }
01888 $body .= "------------------------------------------------------\n\n";
01889 }
01890 }
01891 $oldBody = $email->getBody();
01892 if (!empty($oldBody)) $oldBody .= "\n";
01893 $email->setBody($oldBody . $body);
01894 }
01895 }
01896
01897 $email->displayEditForm(Request::url(null, null, 'emailEditorDecisionComment', 'send'), array('articleId' => $sectionEditorSubmission->getArticleId()), 'submission/comment/editorDecisionEmail.tpl', array('isAnEditor' => true));
01898
01899 return false;
01900 }
01901 }
01902
01910 function blindCcReviewsToReviewers($article, $send = false, $inhibitExistingEmail = false) {
01911 $commentDao = &DAORegistry::getDAO('ArticleCommentDAO');
01912 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
01913 $userDao = &DAORegistry::getDAO('UserDAO');
01914 $journal = &Request::getJournal();
01915
01916 $comments = &$commentDao->getArticleComments($article->getArticleId(), COMMENT_TYPE_EDITOR_DECISION);
01917 $reviewAssignments = &$reviewAssignmentDao->getReviewAssignmentsByArticleId($article->getArticleId(), $article->getCurrentRound());
01918
01919 $commentsText = "";
01920 foreach ($comments as $comment) {
01921 $commentsText .= $comment->getComments() . "\n\n";
01922 }
01923
01924 $user = &Request::getUser();
01925 import('mail.ArticleMailTemplate');
01926 $email = &new ArticleMailTemplate($article, 'SUBMISSION_DECISION_REVIEWERS');
01927
01928 if ($send && !$email->hasErrors() && !$inhibitExistingEmail) {
01929 HookRegistry::call('SectionEditorAction::blindCcReviewsToReviewers', array(&$article, &$reviewAssignments, &$email));
01930 $email->send();
01931 return true;
01932 } else {
01933 if ($inhibitExistingEmail || !Request::getUserVar('continued')) {
01934 $email->clearRecipients();
01935 foreach ($reviewAssignments as $reviewAssignment) {
01936 if ($reviewAssignment->getDateCompleted() != null && !$reviewAssignment->getCancelled()) {
01937 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
01938
01939 if (isset($reviewer)) $email->addBcc($reviewer->getEmail(), $reviewer->getFullName());
01940 }
01941 }
01942
01943 $paramArray = array(
01944 'comments' => $commentsText,
01945 'editorialContactSignature' => $user->getContactSignature()
01946 );
01947 $email->assignParams($paramArray);
01948 }
01949
01950 $email->displayEditForm(Request::url(null, null, 'blindCcReviewsToReviewers'), array('articleId' => $article->getArticleId()));
01951 return false;
01952 }
01953 }
01954
01959 function viewCopyeditComments($article) {
01960 if (HookRegistry::call('SectionEditorAction::viewCopyeditComments', array(&$article))) return;
01961
01962 import('submission.form.comment.CopyeditCommentForm');
01963
01964 $commentForm = &new CopyeditCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
01965 $commentForm->initData();
01966 $commentForm->display();
01967 }
01968
01974 function postCopyeditComment($article, $emailComment) {
01975 if (HookRegistry::call('SectionEditorAction::postCopyeditComment', array(&$article, &$emailComment))) return;
01976
01977 import('submission.form.comment.CopyeditCommentForm');
01978
01979 $commentForm = &new CopyeditCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
01980 $commentForm->readInputData();
01981
01982 if ($commentForm->validate()) {
01983 $commentForm->execute();
01984
01985 if ($emailComment) {
01986 $commentForm->email();
01987 }
01988
01989 } else {
01990 $commentForm->display();
01991 return false;
01992 }
01993 return true;
01994 }
01995
02000 function viewLayoutComments($article) {
02001 if (HookRegistry::call('SectionEditorAction::viewLayoutComments', array(&$article))) return;
02002
02003 import('submission.form.comment.LayoutCommentForm');
02004
02005 $commentForm = &new LayoutCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
02006 $commentForm->initData();
02007 $commentForm->display();
02008 }
02009
02015 function postLayoutComment($article, $emailComment) {
02016 if (HookRegistry::call('SectionEditorAction::postLayoutComment', array(&$article, &$emailComment))) return;
02017
02018 import('submission.form.comment.LayoutCommentForm');
02019
02020 $commentForm = &new LayoutCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
02021 $commentForm->readInputData();
02022
02023 if ($commentForm->validate()) {
02024 $commentForm->execute();
02025
02026 if ($emailComment) {
02027 $commentForm->email();
02028 }
02029
02030 } else {
02031 $commentForm->display();
02032 return false;
02033 }
02034 return true;
02035 }
02036
02041 function viewProofreadComments($article) {
02042 if (HookRegistry::call('SectionEditorAction::viewProofreadComments', array(&$article))) return;
02043
02044 import('submission.form.comment.ProofreadCommentForm');
02045
02046 $commentForm = &new ProofreadCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
02047 $commentForm->initData();
02048 $commentForm->display();
02049 }
02050
02056 function postProofreadComment($article, $emailComment) {
02057 if (HookRegistry::call('SectionEditorAction::postProofreadComment', array(&$article, &$emailComment))) return;
02058
02059 import('submission.form.comment.ProofreadCommentForm');
02060
02061 $commentForm = &new ProofreadCommentForm($article, Validation::isEditor()?ROLE_ID_EDITOR:ROLE_ID_SECTION_EDITOR);
02062 $commentForm->readInputData();
02063
02064 if ($commentForm->validate()) {
02065 $commentForm->execute();
02066
02067 if ($emailComment) {
02068 $commentForm->email();
02069 }
02070
02071 } else {
02072 $commentForm->display();
02073 return false;
02074 }
02075 return true;
02076 }
02077
02083 function confirmReviewForReviewer($reviewId, $accept) {
02084 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
02085 $userDao = &DAORegistry::getDAO('UserDAO');
02086 $user = &Request::getUser();
02087
02088 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
02089 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId(), true);
02090
02091 if (HookRegistry::call('SectionEditorAction::acceptReviewForReviewer', array(&$reviewAssignment, &$reviewer, &$accept))) return;
02092
02093
02094
02095 if ($reviewAssignment->getDateConfirmed() == null) {
02096 $reviewAssignment->setDeclined($accept?0:1);
02097 $reviewAssignment->setDateConfirmed(Core::getCurrentDate());
02098 $reviewAssignment->stampModified();
02099 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
02100
02101
02102 import('article.log.ArticleLog');
02103 import('article.log.ArticleEventLogEntry');
02104
02105 $entry = &new ArticleEventLogEntry();
02106 $entry->setArticleId($reviewAssignment->getArticleId());
02107 $entry->setUserId($user->getUserId());
02108 $entry->setDateLogged(Core::getCurrentDate());
02109 $entry->setEventType(ARTICLE_LOG_REVIEW_CONFIRM_BY_PROXY);
02110 $entry->setLogMessage($accept?'log.review.reviewAcceptedByProxy':'log.review.reviewDeclinedByProxy', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $reviewAssignment->getArticleId(), 'round' => $reviewAssignment->getRound(), 'userName' => $user->getFullName()));
02111 $entry->setAssocType(ARTICLE_LOG_TYPE_REVIEW);
02112 $entry->setAssocId($reviewAssignment->getReviewId());
02113
02114 ArticleLog::logEventEntry($reviewAssignment->getArticleId(), $entry);
02115 }
02116 }
02117
02122 function uploadReviewForReviewer($reviewId) {
02123 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
02124 $userDao = &DAORegistry::getDAO('UserDAO');
02125 $user = &Request::getUser();
02126
02127 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
02128 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId(), true);
02129
02130 if (HookRegistry::call('SectionEditorAction::uploadReviewForReviewer', array(&$reviewAssignment, &$reviewer))) return;
02131
02132
02133 import('file.ArticleFileManager');
02134 $articleFileManager = &new ArticleFileManager($reviewAssignment->getArticleId());
02135
02136 if (($reviewAssignment->getRecommendation() === null || $reviewAssignment->getRecommendation() === '') && !$reviewAssignment->getCancelled()) {
02137 $fileName = 'upload';
02138 if ($articleFileManager->uploadedFileExists($fileName)) {
02139 if ($reviewAssignment->getReviewerFileId() != null) {
02140 $fileId = $articleFileManager->uploadReviewFile($fileName, $reviewAssignment->getReviewerFileId());
02141 } else {
02142 $fileId = $articleFileManager->uploadReviewFile($fileName);
02143 }
02144 }
02145 }
02146
02147 if (isset($fileId) && $fileId != 0) {
02148
02149
02150 if ($reviewAssignment->getDateConfirmed() == null) {
02151 $reviewAssignment->setDeclined(0);
02152 $reviewAssignment->setDateConfirmed(Core::getCurrentDate());
02153 }
02154
02155 $reviewAssignment->setReviewerFileId($fileId);
02156 $reviewAssignment->stampModified();
02157 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
02158
02159
02160 import('article.log.ArticleLog');
02161 import('article.log.ArticleEventLogEntry');
02162
02163 $entry = &new ArticleEventLogEntry();
02164 $entry->setArticleId($reviewAssignment->getArticleId());
02165 $entry->setUserId($user->getUserId());
02166 $entry->setDateLogged(Core::getCurrentDate());
02167 $entry->setEventType(ARTICLE_LOG_REVIEW_FILE_BY_PROXY);
02168 $entry->setLogMessage('log.review.reviewFileByProxy', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $reviewAssignment->getArticleId(), 'round' => $reviewAssignment->getRound(), 'userName' => $user->getFullName()));
02169 $entry->setAssocType(ARTICLE_LOG_TYPE_REVIEW);
02170 $entry->setAssocId($reviewAssignment->getReviewId());
02171
02172 ArticleLog::logEventEntry($reviewAssignment->getArticleId(), $entry);
02173 }
02174 }
02175
02182 function submissionBreadcrumb($articleId, $parentPage, $section) {
02183 $breadcrumb = array();
02184 if ($articleId) {
02185 $breadcrumb[] = array(Request::url(null, $section, 'submission', $articleId), "#$articleId", true);
02186 }
02187
02188 if ($parentPage) {
02189 switch($parentPage) {
02190 case 'summary':
02191 $parent = array(Request::url(null, $section, 'submission', $articleId), 'submission.summary');
02192 break;
02193 case 'review':
02194 $parent = array(Request::url(null, $section, 'submissionReview', $articleId), 'submission.review');
02195 break;
02196 case 'editing':
02197 $parent = array(Request::url(null, $section, 'submissionEditing', $articleId), 'submission.editing');
02198 break;
02199 case 'history':
02200 $parent = array(Request::url(null, $section, 'submissionHistory', $articleId), 'submission.history');
02201 break;
02202 }
02203 if ($section != 'editor' && $section != 'sectionEditor') {
02204 $parent[0] = Request::url(null, $section, 'submission', $articleId);
02205 }
02206 $breadcrumb[] = $parent;
02207 }
02208 return $breadcrumb;
02209 }
02210 }
02211
02212 ?>