/** * Import all free-text/review form reviews to paste into message * @param $args array * @param $request PKPRequest * @return JSONMessage JSON object */ function importPeerReviews($args, $request) { // Retrieve the authorized submission. $submission = $this->getAuthorizedContextObject(ASSOC_TYPE_SUBMISSION); // Retrieve the current review round. $reviewRound = $this->getAuthorizedContextObject(ASSOC_TYPE_REVIEW_ROUND); // Retrieve peer reviews. $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); $submissionCommentDao = DAORegistry::getDAO('SubmissionCommentDAO'); $reviewFormResponseDao = DAORegistry::getDAO('ReviewFormResponseDAO'); $reviewFormElementDao = DAORegistry::getDAO('ReviewFormElementDAO'); $reviewAssignments = $reviewAssignmentDao->getBySubmissionId($submission->getId(), $reviewRound->getId()); $reviewIndexes = $reviewAssignmentDao->getReviewIndexesForRound($submission->getId(), $reviewRound->getId()); AppLocale::requireComponents(LOCALE_COMPONENT_PKP_SUBMISSION); $body = ''; $textSeparator = '------------------------------------------------------'; foreach ($reviewAssignments as $reviewAssignment) { // If the reviewer has completed the assignment, then import the review. if ($reviewAssignment->getDateCompleted() != null && !$reviewAssignment->getCancelled()) { // Get the comments associated with this review assignment $submissionComments = $submissionCommentDao->getSubmissionComments($submission->getId(), COMMENT_TYPE_PEER_REVIEW, $reviewAssignment->getId()); $body .= "<br><br>{$textSeparator}<br>"; // If it is an open review, show reviewer's name. if ($reviewAssignment->getReviewMethod() == SUBMISSION_REVIEW_METHOD_OPEN) { $body .= $reviewAssignment->getReviewerFullName() . "<br>\n"; } else { $body .= __('submission.comments.importPeerReviews.reviewerLetter', array('reviewerLetter' => PKPString::enumerateAlphabetically($reviewIndexes[$reviewAssignment->getId()]))) . "<br>\n"; } while ($comment = $submissionComments->next()) { // If the comment is viewable by the author, then add the comment. if ($comment->getViewable()) { $body .= PKPString::html2text($comment->getComments()) . "\n\n"; } } $body .= "<br>{$textSeparator}<br><br>"; if ($reviewFormId = $reviewAssignment->getReviewFormId()) { $reviewId = $reviewAssignment->getId(); $reviewFormElements = $reviewFormElementDao->getByReviewFormId($reviewFormId); if (!$submissionComments) { $body .= "{$textSeparator}\n"; $body .= __('submission.comments.importPeerReviews.reviewerLetter', array('reviewerLetter' => PKPString::enumerateAlphabetically($reviewIndexes[$reviewAssignment->getId()]))) . "\n\n"; } while ($reviewFormElement = $reviewFormElements->next()) { $body .= PKPString::html2text($reviewFormElement->getLocalizedQuestion()) . ": \n"; $reviewFormResponse = $reviewFormResponseDao->getReviewFormResponse($reviewId, $reviewFormElement->getId()); if ($reviewFormResponse) { $possibleResponses = $reviewFormElement->getLocalizedPossibleResponses(); if (in_array($reviewFormElement->getElementType(), $reviewFormElement->getMultipleResponsesElementTypes())) { if ($reviewFormElement->getElementType() == REVIEW_FORM_ELEMENT_TYPE_CHECKBOXES) { foreach ($reviewFormResponse->getValue() as $value) { $body .= "\t" . PKPString::html2text($possibleResponses[$value]) . "\n"; } } else { $body .= "\t" . PKPString::html2text($possibleResponses[$reviewFormResponse->getValue()]) . "\n"; } $body .= "\n"; } else { $body .= "\t" . PKPString::html2text($reviewFormResponse->getValue()) . "\n\n"; } } } $body .= "{$textSeparator}\n\n"; } } } if (empty($body)) { return new JSONMessage(false, __('editor.review.noReviews')); } else { return new JSONMessage(true, $body); } }
/** * Sends an email with a personal message and the selected * review attachements to the author. Also marks review attachments * selected by the editor as "viewable" for the author. * @param $submission Submission * @param $emailKey string An email template. * @param $request PKPRequest */ function _sendReviewMailToAuthor($submission, $emailKey, $request) { // Send personal message to author. import('lib.pkp.classes.mail.SubmissionMailTemplate'); $email = new SubmissionMailTemplate($submission, $emailKey, null, null, null, false); $email->setBody($this->getData('personalMessage')); $stageAssignmentDao = DAORegistry::getDAO('StageAssignmentDAO'); $userDao = DAORegistry::getDAO('UserDAO'); $submitterAssignments = $stageAssignmentDao->getBySubmissionAndRoleId($submission->getId(), ROLE_ID_AUTHOR); while ($submitterAssignment = $submitterAssignments->next()) { $submitterUser = $userDao->getById($submitterAssignment->getUserId()); $email->addRecipient($submitterUser->getEmail(), $submitterUser->getFullName()); } DAORegistry::getDAO('SubmissionEmailLogDAO'); // Load constants $email->setEventType(SUBMISSION_EMAIL_EDITOR_NOTIFY_AUTHOR); // Get review round. $reviewRound = $this->getReviewRound(); if (is_a($reviewRound, 'ReviewRound')) { // Retrieve review indexes. $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */ $reviewIndexes = $reviewAssignmentDao->getReviewIndexesForRound($submission->getId(), $reviewRound->getId()); assert(is_array($reviewIndexes)); // Add a review index for review attachments not associated with // a review assignment (i.e. attachments uploaded by the editor). $lastIndex = end($reviewIndexes); $reviewIndexes[-1] = $lastIndex + 1; // Attach the selected reviewer attachments to the email. $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); /* @var $submissionFileDao SubmissionFileDAO */ $selectedAttachments = $this->getData('selectedAttachments'); if (is_array($selectedAttachments)) { foreach ($selectedAttachments as $fileId) { // Retrieve the submission file. $submissionFile = $submissionFileDao->getLatestRevision($fileId); assert(is_a($submissionFile, 'SubmissionFile')); // Check the association information. if ($submissionFile->getAssocType() == ASSOC_TYPE_REVIEW_ASSIGNMENT) { // The review attachment has been uploaded by a reviewer. $reviewAssignmentId = $submissionFile->getAssocId(); assert(is_numeric($reviewAssignmentId)); } else { // The review attachment has been uploaded by the editor. $reviewAssignmentId = -1; } // Identify the corresponding review index. assert(isset($reviewIndexes[$reviewAssignmentId])); $reviewIndex = $reviewIndexes[$reviewAssignmentId]; assert(!is_null($reviewIndex)); // Add the attachment to the email. $email->addAttachment($submissionFile->getFilePath(), PKPString::enumerateAlphabetically($reviewIndex) . '-' . $submissionFile->getOriginalFileName()); // Update submission file to set viewable as true, so author // can view the file on their submission summary page. $submissionFile->setViewable(true); $submissionFileDao->updateObject($submissionFile); } } } // Send the email. if (!$this->getData('skipEmail')) { $router = $request->getRouter(); $dispatcher = $router->getDispatcher(); $context = $request->getContext(); $user = $request->getUser(); $email->assignParams(array('submissionUrl' => $dispatcher->url($request, ROUTE_PAGE, null, 'authorDashboard', 'submission', $submission->getId()), 'contextName' => $context->getLocalizedName(), 'authorName' => $submission->getAuthorString(), 'editorialContactSignature' => $user->getContactSignature())); $email->send($request); } }