/** * Deletes the review assignment and notifies the reviewer via email * * @param mixed $args * @param $request PKPRequest * @return bool whether or not the review assignment was deleted successfully */ function execute($args, $request) { $submission = $this->getSubmission(); $reviewAssignment = $this->getReviewAssignment(); // Notify the reviewer via email. import('lib.pkp.classes.mail.SubmissionMailTemplate'); $mail = new SubmissionMailTemplate($submission, 'REVIEW_CANCEL', null, null, null, false); if ($mail->isEnabled() && !$this->getData('skipEmail')) { $userDao = DAORegistry::getDAO('UserDAO'); $reviewerId = (int) $this->getData('reviewerId'); $reviewer = $userDao->getById($reviewerId); $mail->addRecipient($reviewer->getEmail(), $reviewer->getFullName()); $mail->setBody($this->getData('personalMessage')); $mail->send($request); } // Delete the review assignment. // NB: EditorAction::clearReview() will check that this review // id is actually attached to the submission so no need for further // validation here. import('lib.pkp.classes.submission.action.EditorAction'); $editorAction = new EditorAction(); return $editorAction->clearReview($request, $submission->getId(), $reviewAssignment->getId()); }
/** * Save review assignment * @param $args array * @param $request PKPRequest */ function execute($args, $request) { $submission = $this->getSubmission(); $context = $request->getContext(); $currentReviewRound = $this->getReviewRound(); $stageId = $currentReviewRound->getStageId(); $reviewDueDate = $this->getData('reviewDueDate'); $responseDueDate = $this->getData('responseDueDate'); // Get reviewer id and validate it. $reviewerId = (int) $this->getData('reviewerId'); if (!$this->_isValidReviewer($context, $submission, $currentReviewRound, $reviewerId)) { fatalError('Invalid reviewer id.'); } $reviewMethod = (int) $this->getData('reviewMethod'); import('lib.pkp.classes.submission.action.EditorAction'); $editorAction = new EditorAction(); $editorAction->addReviewer($request, $submission, $reviewerId, $currentReviewRound, $reviewDueDate, $responseDueDate, $reviewMethod); // Get the reviewAssignment object now that it has been added. $reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /* @var $reviewAssignmentDao ReviewAssignmentDAO */ $reviewAssignment = $reviewAssignmentDao->getReviewAssignment($currentReviewRound->getId(), $reviewerId, $currentReviewRound->getRound(), $stageId); $reviewAssignment->setDateNotified(Core::getCurrentDate()); $reviewAssignment->setCancelled(0); $reviewAssignment->stampModified(); // Ensure that the review form ID is valid, if specified $reviewFormId = (int) $this->getData('reviewFormId'); $reviewFormDao = DAORegistry::getDAO('ReviewFormDAO'); $reviewForm = $reviewFormDao->getById($reviewFormId, Application::getContextAssocType(), $context->getId()); $reviewAssignment->setReviewFormId($reviewForm ? $reviewFormId : null); $reviewAssignmentDao->updateObject($reviewAssignment); // Grant access for this review to all selected files. $submissionFileDao = DAORegistry::getDAO('SubmissionFileDAO'); import('lib.pkp.classes.submission.SubmissionFile'); // File constants $submissionFiles = $submissionFileDao->getLatestRevisionsByReviewRound($currentReviewRound, SUBMISSION_FILE_REVIEW_FILE); $selectedFiles = (array) $this->getData('selectedFiles'); $reviewFilesDao = DAORegistry::getDAO('ReviewFilesDAO'); foreach ($submissionFiles as $submissionFile) { if (in_array($submissionFile->getFileId(), $selectedFiles)) { $reviewFilesDao->grant($reviewAssignment->getId(), $submissionFile->getFileId()); } } // Notify the reviewer via email. import('lib.pkp.classes.mail.SubmissionMailTemplate'); $templateKey = $this->getData('template'); $mail = new SubmissionMailTemplate($submission, $templateKey, null, null, null, false); if ($mail->isEnabled() && !$this->getData('skipEmail')) { $userDao = DAORegistry::getDAO('UserDAO'); /* @var $userDao UserDAO */ $reviewer = $userDao->getById($reviewerId); $user = $request->getUser(); $mail->addRecipient($reviewer->getEmail(), $reviewer->getFullName()); $mail->setBody($this->getData('personalMessage')); $dispatcher = $request->getDispatcher(); // Set the additional arguments for the one click url $reviewUrlArgs = array('submissionId' => $this->getSubmissionId()); if ($context->getSetting('reviewerAccessKeysEnabled')) { import('lib.pkp.classes.security.AccessKeyManager'); $accessKeyManager = new AccessKeyManager(); $expiryDays = $context->getSetting('numWeeksPerReview') + 4 * 7; $accessKey = $accessKeyManager->createKey($context->getId(), $reviewerId, $reviewAssignment->getId(), $expiryDays); $reviewUrlArgs = array_merge($reviewUrlArgs, array('reviewId' => $reviewAssignment->getId(), 'key' => $accessKey)); } // Assign the remaining parameters $mail->assignParams(array('reviewerName' => $reviewer->getFullName(), 'responseDueDate' => $responseDueDate, 'reviewDueDate' => $reviewDueDate, 'reviewerUserName' => $reviewer->getUsername(), 'submissionReviewUrl' => $dispatcher->url($request, ROUTE_PAGE, null, 'reviewer', 'submission', null, $reviewUrlArgs))); $mail->send($request); } return $reviewAssignment; }