/**
  * Save review assignment
  * @param $args array
  * @param $request PKPRequest
  * @see Form::execute()
  */
 function execute($args, &$request)
 {
     $decision = $this->getDecision();
     $monograph =& $this->getMonograph();
     $seriesEditorSubmissionDao =& DAORegistry::getDAO('SeriesEditorSubmissionDAO');
     $seriesEditorSubmission =& $seriesEditorSubmissionDao->getSeriesEditorSubmission($monograph->getId());
     import('classes.submission.seriesEditor.SeriesEditorAction');
     $seriesEditorAction =& new SeriesEditorAction();
     switch ($decision) {
         case SUBMISSION_EDITOR_DECISION_PENDING_REVISIONS:
             // 1. Record the decision
             $seriesEditorAction->recordDecision($seriesEditorSubmission, SUBMISSION_EDITOR_DECISION_DECLINE);
             // 2. select email key
             $emailKey = 'SUBMISSION_UNSUITABLE';
             // 3. Set status of round
             $status = REVIEW_ROUND_STATUS_REVISIONS_REQUESTED;
             break;
         case SUBMISSION_EDITOR_DECISION_RESUBMIT:
             // 1. Record the decision
             $seriesEditorAction->recordDecision($seriesEditorSubmission, SUBMISSION_EDITOR_DECISION_RESUBMIT);
             // 2.  Set status of round
             $status = REVIEW_ROUND_STATUS_RESUBMITTED;
             // 3.  Select email key
             $emailKey = 'EDITOR_DECISION_RESUBMIT';
             break;
         case SUBMISSION_EDITOR_DECISION_DECLINE:
             // 1. Record the decision
             $seriesEditorAction->recordDecision($seriesEditorSubmission, SUBMISSION_EDITOR_DECISION_DECLINE);
             // 2. select email key
             $emailKey = 'SUBMISSION_UNSUITABLE';
             // 3. Set status of round
             $status = REVIEW_ROUND_STATUS_DECLINED;
             break;
         default:
             // only support the three decisions above
             assert(false);
     }
     $reviewRoundDao =& DAORegistry::getDAO('ReviewRoundDAO');
     $currentReviewRound =& $reviewRoundDao->build($monograph->getId(), $seriesEditorSubmission->getCurrentReviewType(), $seriesEditorSubmission->getCurrentRound());
     $currentReviewRound->setStatus($status);
     $reviewRoundDao->updateObject($currentReviewRound);
     // n. Send Personal message to author
     $submitter = $seriesEditorSubmission->getUser();
     import('classes.mail.MonographMailTemplate');
     $email = new MonographMailTemplate($seriesEditorSubmission, $emailKey);
     $email->setBody($this->getData('personalMessage'));
     $email->addRecipient($submitter->getEmail(), $submitter->getFullName());
     $email->setAssoc(MONOGRAPH_EMAIL_EDITOR_NOTIFY_AUTHOR, MONOGRAPH_EMAIL_TYPE_EDITOR, $currentReviewRound->getRound());
     // Attach the selected reviewer attachments
     $submissionFileDao =& DAORegistry::getDAO('SubmissionFileDAO');
     /* @var $submissionFileDao SubmissionFileDAO */
     $selectedAttachments = $this->getData('selectedAttachments') ? $this->getData('selectedAttachments') : array();
     $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
     $reviewIndexes =& $reviewAssignmentDao->getReviewIndexesForRound($seriesEditorSubmission->getId(), $seriesEditorSubmission->getCurrentRound());
     assert(is_array($reviewIndexes));
     if (is_array($selectedAttachments)) {
         foreach ($selectedAttachments as $attachmentId) {
             $monographFile =& $submissionFileDao->getLatestRevision($attachmentId);
             assert(is_a($monographFile, 'MonographFile'));
             $fileName = $monographFile->getOriginalFileName();
             $reviewAssignmentId = $monographFile->getAssocId();
             assert($monographFile->getAssocType == ASSOC_TYPE_REVIEW_ASSIGNMENT);
             assert(is_numeric($reviewAssignmentId));
             $reviewIndex = $reviewIndexes[$reviewAssignmentId];
             assert(!is_null($reviewIndex));
             $email->addAttachment($monographFile->getFilePath(), String::enumerateAlphabetically($reviewIndex) . '-' . $monographFile->getOriginalFileName());
             // Update monograph to set viewable as true, so author can view the file on their submission summary page
             $monographFile->setViewable(true);
             $submissionFileDao->updateObject($monographFile);
         }
     }
     $email->send();
 }
