00001 <?php
00002
00015
00016
00017
00018 import('submission.common.Action');
00019
00020 class ReviewerAction extends Action {
00021
00025 function ReviewerAction() {
00026
00027 }
00028
00040 function confirmReview($reviewerSubmission, $decline, $send) {
00041 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00042 $userDao = &DAORegistry::getDAO('UserDAO');
00043
00044 $reviewId = $reviewerSubmission->getReviewId();
00045
00046 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00047 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00048 if (!isset($reviewer)) return true;
00049
00050
00051
00052 if ($reviewAssignment->getDateConfirmed() == null) {
00053 import('mail.ArticleMailTemplate');
00054 $email = &new ArticleMailTemplate($reviewerSubmission, $decline?'REVIEW_DECLINE':'REVIEW_CONFIRM');
00055
00056
00057 $email->setFrom($reviewer->getEmail(), $reviewer->getFullName());
00058 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00059 HookRegistry::call('ReviewerAction::confirmReview', array(&$reviewerSubmission, &$email, $decline));
00060 if ($email->isEnabled()) {
00061 $email->setAssoc($decline?ARTICLE_EMAIL_REVIEW_DECLINE:ARTICLE_EMAIL_REVIEW_CONFIRM, ARTICLE_EMAIL_TYPE_REVIEW, $reviewId);
00062 $email->send();
00063 }
00064
00065 $reviewAssignment->setDeclined($decline);
00066 $reviewAssignment->setDateConfirmed(Core::getCurrentDate());
00067 $reviewAssignment->stampModified();
00068 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00069
00070
00071 import('article.log.ArticleLog');
00072 import('article.log.ArticleEventLogEntry');
00073
00074 $entry = &new ArticleEventLogEntry();
00075 $entry->setArticleId($reviewAssignment->getArticleId());
00076 $entry->setUserId($reviewer->getUserId());
00077 $entry->setDateLogged(Core::getCurrentDate());
00078 $entry->setEventType($decline?ARTICLE_LOG_REVIEW_DECLINE:ARTICLE_LOG_REVIEW_ACCEPT);
00079 $entry->setLogMessage($decline?'log.review.reviewDeclined':'log.review.reviewAccepted', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $reviewAssignment->getArticleId(), 'round' => $reviewAssignment->getRound()));
00080 $entry->setAssocType(ARTICLE_LOG_TYPE_REVIEW);
00081 $entry->setAssocId($reviewAssignment->getReviewId());
00082
00083 ArticleLog::logEventEntry($reviewAssignment->getArticleId(), $entry);
00084
00085 return true;
00086 } else {
00087 if (!Request::getUserVar('continued')) {
00088 $assignedEditors = $email->ccAssignedEditors($reviewerSubmission->getArticleId());
00089 $reviewingSectionEditors = $email->toAssignedReviewingSectionEditors($reviewerSubmission->getArticleId());
00090 if (empty($assignedEditors) && empty($reviewingSectionEditors)) {
00091 $journal = &Request::getJournal();
00092 $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName'));
00093 $editorialContactName = $journal->getSetting('contactName');
00094 } else {
00095 if (!empty($reviewingSectionEditors)) $editorialContact = array_shift($reviewingSectionEditors);
00096 else $editorialContact = array_shift($assignedEditors);
00097 $editorialContactName = $editorialContact->getEditorFullName();
00098 }
00099
00100 $email->assignParams(array(
00101 'editorialContactName' => $editorialContactName,
00102 'reviewerName' => $reviewer->getFullName(),
00103 'reviewDueDate' => strftime(Config::getVar('general', 'date_format_short'), strtotime($reviewAssignment->getDateDue()))
00104 ));
00105 }
00106 $paramArray = array('reviewId' => $reviewId);
00107 if ($decline) $paramArray['declineReview'] = 1;
00108 $email->displayEditForm(Request::url(null, 'reviewer', 'confirmReview'), $paramArray);
00109 return false;
00110 }
00111 }
00112 return true;
00113 }
00114
00121 function recordRecommendation(&$reviewerSubmission, $recommendation, $send) {
00122 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00123 $userDao = &DAORegistry::getDAO('UserDAO');
00124
00125
00126 $reviewerRecommendationOptions =& ReviewAssignment::getReviewerRecommendationOptions();
00127 if (!isset($reviewerRecommendationOptions[$recommendation])) return true;
00128
00129 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewerSubmission->getReviewId());
00130 $reviewer = &$userDao->getUser($reviewAssignment->getReviewerId());
00131 if (!isset($reviewer)) return true;
00132
00133
00134
00135 if ($reviewAssignment->getRecommendation() === null || $reviewAssignment->getRecommendation === '') {
00136 import('mail.ArticleMailTemplate');
00137 $email = &new ArticleMailTemplate($reviewerSubmission, 'REVIEW_COMPLETE');
00138
00139
00140 $email->setFrom($reviewer->getEmail(), $reviewer->getFullName());
00141
00142 if (!$email->isEnabled() || ($send && !$email->hasErrors())) {
00143 HookRegistry::call('ReviewerAction::recordRecommendation', array(&$reviewerSubmission, &$email, $recommendation));
00144 if ($email->isEnabled()) {
00145 $email->setAssoc(ARTICLE_EMAIL_REVIEW_COMPLETE, ARTICLE_EMAIL_TYPE_REVIEW, $reviewerSubmission->getReviewId());
00146 $email->send();
00147 }
00148
00149 $reviewAssignment->setRecommendation($recommendation);
00150 $reviewAssignment->setDateCompleted(Core::getCurrentDate());
00151 $reviewAssignment->stampModified();
00152 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00153
00154
00155 import('article.log.ArticleLog');
00156 import('article.log.ArticleEventLogEntry');
00157
00158 $entry = &new ArticleEventLogEntry();
00159 $entry->setArticleId($reviewAssignment->getArticleId());
00160 $entry->setUserId($reviewer->getUserId());
00161 $entry->setDateLogged(Core::getCurrentDate());
00162 $entry->setEventType(ARTICLE_LOG_REVIEW_RECOMMENDATION);
00163 $entry->setLogMessage('log.review.reviewRecommendationSet', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $reviewAssignment->getArticleId(), 'round' => $reviewAssignment->getRound()));
00164 $entry->setAssocType(ARTICLE_LOG_TYPE_REVIEW);
00165 $entry->setAssocId($reviewAssignment->getReviewId());
00166
00167 ArticleLog::logEventEntry($reviewAssignment->getArticleId(), $entry);
00168 } else {
00169 if (!Request::getUserVar('continued')) {
00170 $assignedEditors = $email->ccAssignedEditors($reviewerSubmission->getArticleId());
00171 $reviewingSectionEditors = $email->toAssignedReviewingSectionEditors($reviewerSubmission->getArticleId());
00172 if (empty($assignedEditors) && empty($reviewingSectionEditors)) {
00173 $journal = &Request::getJournal();
00174 $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName'));
00175 $editorialContactName = $journal->getSetting('contactName');
00176 } else {
00177 if (!empty($reviewingSectionEditors)) $editorialContact = array_shift($reviewingSectionEditors);
00178 else $editorialContact = array_shift($assignedEditors);
00179 $editorialContactName = $editorialContact->getEditorFullName();
00180 }
00181
00182 $reviewerRecommendationOptions = &ReviewAssignment::getReviewerRecommendationOptions();
00183
00184 $email->assignParams(array(
00185 'editorialContactName' => $editorialContactName,
00186 'reviewerName' => $reviewer->getFullName(),
00187 'articleTitle' => strip_tags($reviewerSubmission->getArticleTitle()),
00188 'recommendation' => Locale::translate($reviewerRecommendationOptions[$recommendation])
00189 ));
00190 }
00191
00192 $email->displayEditForm(Request::url(null, 'reviewer', 'recordRecommendation'),
00193 array('reviewId' => $reviewerSubmission->getReviewId(), 'recommendation' => $recommendation)
00194 );
00195 return false;
00196 }
00197 }
00198 return true;
00199 }
00200
00205 function uploadReviewerVersion($reviewId) {
00206 import("file.ArticleFileManager");
00207 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00208 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00209
00210 $articleFileManager = &new ArticleFileManager($reviewAssignment->getArticleId());
00211
00212
00213
00214 if (($reviewAssignment->getRecommendation() === null || $reviewAssignment->getRecommendation() === '') && !$reviewAssignment->getCancelled()) {
00215 $fileName = 'upload';
00216 if ($articleFileManager->uploadedFileExists($fileName)) {
00217 HookRegistry::call('ReviewerAction::uploadReviewFile', array(&$reviewAssignment));
00218 if ($reviewAssignment->getReviewerFileId() != null) {
00219 $fileId = $articleFileManager->uploadReviewFile($fileName, $reviewAssignment->getReviewerFileId());
00220 } else {
00221 $fileId = $articleFileManager->uploadReviewFile($fileName);
00222 }
00223 }
00224 }
00225
00226 if (isset($fileId) && $fileId != 0) {
00227 $reviewAssignment->setReviewerFileId($fileId);
00228 $reviewAssignment->stampModified();
00229 $reviewAssignmentDao->updateReviewAssignment($reviewAssignment);
00230
00231
00232 import('article.log.ArticleLog');
00233 import('article.log.ArticleEventLogEntry');
00234
00235 $userDao =& DAORegistry::getDAO('UserDAO');
00236 $reviewer =& $userDao->getUser($reviewAssignment->getReviewerId());
00237
00238 $entry = &new ArticleEventLogEntry();
00239 $entry->setArticleId($reviewAssignment->getArticleId());
00240 $entry->setUserId($reviewer->getUserId());
00241 $entry->setDateLogged(Core::getCurrentDate());
00242 $entry->setEventType(ARTICLE_LOG_REVIEW_FILE);
00243 $entry->setLogMessage('log.review.reviewerFile');
00244 $entry->setAssocType(ARTICLE_LOG_TYPE_REVIEW);
00245 $entry->setAssocId($reviewAssignment->getReviewId());
00246
00247 ArticleLog::logEventEntry($reviewAssignment->getArticleId(), $entry);
00248 }
00249 }
00250
00257 function deleteReviewerVersion($reviewId, $fileId, $revision = null) {
00258 import("file.ArticleFileManager");
00259
00260 $articleId = Request::getUserVar('articleId');
00261 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00262 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00263
00264 if (!HookRegistry::call('ReviewerAction::deleteReviewerVersion', array(&$reviewAssignment, &$fileId, &$revision))) {
00265 $articleFileManager = &new ArticleFileManager($reviewAssignment->getArticleId());
00266 $articleFileManager->deleteFile($fileId, $revision);
00267 }
00268 }
00269
00276 function viewPeerReviewComments(&$user, &$article, $reviewId) {
00277 if (!HookRegistry::call('ReviewerAction::viewPeerReviewComments', array(&$user, &$article, &$reviewId))) {
00278 import("submission.form.comment.PeerReviewCommentForm");
00279
00280 $commentForm = &new PeerReviewCommentForm($article, $reviewId, ROLE_ID_REVIEWER);
00281 $commentForm->setUser($user);
00282 $commentForm->initData();
00283 $commentForm->setData('reviewId', $reviewId);
00284 $commentForm->display();
00285 }
00286 }
00287
00295 function postPeerReviewComment(&$user, &$article, $reviewId, $emailComment) {
00296 if (!HookRegistry::call('ReviewerAction::postPeerReviewComment', array(&$user, &$article, &$reviewId, &$emailComment))) {
00297 import("submission.form.comment.PeerReviewCommentForm");
00298
00299 $commentForm = &new PeerReviewCommentForm($article, $reviewId, ROLE_ID_REVIEWER);
00300 $commentForm->setUser($user);
00301 $commentForm->readInputData();
00302
00303 if ($commentForm->validate()) {
00304 $commentForm->execute();
00305
00306 if ($emailComment) {
00307 $commentForm->email();
00308 }
00309
00310 } else {
00311 $commentForm->display();
00312 return false;
00313 }
00314 return true;
00315 }
00316 }
00317
00323 function editReviewFormResponse($reviewId, $reviewFormId) {
00324 if (!HookRegistry::call('ReviewerAction::editReviewFormResponse', array($reviewId, $reviewFormId))) {
00325 import('submission.form.ReviewFormResponseForm');
00326
00327 $reviewForm =& new ReviewFormResponseForm($reviewId, $reviewFormId);
00328 $reviewForm->initData();
00329 $reviewForm->display();
00330 }
00331 }
00332
00338 function saveReviewFormResponse($reviewId, $reviewFormId) {
00339 if (!HookRegistry::call('ReviewerAction::saveReviewFormResponse', array($reviewId, $reviewFormId))) {
00340 import('submission.form.ReviewFormResponseForm');
00341
00342 $reviewForm =& new ReviewFormResponseForm($reviewId, $reviewFormId);
00343 $reviewForm->readInputData();
00344 if ($reviewForm->validate()) {
00345 $reviewForm->execute();
00346 } else {
00347 $reviewForm->display();
00348 return false;
00349 }
00350 return true;
00351 }
00352 }
00353
00354
00355
00356
00357
00365 function downloadReviewerFile($reviewId, $article, $fileId, $revision = null) {
00366 $reviewAssignmentDao = &DAORegistry::getDAO('ReviewAssignmentDAO');
00367 $reviewAssignment = &$reviewAssignmentDao->getReviewAssignmentById($reviewId);
00368 $journal = &Request::getJournal();
00369
00370 $canDownload = false;
00371
00372
00373
00374
00375
00376 if ((!$reviewAssignment->getDateConfirmed() || $reviewAssignment->getDeclined()) && $journal->getSetting('restrictReviewerFileAccess')) {
00377
00378 } else if ($reviewAssignment->getReviewFileId() == $fileId) {
00379 if ($revision != null) {
00380 $canDownload = ($reviewAssignment->getReviewRevision() == $revision);
00381 }
00382 } else if ($reviewAssignment->getReviewerFileId() == $fileId) {
00383 $canDownload = true;
00384 } else {
00385 foreach ($reviewAssignment->getSuppFiles() as $suppFile) {
00386 if ($suppFile->getFileId() == $fileId && $suppFile->getShowReviewers()) {
00387 $canDownload = true;
00388 }
00389 }
00390 }
00391
00392 $result = false;
00393 if (!HookRegistry::call('ReviewerAction::downloadReviewerFile', array(&$article, &$fileId, &$revision, &$canDownload, &$result))) {
00394 if ($canDownload) {
00395 return Action::downloadFile($article->getArticleId(), $fileId, $revision);
00396 } else {
00397 return false;
00398 }
00399 }
00400 return $result;
00401 }
00402
00407 function editComment ($article, $comment, $reviewId) {
00408 if (!HookRegistry::call('ReviewerAction::editComment', array(&$article, &$comment, &$reviewId))) {
00409 import ("submission.form.comment.EditCommentForm");
00410
00411 $commentForm =& new EditCommentForm ($article, $comment);
00412 $commentForm->initData();
00413 $commentForm->setData('reviewId', $reviewId);
00414 $commentForm->display(array('reviewId' => $reviewId));
00415 }
00416 }
00417 }
00418
00419 ?>