/** * Records a director's submission decision. * @param $trackDirectorSubmission object * @param $decision int * @param $stage int */ function recordDecision($trackDirectorSubmission, $decision, $stage) { $editAssignments =& $trackDirectorSubmission->getEditAssignments(); if (empty($editAssignments)) { return; } $trackDirectorSubmissionDao =& DAORegistry::getDAO('TrackDirectorSubmissionDAO'); $user =& Request::getUser(); $directorDecision = array('editDecisionId' => null, 'directorId' => $user->getId(), 'decision' => $decision, 'dateDecided' => date(Core::getCurrentDate())); if (!HookRegistry::call('TrackDirectorAction::recordDecision', array(&$trackDirectorSubmission, $directorDecision))) { if ($decision == SUBMISSION_DIRECTOR_DECISION_DECLINE) { $trackDirectorSubmission->setStatus(STATUS_DECLINED); $trackDirectorSubmission->stampStatusModified(); } else { $trackDirectorSubmission->setStatus(STATUS_QUEUED); $trackDirectorSubmission->stampStatusModified(); } $trackDirectorSubmission->addDecision($directorDecision, $stage); $decisions = TrackDirectorSubmission::getDirectorDecisionOptions(); // Add log import('paper.log.PaperLog'); import('paper.log.PaperEventLogEntry'); Locale::requireComponents(array(LOCALE_COMPONENT_APPLICATION_COMMON, LOCALE_COMPONENT_OCS_DIRECTOR)); PaperLog::logEvent($trackDirectorSubmission->getPaperId(), PAPER_LOG_DIRECTOR_DECISION, LOG_TYPE_DIRECTOR, $user->getId(), 'log.director.decision', array('directorName' => $user->getFullName(), 'paperId' => $trackDirectorSubmission->getPaperId(), 'decision' => Locale::translate($decisions[$decision]), 'round' => $stage == REVIEW_STAGE_ABSTRACT ? 'submission.abstractReview' : 'submission.paperReview')); } if ($decision == SUBMISSION_DIRECTOR_DECISION_ACCEPT || $decision == SUBMISSION_DIRECTOR_DECISION_INVITE) { // completeReview will take care of updating the // submission with the new decision. TrackDirectorAction::completeReview($trackDirectorSubmission); } else { // Insert the new decision. $trackDirectorSubmissionDao->updateTrackDirectorSubmission($trackDirectorSubmission); } }
function submissionReview($args, $request) { $paperId = (int) array_shift($args); $this->validate($request, $paperId, TRACK_DIRECTOR_ACCESS_REVIEW); $conference =& $request->getConference(); $schedConf =& $request->getSchedConf(); $submission =& $this->submission; $round = (int) array_shift($args); $reviewMode = $submission->getReviewMode(); switch ($reviewMode) { case REVIEW_MODE_ABSTRACTS_ALONE: $round = REVIEW_ROUND_ABSTRACT; break; case REVIEW_MODE_BOTH_SIMULTANEOUS: case REVIEW_MODE_PRESENTATIONS_ALONE: $round = REVIEW_ROUND_PRESENTATION; break; case REVIEW_MODE_BOTH_SEQUENTIAL: if ($round != REVIEW_ROUND_ABSTRACT && $round != REVIEW_ROUND_PRESENTATION) { $round = $submission->getCurrentRound(); } break; } $this->setupTemplate($request, true, $paperId); $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO'); $trackDao =& DAORegistry::getDAO('TrackDAO'); $tracks =& $trackDao->getSchedConfTracks($schedConf->getId()); $directorDecisions = $submission->getDecisions($round); $lastDecision = count($directorDecisions) >= 1 ? $directorDecisions[count($directorDecisions) - 1]['decision'] : null; $editAssignments =& $submission->getEditAssignments(); $isCurrent = $round == $submission->getCurrentRound(); $showPeerReviewOptions = $isCurrent && $submission->getReviewFile() != null ? true : false; $allowRecommendation = ($isCurrent || $round == REVIEW_ROUND_ABSTRACT && $reviewMode == REVIEW_MODE_BOTH_SEQUENTIAL) && !empty($editAssignments); $reviewingAbstractOnly = $reviewMode == REVIEW_MODE_BOTH_SEQUENTIAL && $round == REVIEW_ROUND_ABSTRACT || $reviewMode == REVIEW_MODE_ABSTRACTS_ALONE; // Prepare an array to store the 'Notify Reviewer' email logs $notifyReviewerLogs = array(); if ($submission->getReviewAssignments($round)) { foreach ($submission->getReviewAssignments($round) as $reviewAssignment) { $notifyReviewerLogs[$reviewAssignment->getId()] = array(); } } // Parse the list of email logs and populate the array. import('classes.paper.log.PaperLog'); $emailLogEntries =& PaperLog::getEmailLogEntries($paperId); foreach ($emailLogEntries->toArray() as $emailLog) { if ($emailLog->getEventType() == PAPER_EMAIL_REVIEW_NOTIFY_REVIEWER) { if (isset($notifyReviewerLogs[$emailLog->getAssocId()]) && is_array($notifyReviewerLogs[$emailLog->getAssocId()])) { array_push($notifyReviewerLogs[$emailLog->getAssocId()], $emailLog); } } } // get conference published review form titles $reviewFormTitles =& $reviewFormDao->getTitlesByAssocId(ASSOC_TYPE_CONFERENCE, $conference->getId(), 1); $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO'); $reviewFormResponses = array(); $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO'); $reviewFormTitles = array(); if ($submission->getReviewAssignments($round)) { foreach ($submission->getReviewAssignments($round) as $reviewAssignment) { $reviewForm =& $reviewFormDao->getReviewForm($reviewAssignment->getReviewFormId()); if ($reviewForm) { $reviewFormTitles[$reviewForm->getId()] = $reviewForm->getLocalizedTitle(); } unset($reviewForm); $reviewFormResponses[$reviewAssignment->getId()] = $reviewFormResponseDao->reviewFormResponseExists($reviewAssignment->getId()); } } $templateMgr =& TemplateManager::getManager(); $templateMgr->assign_by_ref('submission', $submission); $templateMgr->assign_by_ref('reviewIndexes', $reviewAssignmentDao->getReviewIndexesForRound($paperId, $round)); $templateMgr->assign('round', $round); $templateMgr->assign_by_ref('reviewAssignments', $submission->getReviewAssignments($round)); $templateMgr->assign('reviewFormResponses', $reviewFormResponses); $templateMgr->assign('reviewFormTitles', $reviewFormTitles); $templateMgr->assign_by_ref('notifyReviewerLogs', $notifyReviewerLogs); $templateMgr->assign_by_ref('submissionFile', $submission->getSubmissionFile()); $templateMgr->assign_by_ref('suppFiles', $submission->getSuppFiles()); $templateMgr->assign_by_ref('reviewFile', $submission->getReviewFile()); $templateMgr->assign_by_ref('revisedFile', $submission->getRevisedFile()); $templateMgr->assign_by_ref('directorFile', $submission->getDirectorFile()); $templateMgr->assign('rateReviewerOnQuality', $schedConf->getSetting('rateReviewerOnQuality')); $templateMgr->assign('showPeerReviewOptions', $showPeerReviewOptions); $templateMgr->assign_by_ref('tracks', $tracks->toArray()); $templateMgr->assign_by_ref('directorDecisionOptions', TrackDirectorSubmission::getDirectorDecisionOptions()); $templateMgr->assign_by_ref('lastDecision', $lastDecision); $templateMgr->assign_by_ref('directorDecisions', $directorDecisions); if ($reviewMode != REVIEW_MODE_BOTH_SEQUENTIAL || $round == REVIEW_ROUND_PRESENTATION) { $templateMgr->assign('isFinalReview', true); } import('classes.submission.reviewAssignment.ReviewAssignment'); $templateMgr->assign_by_ref('reviewerRecommendationOptions', ReviewAssignment::getReviewerRecommendationOptions()); $templateMgr->assign_by_ref('reviewerRatingOptions', ReviewAssignment::getReviewerRatingOptions()); $templateMgr->assign('isCurrent', $isCurrent); $templateMgr->assign('allowRecommendation', $allowRecommendation); $templateMgr->assign('reviewingAbstractOnly', $reviewingAbstractOnly); $templateMgr->assign('helpTopicId', 'editorial.trackDirectorsRole.review'); $controlledVocabDao =& DAORegistry::getDAO('ControlledVocabDAO'); $templateMgr->assign('sessionTypes', $controlledVocabDao->enumerateBySymbolic('sessionTypes', ASSOC_TYPE_SCHED_CONF, $schedConf->getId())); $templateMgr->display('trackDirector/submissionReview.tpl'); }
/** * Constructor. */ function DirectorSubmission() { parent::TrackDirectorSubmission(); }