Beispiel #2
0
 /**
  * Assign user to copyedit the selected files
  * @see Form::execute()
  */
 function execute()
 {
     $userDao =& DAORegistry::getDAO('UserDAO');
     /* @var $userDao UserDAO */
     $signoffDao =& DAORegistry::getDAO('SignoffDAO');
     /* @var $signoffDao SignoffDAO */
     $monograph =& $this->getMonograph();
     if ($this->getData('selected-listbuilder-files-galleyfileslistbuilder')) {
         $selectedFiles = $this->getData('selected-listbuilder-files-galleyfileslistbuilder');
     } else {
         $selectedFiles = array();
     }
     // Split the selected user value; index 0 is the user id, index 1 is the user groupID
     $userIdAndGroup = explode('-', $this->getData('userId'));
     // Build galley signoff for each file
     foreach ($selectedFiles as $selectedFileId) {
         $signoff =& $signoffDao->build('SIGNOFF_COPYEDITING', ASSOC_TYPE_MONOGRAPH_FILE, $selectedFileId, $userIdAndGroup[0], WORKFLOW_STAGE_ID_EDITING, $userIdAndGroup[1]);
         /* @var $signoff Signoff */
         // Set the date notified
         $signoff->setDateNotified(Core::getCurrentDate());
         // Set the date response due (stored as date underway in signoffs table)
         $dueDateParts = explode('-', $this->getData('responseDueDate'));
         $signoff->setDateUnderway(date('Y-m-d H:i:s', mktime(0, 0, 0, $dueDateParts[0], $dueDateParts[1], $dueDateParts[2])));
         $signoffDao->updateObject($signoff);
     }
     // Send the message to the user
     import('classes.mail.MonographMailTemplate');
     $email = new MonographMailTemplate($monograph);
     $email->setBody($this->getData('personalMessage'));
     $user =& $userDao->getUser($userIdAndGroup[0]);
     $email->addRecipient($user->getEmail(), $user->getFullName());
     $email->setAssoc(MONOGRAPH_EMAIL_COPYEDIT_NOTIFY_AUTHOR, MONOGRAPH_EMAIL_TYPE_COPYEDIT, MONOGRAPH_EMAIL_COPYEDIT_NOTIFY_AUTHOR);
     $email->send();
 }
Beispiel #3
0
 /**
  * Records whether or not the reviewer accepts the review assignment.
  * @param $user object
  * @param $reviewerSubmission object
  * @param $decline boolean
  * @param $send boolean
  */
 function confirmReview($reviewerSubmission, $decline, $send)
 {
     $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
     $userDao =& DAORegistry::getDAO('UserDAO');
     $reviewId = $reviewerSubmission->getReviewId();
     $reviewAssignment =& $reviewAssignmentDao->getById($reviewId);
     $reviewer =& $userDao->getUser($reviewAssignment->getReviewerId());
     if (!isset($reviewer)) {
         return true;
     }
     // Only confirm the review for the reviewer if
     // he has not previously done so.
     if ($reviewAssignment->getDateConfirmed() == null) {
         import('classes.mail.MonographMailTemplate');
         $email = new MonographMailTemplate($reviewerSubmission, $decline ? 'REVIEW_DECLINE' : 'REVIEW_CONFIRM');
         // 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::confirmReview', array(&$reviewerSubmission, &$email, $decline));
             if ($email->isEnabled()) {
                 $email->setAssoc($decline ? MONOGRAPH_EMAIL_REVIEW_DECLINE : MONOGRAPH_EMAIL_REVIEW_CONFIRM, MONOGRAPH_EMAIL_TYPE_REVIEW, $reviewId);
                 $email->send();
             }
             $reviewAssignment->setDeclined($decline);
             $reviewAssignment->setDateConfirmed(Core::getCurrentDate());
             $reviewAssignment->stampModified();
             $reviewAssignmentDao->updateObject($reviewAssignment);
             // Add log
             import('classes.monograph.log.MonographLog');
             import('classes.monograph.log.MonographEventLogEntry');
             $entry = new MonographEventLogEntry();
             $entry->setMonographId($reviewAssignment->getSubmissionId());
             $entry->setUserId($reviewer->getId());
             $entry->setDateLogged(Core::getCurrentDate());
             $entry->setEventType($decline ? MONOGRAPH_LOG_REVIEW_DECLINE : MONOGRAPH_LOG_REVIEW_ACCEPT);
             $entry->setLogMessage($decline ? 'log.review.reviewDeclined' : 'log.review.reviewAccepted', array('reviewerName' => $reviewer->getFullName(), 'monographId' => $reviewAssignment->getSubmissionId(), 'round' => $reviewAssignment->getRound()));
             $entry->setAssocType(MONOGRAPH_LOG_TYPE_REVIEW);
             $entry->setAssocId($reviewAssignment->getId());
             MonographLog::logEventEntry($reviewAssignment->getSubmissionId(), $entry);
             return true;
         } else {
             if (!Request::getUserVar('continued')) {
                 $assignedEditors = $email->ccAssignedEditors($reviewerSubmission->getId());
                 $reviewingSeriesEditors = $email->toAssignedReviewingSeriesEditors($reviewerSubmission->getId());
                 if (empty($assignedEditors) && empty($reviewingSeriesEditors)) {
                     $press =& Request::getPress();
                     $email->addRecipient($press->getSetting('contactEmail'), $press->getSetting('contactName'));
                     $editorialContactName = $press->getSetting('contactName');
                 } else {
                     if (!empty($reviewingSeriesEditors)) {
                         $editorialContact = array_shift($reviewingSeriesEditors);
                     } else {
                         $editorialContact = array_shift($assignedEditors);
                     }
                     $editorialContactName = $editorialContact->getEditorFullName();
                 }
                 // Format the review due date
                 $reviewDueDate = strtotime($reviewAssignment->getDateDue());
                 $dateFormatShort = Config::getVar('general', 'date_format_short');
                 if ($reviewDueDate == -1) {
                     $reviewDueDate = $dateFormatShort;
                 } else {
                     $reviewDueDate = strftime($dateFormatShort, $reviewDueDate);
                 }
                 $email->assignParams(array('editorialContactName' => $editorialContactName, 'reviewerName' => $reviewer->getFullName(), 'reviewDueDate' => $reviewDueDate));
             }
             $paramArray = array('reviewId' => $reviewId);
             if ($decline) {
                 $paramArray['declineReview'] = 1;
             }
             $email->displayEditForm(Request::url(null, 'reviewer', 'confirmReview'), $paramArray);
             return false;
         }
     }
     return true;
 }