function selectReviewer($args, $request) { $paperId = (int) array_shift($args); $reviewerId = (int) array_shift($args); $this->validate($request, $paperId, TRACK_DIRECTOR_ACCESS_REVIEW); $conference =& $request->getConference(); $schedConf =& $request->getSchedConf(); $submission =& $this->submission; Locale::requireComponents(array(LOCALE_COMPONENT_PKP_MANAGER)); // manager.people.noneEnrolled FIXME? $sort = $request->getUserVar('sort'); $sort = isset($sort) ? $sort : 'name'; $sortDirection = $request->getUserVar('sortDirection'); $trackDirectorSubmissionDao =& DAORegistry::getDAO('TrackDirectorSubmissionDAO'); if ($reviewerId) { // Assign reviewer to paper TrackDirectorAction::addReviewer($submission, $reviewerId, $submission->getCurrentRound()); $request->redirect(null, null, null, 'submissionReview', $paperId); // FIXME: Prompt for due date. } else { $this->setupTemplate($request, true, $paperId, 'review'); $trackDirectorSubmissionDao =& DAORegistry::getDAO('TrackDirectorSubmissionDAO'); $searchType = null; $searchMatch = null; $search = $searchQuery = $request->getUserVar('search'); $searchInitial = $request->getUserVar('searchInitial'); if (!empty($search)) { $searchType = $request->getUserVar('searchField'); $searchMatch = $request->getUserVar('searchMatch'); } elseif (!empty($searchInitial)) { $searchInitial = String::strtoupper($searchInitial); $searchType = USER_FIELD_INITIAL; $search = $searchInitial; } $rangeInfo =& Handler::getRangeInfo('reviewers', array($submission->getCurrentRound(), (string) $searchType, (string) $search, (string) $searchMatch)); // Paper ID intentionally omitted while (true) { $reviewers = $trackDirectorSubmissionDao->getReviewersForPaper($schedConf->getId(), $paperId, $submission->getCurrentRound(), $searchType, $search, $searchMatch, $rangeInfo, $sort, $sortDirection); if ($reviewers->isInBounds()) { break; } unset($rangeInfo); $rangeInfo =& $reviewers->getLastPageRangeInfo(); unset($reviewers); } $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO'); $templateMgr =& TemplateManager::getManager(); $templateMgr->assign('searchField', $searchType); $templateMgr->assign('searchMatch', $searchMatch); $templateMgr->assign('search', $searchQuery); $templateMgr->assign('searchInitial', $request->getUserVar('searchInitial')); $templateMgr->assign_by_ref('reviewers', $reviewers); $templateMgr->assign('paperId', $paperId); $templateMgr->assign('reviewerStatistics', $trackDirectorSubmissionDao->getReviewerStatistics($schedConf->getId())); $templateMgr->assign('fieldOptions', array(USER_FIELD_INTERESTS => 'user.interests', USER_FIELD_FIRSTNAME => 'user.firstName', USER_FIELD_LASTNAME => 'user.lastName', USER_FIELD_USERNAME => 'user.username', USER_FIELD_EMAIL => 'user.email')); $templateMgr->assign('completedReviewCounts', $reviewAssignmentDao->getCompletedReviewCounts($schedConf->getId())); $templateMgr->assign('rateReviewerOnQuality', $schedConf->getSetting('rateReviewerOnQuality')); $templateMgr->assign('averageQualityRatings', $reviewAssignmentDao->getAverageQualityRatings($schedConf->getId())); $templateMgr->assign('helpTopicId', 'conference.roles.reviewers'); $templateMgr->assign('alphaList', explode(' ', Locale::translate('common.alphaList'))); $templateMgr->assign('sort', $sort); $templateMgr->assign('sortDirection', $sortDirection); $templateMgr->display('trackDirector/selectReviewer.tpl'); } }
/** * After a decision has been recorded, bumps the paper to the next stage. * If the submission requires completion, it's sent back to the author. * If not, review is complete, and the paper can be released. * @param $schedConf object * @param $trackDirectorSubmission object * @param $decision int */ function completeReview($trackDirectorSubmission) { $schedConf =& Request::getSchedConf(); if ($trackDirectorSubmission->getReviewMode() == REVIEW_MODE_BOTH_SEQUENTIAL) { // two-stage submission; paper required // The submission is incomplete, and needs the author to submit // more materials (potentially for another stage of reviews) if ($trackDirectorSubmission->getCurrentStage() == REVIEW_STAGE_ABSTRACT) { // We've just completed reviewing the abstract. Prepare for presentation // review process. $trackDirectorSubmission->setCurrentStage(REVIEW_STAGE_PRESENTATION); // The paper itself needs to be collected. Flag it so the author // may complete it. $trackDirectorSubmission->setSubmissionProgress(2); // TODO: notify the author the submission must be completed. // Q: should the director be given this option explicitly? // Now, reassign all reviewers that submitted a review for the last // stage of reviews. foreach ($trackDirectorSubmission->getReviewAssignments(REVIEW_STAGE_ABSTRACT) as $reviewAssignment) { if ($reviewAssignment->getRecommendation() !== null && $reviewAssignment->getRecommendation() !== '') { // This reviewer submitted a review; reassign them TrackDirectorAction::addReviewer($trackDirectorSubmission, $reviewAssignment->getReviewerId(), REVIEW_STAGE_PRESENTATION); } } } } $trackDirectorSubmissionDao =& DAORegistry::getDao('TrackDirectorSubmissionDAO'); $trackDirectorSubmissionDao->updateTrackDirectorSubmission($trackDirectorSubmission); $trackDirectorSubmission->stampStatusModified(); // Commit the paper changes $paperDao =& DAORegistry::getDao('PaperDAO'); $paperDao->updatePaper($trackDirectorSubmission); }