/** * Assigns a section editor to a submission. * @param $articleId int * @param $sectionEditorId int * @param $isEditor boolean * @param $send boolean * @param $request object * @return boolean true iff ready for redirect */ function assignEditor($articleId, $sectionEditorId, $isEditor, $send, $request) { $editorSubmissionDao =& DAORegistry::getDAO('EditorSubmissionDAO'); $editAssignmentDao =& DAORegistry::getDAO('EditAssignmentDAO'); /* @var $editAssignmentDao EditAssignmentDAO */ $userDao =& DAORegistry::getDAO('UserDAO'); $user =& $request->getUser(); $journal =& $request->getJournal(); $editorSubmission =& $editorSubmissionDao->getEditorSubmission($articleId); $sectionEditor =& $userDao->getById($sectionEditorId); if (!isset($sectionEditor)) { return true; } foreach ($editorSubmission->getEditAssignments() as $assignment) { if ($assignment->getEditorId() == $sectionEditorId) { return true; } } import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($editorSubmission, 'EDITOR_ASSIGN'); if ($user->getId() === $sectionEditorId || !$email->isEnabled() || $send && !$email->hasErrors()) { HookRegistry::call('EditorAction::assignEditor', array(&$editorSubmission, &$sectionEditor, &$isEditor, &$email)); if ($email->isEnabled() && $user->getId() !== $sectionEditorId) { $email->send($request); } $editAssignment = $editAssignmentDao->newDataObject(); $editAssignment->setArticleId($articleId); $editAssignment->setCanEdit(1); $editAssignment->setCanReview(1); // Make the selected editor the new editor $editAssignment->setEditorId($sectionEditorId); $editAssignment->setDateAssigned(Core::getCurrentDate()); $editAssignment->setDateNotified(is_array($send) && isset($send['skip']) ? null : Core::getCurrentDate()); $editAssignment->setDateUnderway(null); $editAssignments =& $editorSubmission->getEditAssignments(); array_push($editAssignments, $editAssignment); $editorSubmission->setEditAssignments($editAssignments); $editorSubmissionDao->updateEditorSubmission($editorSubmission); // Add log import('classes.article.log.ArticleLog'); ArticleLog::logEvent($request, $editorSubmission, ARTICLE_LOG_EDITOR_ASSIGN, 'log.editor.editorAssigned', array('editorName' => $sectionEditor->getFullName(), 'editorId' => $sectionEditorId)); return true; } else { if (!$request->getUserVar('continued')) { $email->addRecipient($sectionEditor->getEmail(), $sectionEditor->getFullName()); $paramArray = array('editorialContactName' => $sectionEditor->getFullName(), 'editorUsername' => $sectionEditor->getUsername(), 'editorPassword' => $sectionEditor->getPassword(), 'editorialContactSignature' => $user->getContactSignature(), 'submissionUrl' => $request->url(null, $isEditor ? 'editor' : 'sectionEditor', 'submissionReview', $articleId), 'submissionEditingUrl' => $request->url(null, $isEditor ? 'editor' : 'sectionEditor', 'submissionReview', $articleId)); $email->assignParams($paramArray); } $email->displayEditForm($request->url(null, null, 'assignEditor', 'send'), array('articleId' => $articleId, 'editorId' => $sectionEditorId)); return false; } }
/** * Blind CC the editor decision email to reviewers. * @param $article object * @param $send boolean * @return boolean true iff ready for redirect */ function bccEditorDecisionCommentToReviewers($article, $send, $request) { import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($article, 'SUBMISSION_DECISION_REVIEWERS'); if ($send && !$email->hasErrors()) { HookRegistry::call('SectionEditorAction::bccEditorDecisionCommentToReviewers', array(&$article, &$reviewAssignments, &$email)); $email->send($request); return true; } else { if (!$request->getUserVar('continued')) { $userDao =& DAORegistry::getDAO('UserDAO'); $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); $reviewAssignments =& $reviewAssignmentDao->getBySubmissionId($article->getId(), $article->getCurrentRound()); $email->clearRecipients(); foreach ($reviewAssignments as $reviewAssignment) { if ($reviewAssignment->getDateCompleted() != null && !$reviewAssignment->getCancelled()) { $reviewer =& $userDao->getUser($reviewAssignment->getReviewerId()); if (isset($reviewer)) { $email->addBcc($reviewer->getEmail(), $reviewer->getFullName()); } } } $commentsText = ""; if ($article->getMostRecentEditorDecisionComment()) { $comment = $article->getMostRecentEditorDecisionComment(); $commentsText = String::html2text($comment->getComments()) . "\n\n"; } $user =& $request->getUser(); $paramArray = array('comments' => $commentsText, 'editorialContactSignature' => $user->getContactSignature()); $email->assignParams($paramArray); } $email->displayEditForm($request->url(null, null, 'bccEditorDecisionCommentToReviewers', 'send'), array('articleId' => $article->getId())); return false; } }
/** * Copyeditor completes final copyedit. * @param $copyeditorSubmission object * @param $send boolean * @param $request object */ function completeFinalCopyedit($copyeditorSubmission, $send, $request) { $copyeditorSubmissionDao =& DAORegistry::getDAO('CopyeditorSubmissionDAO'); $signoffDao =& DAORegistry::getDAO('SignoffDAO'); $userDao =& DAORegistry::getDAO('UserDAO'); $journal =& $request->getJournal(); $finalSignoff = $signoffDao->build('SIGNOFF_COPYEDITING_FINAL', ASSOC_TYPE_ARTICLE, $copyeditorSubmission->getId()); if ($finalSignoff->getDateCompleted() != null) { return true; } $user =& $request->getUser(); import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($copyeditorSubmission, 'COPYEDIT_FINAL_COMPLETE'); $editAssignments = $copyeditorSubmission->getEditAssignments(); if (!$email->isEnabled() || $send && !$email->hasErrors()) { HookRegistry::call('CopyeditorAction::completeFinalCopyedit', array(&$copyeditorSubmission, &$editAssignments, &$email)); if ($email->isEnabled()) { $email->send($request); } $finalSignoff->setDateCompleted(Core::getCurrentDate()); $signoffDao->updateObject($finalSignoff); if ($copyEdFile = $copyeditorSubmission->getFileBySignoffType('SIGNOFF_COPYEDITING_FINAL')) { // Set initial layout version to final copyedit version $layoutSignoff = $signoffDao->build('SIGNOFF_LAYOUT', ASSOC_TYPE_ARTICLE, $copyeditorSubmission->getId()); if (!$layoutSignoff->getFileId()) { import('classes.file.ArticleFileManager'); $articleFileManager = new ArticleFileManager($copyeditorSubmission->getId()); if ($layoutFileId = $articleFileManager->copyToLayoutFile($copyEdFile->getFileId(), $copyEdFile->getRevision())) { $layoutSignoff->setFileId($layoutFileId); $signoffDao->updateObject($layoutSignoff); } } } // Add log entry import('classes.article.log.ArticleLog'); import('classes.article.log.ArticleEventLogEntry'); ArticleLog::logEvent($request, $copyeditorSubmission, ARTICLE_LOG_COPYEDIT_FINAL, 'log.copyedit.finalEditComplete', array('copyeditorName' => $user->getFullName())); return true; } else { if (!$request->getUserVar('continued')) { $assignedSectionEditors = $email->toAssignedEditingSectionEditors($copyeditorSubmission->getId()); $assignedEditors = $email->ccAssignedEditors($copyeditorSubmission->getId()); if (empty($assignedSectionEditors) && empty($assignedEditors)) { $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $paramArray = array('editorialContactName' => $journal->getSetting('contactName'), 'copyeditorName' => $user->getFullName()); } else { $editorialContact = array_shift($assignedSectionEditors); if (!$editorialContact) { $editorialContact = array_shift($assignedEditors); } $paramArray = array('editorialContactName' => $editorialContact->getEditorFullName(), 'copyeditorName' => $user->getFullName()); } $email->assignParams($paramArray); } $email->displayEditForm($request->url(null, 'copyeditor', 'completeFinalCopyedit', 'send'), array('articleId' => $copyeditorSubmission->getId())); return false; } }
/** * Records the reviewer's submission recommendation. * @param $reviewId int * @param $recommendation int * @param $send boolean */ function recordRecommendation(&$reviewAssignment, $recommendation, $send) { $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); $reviewerSubmissionDao =& DAORegistry::getDAO('ReviewerSubmissionDAO'); $userDao =& DAORegistry::getDAO('UserDAO'); $reviewId = $reviewAssignment->getReviewId(); $reviewerSubmission =& $reviewerSubmissionDao->getReviewerSubmission($reviewId); // Check validity of selected recommendation $reviewerRecommendationOptions =& ReviewAssignment::getReviewerRecommendationOptions(); if (!isset($reviewerRecommendationOptions[$recommendation])) { return true; } $reviewer =& $userDao->getUser($reviewAssignment->getReviewerId()); if (!isset($reviewer)) { return true; } // Only record the reviewers recommendation if // no recommendation has previously been submitted. if ($reviewAssignment->getRecommendation() === null || $reviewAssignment->getRecommendation === '') { import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($reviewerSubmission, null, 'REVIEW_COMPLETE'); // Must explicitly set sender because we may be here on an access // key, in which case the user is not technically logged in $email->setFrom($reviewer->getEmail(), $reviewer->getFullName()); if (!$email->isEnabled() || $send && !$email->hasErrors()) { HookRegistry::call('ReviewerAction::recordRecommendation', array(&$reviewerSubmission, &$email, $recommendation)); if ($email->isEnabled()) { $email->setAssoc(ARTICLE_EMAIL_REVIEW_COMPLETE, ARTICLE_EMAIL_TYPE_REVIEW, $reviewId); $email->send(); } $reviewAssignment->setRecommendation($recommendation); $reviewAssignment->setDateCompleted(Core::getCurrentDate()); $reviewAssignment->stampModified(); $reviewAssignmentDao->updateReviewAssignment($reviewAssignment); // Add log import('classes.article.log.ArticleLog'); import('classes.article.log.ArticleEventLogEntry'); $entry = new ArticleEventLogEntry(); $entry->setArticleId($reviewerSubmission->getArticleId()); $entry->setUserId($reviewer->getId()); $entry->setDateLogged(Core::getCurrentDate()); $entry->setEventType(ARTICLE_LOG_REVIEW_RECOMMENDATION); $entry->setLogLevel('N'); $entry->setLogMessage('log.review.reviewRecommendationSet', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $reviewerSubmission->getProposalId())); $entry->setAssocType(ARTICLE_LOG_TYPE_REVIEW); $entry->setAssocId($reviewAssignment->getId()); ArticleLog::logEventEntry($reviewerSubmission->getArticleId(), $entry); } else { if (!Request::getUserVar('continued')) { $assignedEditors = $email->ccAssignedEditors($reviewerSubmission->getArticleId()); $reviewingSectionEditors = $email->toAssignedReviewingSectionEditors($reviewerSubmission->getArticleId()); if (empty($assignedEditors) && empty($reviewingSectionEditors)) { $journal =& Request::getJournal(); $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $editorialContactName = $journal->getSetting('contactName'); } else { if (!empty($reviewingSectionEditors)) { $editorialContact = array_shift($reviewingSectionEditors); } else { $editorialContact = array_shift($assignedEditors); } // Modified by EL on February 17th 2013 // No edit assigment anymore $editorialContactName = $editorialContact->getFullName(); } $reviewerRecommendationOptions =& ReviewAssignment::getReviewerRecommendationOptions(); $email->assignParams(array('editorialContactName' => $editorialContactName, 'reviewerName' => $reviewer->getFullName(), 'articleTitle' => strip_tags($reviewerSubmission->getScientificTitle()), 'recommendation' => Locale::translate($reviewerRecommendationOptions[$recommendation]))); } $email->displayEditForm(Request::url(null, 'reviewer', 'recordRecommendation'), array('reviewId' => $reviewId, 'recommendation' => $recommendation)); return false; } } return true; }
/** * Email editor decision comment. * @param $authorSubmission object * @param $send boolean * @param $request object */ function emailEditorDecisionComment($authorSubmission, $send, $request) { $userDao =& DAORegistry::getDAO('UserDAO'); $journal =& $request->getJournal(); $user =& $request->getUser(); import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($authorSubmission); $editAssignments = $authorSubmission->getEditAssignments(); $editors = array(); foreach ($editAssignments as $editAssignment) { array_push($editors, $userDao->getUser($editAssignment->getEditorId())); } if ($send && !$email->hasErrors()) { HookRegistry::call('AuthorAction::emailEditorDecisionComment', array(&$authorSubmission, &$email)); $email->send($request); $articleCommentDao =& DAORegistry::getDAO('ArticleCommentDAO'); $articleComment = new ArticleComment(); $articleComment->setCommentType(COMMENT_TYPE_EDITOR_DECISION); $articleComment->setRoleId(ROLE_ID_AUTHOR); $articleComment->setArticleId($authorSubmission->getId()); $articleComment->setAuthorId($authorSubmission->getUserId()); $articleComment->setCommentTitle($email->getSubject()); $articleComment->setComments($email->getBody()); $articleComment->setDatePosted(Core::getCurrentDate()); $articleComment->setViewable(true); $articleComment->setAssocId($authorSubmission->getId()); $articleCommentDao->insertArticleComment($articleComment); return true; } else { if (!$request->getUserVar('continued')) { $email->setSubject($authorSubmission->getLocalizedTitle()); if (!empty($editors)) { foreach ($editors as $editor) { $email->addRecipient($editor->getEmail(), $editor->getFullName()); } } else { $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); } } $email->displayEditForm(Request::url(null, null, 'emailEditorDecisionComment', 'send'), array('articleId' => $authorSubmission->getId()), 'submission/comment/editorDecisionEmail.tpl'); return false; } }
/** * Blind CC the reviews to reviewers. * @param $article object * @param $send boolean * @param $inhibitExistingEmail boolean * @return boolean true iff ready for redirect */ function blindCcReviewsToReviewers($article, $send = false, $inhibitExistingEmail = false) { $commentDao =& DAORegistry::getDAO('ArticleCommentDAO'); $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); $userDao =& DAORegistry::getDAO('UserDAO'); $journal =& Request::getJournal(); $comments =& $commentDao->getArticleComments($article->getId(), COMMENT_TYPE_EDITOR_DECISION); $reviewAssignments =& $reviewAssignmentDao->getBySubmissionId($article->getId(), $article->getCurrentRound()); $commentsText = ""; foreach ($comments as $comment) { $commentsText .= String::html2text($comment->getComments()) . "\n\n"; } $user =& Request::getUser(); import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($article, 'SUBMISSION_DECISION_REVIEWERS', null, null, null, true, true); if ($send && !$email->hasErrors() && !$inhibitExistingEmail) { HookRegistry::call('SectionEditorAction::blindCcReviewsToReviewers', array(&$article, &$reviewAssignments, &$email)); $email->send(); return true; } else { if ($inhibitExistingEmail || !Request::getUserVar('continued')) { $email->clearRecipients(); foreach ($reviewAssignments as $reviewAssignment) { if ($reviewAssignment->getDateCompleted() != null && !$reviewAssignment->getCancelled()) { $reviewer =& $userDao->getUser($reviewAssignment->getReviewerId()); if (isset($reviewer)) { $email->addBcc($reviewer->getEmail(), $reviewer->getFullName()); } } } $paramArray = array('comments' => $commentsText, 'editorialContactSignature' => $user->getContactSignature()); $email->assignParams($paramArray); } $email->displayEditForm(Request::url(null, null, 'blindCcReviewsToReviewers'), array('articleId' => $article->getId())); return false; } }
/** * Marks layout assignment as completed. * @param $submission object * @param $send boolean */ function completeLayoutEditing($submission, $send = false) { $signoffDao =& DAORegistry::getDAO('SignoffDAO'); $userDao =& DAORegistry::getDAO('UserDAO'); $journal =& Request::getJournal(); $layoutSignoff = $signoffDao->build('SIGNOFF_LAYOUT', ASSOC_TYPE_ARTICLE, $submission->getArticleId()); if ($layoutSignoff->getDateCompleted() != null) { return true; } import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($submission, 'LAYOUT_COMPLETE'); $editAssignments =& $submission->getEditAssignments(); if (empty($editAssignments)) { return; } if (!$email->isEnabled() || $send && !$email->hasErrors()) { HookRegistry::call('LayoutEditorAction::completeLayoutEditing', array(&$submission, &$editAssignments, &$email)); if ($email->isEnabled()) { $email->setAssoc(ARTICLE_EMAIL_LAYOUT_NOTIFY_COMPLETE, ARTICLE_EMAIL_TYPE_LAYOUT, $layoutSignoff->getId()); $email->send(); } $layoutSignoff->setDateCompleted(Core::getCurrentDate()); $signoffDao->updateObject($layoutSignoff); // Add log entry $user =& Request::getUser(); import('classes.article.log.ArticleLog'); import('classes.article.log.ArticleEventLogEntry'); ArticleLog::logEvent($submission->getArticleId(), ARTICLE_LOG_LAYOUT_COMPLETE, ARTICLE_LOG_TYPE_LAYOUT, $user->getId(), 'log.layout.layoutEditComplete', array('editorName' => $user->getFullName(), 'articleId' => $submission->getArticleId())); return true; } else { $user =& Request::getUser(); if (!Request::getUserVar('continued')) { $assignedSectionEditors = $email->toAssignedEditingSectionEditors($submission->getArticleId()); $assignedEditors = $email->ccAssignedEditors($submission->getArticleId()); if (empty($assignedSectionEditors) && empty($assignedEditors)) { $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $editorialContactName = $journal->getSetting('contactName'); } else { $editorialContact = array_shift($assignedSectionEditors); if (!$editorialContact) { $editorialContact = array_shift($assignedEditors); } $editorialContactName = $editorialContact->getEditorFullName(); } $paramArray = array('editorialContactName' => $editorialContactName, 'layoutEditorName' => $user->getFullName()); $email->assignParams($paramArray); } $email->displayEditForm(Request::url(null, 'layoutEditor', 'completeAssignment', 'send'), array('articleId' => $submission->getArticleId())); return false; } }
/** * Proofread Emails * @param $articleId int * @param $mailType defined string - type of proofread mail being sent * @param $request object * @param $actionPath string - form action * @return true iff ready for a redirect */ function proofreadEmail($articleId, $mailType, $request, $actionPath = '') { $signoffDao =& DAORegistry::getDAO('SignoffDAO'); $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO'); $sectionEditorSubmission =& $sectionEditorSubmissionDao->getSectionEditorSubmission($articleId); $userDao =& DAORegistry::getDAO('UserDAO'); $journal =& Request::getJournal(); $user =& Request::getUser(); $ccs = array(); import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($sectionEditorSubmission, $mailType); switch ($mailType) { case 'PROOFREAD_AUTHOR_REQUEST': $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_AUTHOR; $signoffType = 'SIGNOFF_PROOFREADING_AUTHOR'; $setDateField = 'setDateNotified'; $nullifyDateFields = array('setDateUnderway', 'setDateCompleted', 'setDateAcknowledged'); $setUserId = $sectionEditorSubmission->getUserId(); $receiver =& $userDao->getUser($setUserId); $setUserId = $receiver; if (!isset($receiver)) { return true; } $receiverName = $receiver->getFullName(); $receiverAddress = $receiver->getEmail(); $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getId()); $addParamArray = array('authorName' => $receiver->getFullName(), 'authorUsername' => $receiver->getUsername(), 'authorPassword' => $receiver->getPassword(), 'editorialContactSignature' => $user->getContactSignature(), 'submissionUrl' => Request::url(null, 'author', 'submissionEditing', $articleId)); break; case 'PROOFREAD_AUTHOR_ACK': $eventType = ARTICLE_EMAIL_PROOFREAD_THANK_AUTHOR; $signoffType = 'SIGNOFF_PROOFREADING_AUTHOR'; $setDateField = 'setDateAcknowledged'; $receiver =& $userDao->getUser($sectionEditorSubmission->getUserId()); if (!isset($receiver)) { return true; } $receiverName = $receiver->getFullName(); $receiverAddress = $receiver->getEmail(); $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getId()); $addParamArray = array('authorName' => $receiver->getFullName(), 'editorialContactSignature' => $user->getContactSignature()); break; case 'PROOFREAD_AUTHOR_COMPLETE': $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_AUTHOR_COMPLETE; $signoffType = 'SIGNOFF_PROOFREADING_AUTHOR'; $setDateField = 'setDateCompleted'; $getDateField = 'getDateCompleted'; $editAssignments =& $sectionEditorSubmission->getEditAssignments(); $nextSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_PROOFREADER', ASSOC_TYPE_ARTICLE, $articleId); if ($nextSignoff->getUserId() != 0) { $setNextDateField = 'setDateNotified'; $proofreader =& $userDao->getUser($nextSignoff->getUserId()); $receiverName = $proofreader->getFullName(); $receiverAddress = $proofreader->getEmail(); $editorAdded = false; foreach ($editAssignments as $editAssignment) { if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) { $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName(); $editorAdded = true; } } if (!$editorAdded) { $ccs[$journal->getSetting('contactEmail')] = $journal->getSetting('contactName'); } } else { $editorAdded = false; $assignmentIndex = 0; foreach ($editAssignments as $editAssignment) { if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) { if ($assignmentIndex++ == 0) { $receiverName = $editAssignment->getEditorFullName(); $receiverAddress = $editAssignment->getEditorEmail(); } else { $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName(); } $editorAdded = true; } } if (!$editorAdded) { $receiverAddress = $journal->getSetting('contactEmail'); $receiverName = $journal->getSetting('contactName'); } } $addParamArray = array('editorialContactName' => $receiverName, 'authorName' => $user->getFullName()); break; case 'PROOFREAD_REQUEST': $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_PROOFREADER; $signoffType = 'SIGNOFF_PROOFREADING_PROOFREADER'; $setDateField = 'setDateNotified'; $nullifyDateFields = array('setDateUnderway', 'setDateCompleted', 'setDateAcknowledged'); $receiver = $sectionEditorSubmission->getUserBySignoffType($signoffType); if (!isset($receiver)) { return true; } $receiverName = $receiver->getFullName(); $receiverAddress = $receiver->getEmail(); $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getId()); $addParamArray = array('proofreaderName' => $receiverName, 'proofreaderUsername' => $receiver->getUsername(), 'proofreaderPassword' => $receiver->getPassword(), 'editorialContactSignature' => $user->getContactSignature(), 'submissionUrl' => Request::url(null, 'proofreader', 'submission', $articleId)); break; case 'PROOFREAD_ACK': $eventType = ARTICLE_EMAIL_PROOFREAD_THANK_PROOFREADER; $signoffType = 'SIGNOFF_PROOFREADING_PROOFREADER'; $setDateField = 'setDateAcknowledged'; $receiver = $sectionEditorSubmission->getUserBySignoffType($signoffType); if (!isset($receiver)) { return true; } $receiverName = $receiver->getFullName(); $receiverAddress = $receiver->getEmail(); $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getId()); $addParamArray = array('proofreaderName' => $receiverName, 'editorialContactSignature' => $user->getContactSignature()); break; case 'PROOFREAD_COMPLETE': $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_PROOFREADER_COMPLETE; $signoffType = 'SIGNOFF_PROOFREADING_PROOFREADER'; $setDateField = 'setDateCompleted'; $getDateField = 'getDateCompleted'; $setNextDateField = 'setDateNotified'; $nextSignoff = $signoffDao->build('SIGNOFF_PROOFREADING_LAYOUT', ASSOC_TYPE_ARTICLE, $articleId); $editAssignments =& $sectionEditorSubmission->getEditAssignments(); $receiver = null; $editorAdded = false; foreach ($editAssignments as $editAssignment) { if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) { if ($receiver === null) { $receiver =& $userDao->getUser($editAssignment->getEditorId()); } else { $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName(); } $editorAdded = true; } } if (isset($receiver)) { $receiverName = $receiver->getFullName(); $receiverAddress = $receiver->getEmail(); } else { $receiverAddress = $journal->getSetting('contactEmail'); $receiverName = $journal->getSetting('contactName'); } if (!$editorAdded) { $ccs[$journal->getSetting('contactEmail')] = $journal->getSetting('contactName'); } $addParamArray = array('editorialContactName' => $receiverName, 'proofreaderName' => $user->getFullName()); break; case 'PROOFREAD_LAYOUT_REQUEST': $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_LAYOUTEDITOR; $signoffType = 'SIGNOFF_PROOFREADING_LAYOUT'; $setDateField = 'setDateNotified'; $nullifyDateFields = array('setDateUnderway', 'setDateCompleted', 'setDateAcknowledged'); $receiver = $sectionEditorSubmission->getUserBySignoffType($signoffType); if (!isset($receiver)) { return true; } $receiverName = $receiver->getFullName(); $receiverAddress = $receiver->getEmail(); $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getId()); $addParamArray = array('layoutEditorName' => $receiverName, 'layoutEditorUsername' => $receiver->getUsername(), 'layoutEditorPassword' => $receiver->getPassword(), 'editorialContactSignature' => $user->getContactSignature(), 'submissionUrl' => Request::url(null, 'proofreader', 'submission', $articleId)); if (!$actionPath) { // Reset underway/complete/thank dates $signoffReset = $signoffDao->build($signoffType, ASSOC_TYPE_ARTICLE, $articleId); $signoffReset->setDateUnderway(null); $signoffReset->setDateCompleted(null); $signoffReset->setDateAcknowledged(null); } break; case 'PROOFREAD_LAYOUT_ACK': $eventType = ARTICLE_EMAIL_PROOFREAD_THANK_LAYOUTEDITOR; $signoffType = 'SIGNOFF_PROOFREADING_LAYOUT'; $setDateField = 'setDateAcknowledged'; $receiver = $sectionEditorSubmission->getUserBySignoffType($signoffType); if (!isset($receiver)) { return true; } $receiverName = $receiver->getFullName(); $receiverAddress = $receiver->getEmail(); $email->ccAssignedEditingSectionEditors($sectionEditorSubmission->getId()); $addParamArray = array('layoutEditorName' => $receiverName, 'editorialContactSignature' => $user->getContactSignature()); break; case 'PROOFREAD_LAYOUT_COMPLETE': $eventType = ARTICLE_EMAIL_PROOFREAD_NOTIFY_LAYOUTEDITOR_COMPLETE; $signoffType = 'SIGNOFF_PROOFREADING_LAYOUT'; $setDateField = 'setDateCompleted'; $getDateField = 'getDateCompleted'; $editAssignments =& $sectionEditorSubmission->getEditAssignments(); $assignmentIndex = 0; $editorAdded = false; foreach ($editAssignments as $editAssignment) { if ($editAssignment->getIsEditor() || $editAssignment->getCanEdit()) { if ($assignmentIndex++ == 0) { $receiverName = $editAssignment->getEditorFullName(); $receiverAddress = $editAssignment->getEditorEmail(); } else { $ccs[$editAssignment->getEditorEmail()] = $editAssignment->getEditorFullName(); } $editorAdded = true; } } if (!$editorAdded) { $receiverAddress = $journal->getSetting('contactEmail'); $receiverName = $journal->getSetting('contactName'); } $addParamArray = array('editorialContactName' => $receiverName, 'layoutEditorName' => $user->getFullName()); break; default: return true; } $signoff = $signoffDao->build($signoffType, ASSOC_TYPE_ARTICLE, $articleId); if (isset($getDateField)) { $date = $signoff->{$getDateField}(); if (isset($date)) { Request::redirect(null, null, 'submission', $articleId); } } if ($email->isEnabled() && ($actionPath || $email->hasErrors())) { if (!Request::getUserVar('continued')) { $email->addRecipient($receiverAddress, $receiverName); if (isset($ccs)) { foreach ($ccs as $address => $name) { $email->addCc($address, $name); } } $paramArray = array(); if (isset($addParamArray)) { $paramArray += $addParamArray; } $email->assignParams($paramArray); } $email->displayEditForm($actionPath, array('articleId' => $articleId)); return false; } else { HookRegistry::call('ProofreaderAction::proofreadEmail', array(&$email, $mailType)); if ($email->isEnabled()) { $email->send($request); } $signoff->{$setDateField}(Core::getCurrentDate()); if (isset($setNextDateField)) { $nextSignoff->{$setNextDateField}(Core::getCurrentDate()); } if (isset($nullifyDateFields)) { foreach ($nullifyDateFields as $fieldSetter) { $signoff->{$fieldSetter}(null); } } $signoffDao->updateObject($signoff); if (isset($nextSignoff)) { $signoffDao->updateObject($nextSignoff); } return true; } }
/** * Records the reviewer's submission recommendation. * @param $reviewId int * @param $recommendation int * @param $send boolean * @param $request object */ function recordRecommendation(&$reviewerSubmission, $recommendation, $send, $request) { $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); $userDao =& DAORegistry::getDAO('UserDAO'); // Check validity of selected recommendation $reviewerRecommendationOptions =& ReviewAssignment::getReviewerRecommendationOptions(); if (!isset($reviewerRecommendationOptions[$recommendation])) { return true; } $reviewAssignment =& $reviewAssignmentDao->getById($reviewerSubmission->getReviewId()); $reviewer =& $userDao->getUser($reviewAssignment->getReviewerId()); if (!isset($reviewer)) { return true; } // Only record the reviewers recommendation if // no recommendation has previously been submitted. if ($reviewAssignment->getRecommendation() === null || $reviewAssignment->getRecommendation === '') { import('classes.mail.ArticleMailTemplate'); $email = new ArticleMailTemplate($reviewerSubmission, 'REVIEW_COMPLETE'); // Must explicitly set sender because we may be here on an access // key, in which case the user is not technically logged in $email->setReplyTo($reviewer->getEmail(), $reviewer->getFullName()); if (!$email->isEnabled() || $send && !$email->hasErrors()) { HookRegistry::call('ReviewerAction::recordRecommendation', array(&$reviewerSubmission, &$email, $recommendation)); if ($email->isEnabled()) { $email->send($request); } $reviewAssignment->setRecommendation($recommendation); $reviewAssignment->setDateCompleted(Core::getCurrentDate()); $reviewAssignment->stampModified(); $reviewAssignmentDao->updateReviewAssignment($reviewAssignment); // Add log import('classes.article.log.ArticleLog'); ArticleLog::logEvent($request, $reviewerSubmission, ARTICLE_LOG_REVIEW_RECOMMENDATION, 'log.review.reviewRecommendationSet', array('reviewerName' => $reviewer->getFullName(), 'articleId' => $reviewAssignment->getSubmissionId(), 'round' => $reviewAssignment->getRound(), 'reviewId' => $reviewAssignment->getId())); } else { if (!$request->getUserVar('continued')) { $assignedEditors = $email->ccAssignedEditors($reviewerSubmission->getId()); $reviewingSectionEditors = $email->toAssignedReviewingSectionEditors($reviewerSubmission->getId()); if (empty($assignedEditors) && empty($reviewingSectionEditors)) { $journal =& Request::getJournal(); $email->addRecipient($journal->getSetting('contactEmail'), $journal->getSetting('contactName')); $editorialContactName = $journal->getSetting('contactName'); } else { if (!empty($reviewingSectionEditors)) { $editorialContact = array_shift($reviewingSectionEditors); } else { $editorialContact = array_shift($assignedEditors); } $editorialContactName = $editorialContact->getEditorFullName(); } $reviewerRecommendationOptions =& ReviewAssignment::getReviewerRecommendationOptions(); $email->assignParams(array('editorialContactName' => $editorialContactName, 'reviewerName' => $reviewer->getFullName(), 'articleTitle' => strip_tags($reviewerSubmission->getLocalizedTitle()), 'recommendation' => __($reviewerRecommendationOptions[$recommendation]))); } $email->displayEditForm($request->url(null, 'reviewer', 'recordRecommendation'), array('reviewId' => $reviewerSubmission->getReviewId(), 'recommendation' => $recommendation)); return false; } } return true; }