function submissionReview($args)
 {
     $articleId = isset($args[0]) ? (int) $args[0] : 0;
     list($journal, $submission) = SubmissionEditHandler::validate($articleId, SECTION_EDITOR_ACCESS_REVIEW);
     parent::setupTemplate(true, $articleId);
     $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
     $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
     $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO');
     // Setting the round.
     $round = isset($args[1]) ? $args[1] : $submission->getCurrentRound();
     $sectionDao =& DAORegistry::getDAO('SectionDAO');
     $sections =& $sectionDao->getJournalSections($journal->getJournalId());
     $showPeerReviewOptions = $round == $submission->getCurrentRound() && $submission->getReviewFile() != null ? true : false;
     $editorDecisions = $submission->getDecisions($round);
     $lastDecision = count($editorDecisions) >= 1 ? $editorDecisions[count($editorDecisions) - 1]['decision'] : null;
     $editAssignments =& $submission->getEditAssignments();
     $allowRecommendation = $submission->getCurrentRound() == $round && $submission->getReviewFileId() != null && !empty($editAssignments);
     $allowResubmit = $lastDecision == SUBMISSION_EDITOR_DECISION_RESUBMIT && $sectionEditorSubmissionDao->getMaxReviewRound($articleId) == $round ? true : false;
     $allowCopyedit = $lastDecision == SUBMISSION_EDITOR_DECISION_ACCEPT && $submission->getCopyeditFileId() == null ? true : false;
     // Prepare an array to store the 'Notify Reviewer' email logs
     $notifyReviewerLogs = array();
     foreach ($submission->getReviewAssignments($round) as $reviewAssignment) {
         $notifyReviewerLogs[$reviewAssignment->getReviewId()] = array();
     }
     // Parse the list of email logs and populate the array.
     import('article.log.ArticleLog');
     $emailLogEntries =& ArticleLog::getEmailLogEntries($articleId);
     foreach ($emailLogEntries->toArray() as $emailLog) {
         if ($emailLog->getEventType() == ARTICLE_EMAIL_REVIEW_NOTIFY_REVIEWER) {
             if (isset($notifyReviewerLogs[$emailLog->getAssocId()]) && is_array($notifyReviewerLogs[$emailLog->getAssocId()])) {
                 array_push($notifyReviewerLogs[$emailLog->getAssocId()], $emailLog);
             }
         }
     }
     // get journal published review form titles
     $reviewFormTitles =& $reviewFormDao->getJournalReviewFormTitles($journal->getJournalId(), 1);
     $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO');
     $reviewFormResponses = array();
     $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO');
     $reviewFormTitles = array();
     foreach ($submission->getReviewAssignments($round) as $reviewAssignment) {
         $reviewForm =& $reviewFormDao->getReviewForm($reviewAssignment->getReviewFormId());
         if ($reviewForm) {
             $reviewFormTitles[$reviewForm->getReviewFormId()] = $reviewForm->getReviewFormTitle();
         }
         unset($reviewForm);
         $reviewFormResponses[$reviewAssignment->getReviewId()] = $reviewFormResponseDao->reviewFormResponseExists($reviewAssignment->getReviewId());
     }
     $templateMgr =& TemplateManager::getManager();
     $templateMgr->assign_by_ref('submission', $submission);
     $templateMgr->assign_by_ref('reviewIndexes', $reviewAssignmentDao->getReviewIndexesForRound($articleId, $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('copyeditFile', $submission->getCopyeditFile());
     $templateMgr->assign_by_ref('revisedFile', $submission->getRevisedFile());
     $templateMgr->assign_by_ref('editorFile', $submission->getEditorFile());
     $templateMgr->assign('rateReviewerOnQuality', $journal->getSetting('rateReviewerOnQuality'));
     $templateMgr->assign('showPeerReviewOptions', $showPeerReviewOptions);
     $templateMgr->assign_by_ref('sections', $sections->toArray());
     $templateMgr->assign('editorDecisionOptions', array('' => 'common.chooseOne', SUBMISSION_EDITOR_DECISION_ACCEPT => 'editor.article.decision.accept', SUBMISSION_EDITOR_DECISION_PENDING_REVISIONS => 'editor.article.decision.pendingRevisions', SUBMISSION_EDITOR_DECISION_RESUBMIT => 'editor.article.decision.resubmit', SUBMISSION_EDITOR_DECISION_DECLINE => 'editor.article.decision.decline'));
     $templateMgr->assign_by_ref('lastDecision', $lastDecision);
     import('submission.reviewAssignment.ReviewAssignment');
     $templateMgr->assign_by_ref('reviewerRecommendationOptions', ReviewAssignment::getReviewerRecommendationOptions());
     $templateMgr->assign_by_ref('reviewerRatingOptions', ReviewAssignment::getReviewerRatingOptions());
     $templateMgr->assign('allowRecommendation', $allowRecommendation);
     $templateMgr->assign('allowResubmit', $allowResubmit);
     $templateMgr->assign('allowCopyedit', $allowCopyedit);
     $templateMgr->assign('helpTopicId', 'editorial.sectionEditorsRole.review');
     $templateMgr->display('sectionEditor/submissionReview.tpl');
 }
 /**
  * Return the object representing the next row.
  * @return object
  */
 function &next()
 {
     $row =& parent::next();
     if ($row == null) {
         return $row;
     }
     $ret = array('articleId' => $row['article_id']);
     $ret['dateSubmitted'] = $this->journalStatisticsDao->dateFromDB($row['date_submitted']);
     $article =& $this->articleDao->getArticle($row['article_id']);
     $ret['title'] = $article->getArticleTitle();
     $section =& $this->getSection($row['section_id']);
     $ret['section'] = $section->getSectionTitle();
     // Author Names & Affiliations
     $maxAuthors = $this->getMaxAuthors();
     $ret['authors'] = $maxAuthors == 0 ? array() : array_fill(0, $maxAuthors, '');
     $ret['affiliations'] = $maxAuthors == 0 ? array() : array_fill(0, $maxAuthors, '');
     $ret['countries'] = $maxAuthors == 0 ? array() : array_fill(0, $maxAuthors, '');
     $authors =& $this->authorDao->getAuthorsByArticle($row['article_id']);
     $authorIndex = 0;
     foreach ($authors as $author) {
         $ret['authors'][$authorIndex] = $author->getFullName();
         $ret['affiliations'][$authorIndex] = $author->getAffiliation();
         $country = $author->getCountry();
         if (!empty($country)) {
             $ret['countries'][$authorIndex] = $this->countryDao->getCountry($country);
         }
         $authorIndex++;
     }
     if ($this->type === REPORT_TYPE_EDITOR) {
         $user = null;
         if ($row['editor_id']) {
             $user =& $this->userDao->getUser($row['editor_id']);
         }
         $ret['editor'] = $user ? $user->getFullName() : '';
     } else {
         $editAssignments =& $this->editAssignmentDao->getEditAssignmentsByArticleId($row['article_id']);
         $maxEditors = $this->getMaxEditors();
         $ret['editors'] = $maxEditors == 0 ? array() : array_fill(0, $maxEditors, '');
         $editorIndex = 0;
         while ($editAssignment =& $editAssignments->next()) {
             $ret['editors'][$editorIndex++] = $editAssignment->getEditorFullName();
         }
     }
     // Reviewer Names
     $ratingOptions =& ReviewAssignment::getReviewerRatingOptions();
     if ($this->type === REPORT_TYPE_REVIEWER) {
         $user = null;
         if ($row['reviewer_id']) {
             $user =& $this->userDao->getUser($row['reviewer_id']);
         }
         $ret['reviewer'] = $user ? $user->getFullName() : '';
         if ($row['quality']) {
             $ret['score'] = Locale::translate($ratingOptions[$row['quality']]);
         } else {
             $ret['score'] = '';
         }
         $ret['affiliation'] = $user ? $user->getAffiliation() : '';
     } else {
         $maxReviewers = $this->getMaxReviewers();
         $ret['reviewers'] = $maxReviewers == 0 ? array() : array_fill(0, $maxReviewers, '');
         $ret['scores'] = $maxReviewers == 0 ? array() : array_fill(0, $maxReviewers, '');
         $ret['recommendations'] = $maxReviewers == 0 ? array() : array_fill(0, $maxReviewers, '');
         $reviewAssignments =& $this->reviewAssignmentDao->getReviewAssignmentsByArticleId($row['article_id']);
         $reviewerIndex = 0;
         foreach ($reviewAssignments as $reviewAssignment) {
             $reviewerId = $reviewAssignment->getReviewerId();
             $ret['reviewers'][$reviewerIndex] = $reviewAssignment->getReviewerFullName();
             $rating = $reviewAssignment->getQuality();
             if ($rating != '') {
                 $ret['scores'][$reviewerIndex] = Locale::translate($ratingOptions[$rating]);
             }
             $recommendation = $reviewAssignment->getRecommendation();
             if ($recommendation !== '' && $recommendation !== null) {
                 $recommendationOptions =& $reviewAssignment->getReviewerRecommendationOptions();
                 $ret['recommendations'][$reviewerIndex] = Locale::translate($recommendationOptions[$recommendation]);
             }
             $reviewerIndex++;
         }
     }
     // Fetch the last editorial decision for this article.
     $editorDecisions = $this->authorSubmissionDao->getEditorDecisions($row['article_id']);
     $lastDecision = array_pop($editorDecisions);
     if ($lastDecision) {
         import('submission.sectionEditor.SectionEditorSubmission');
         $decisionOptions =& SectionEditorSubmission::getEditorDecisionOptions();
         $ret['decision'] = Locale::translate($decisionOptions[$lastDecision['decision']]);
         $ret['dateDecided'] = $lastDecision['dateDecided'];
         $decisionTime = strtotime($lastDecision['dateDecided']);
         $submitTime = strtotime($ret['dateSubmitted']);
         if ($decisionTime === false || $decisionTime === -1 || $submitTime === false || $submitTime === -1) {
             $ret['daysToDecision'] = '';
         } else {
             $ret['daysToDecision'] = round(($decisionTime - $submitTime) / 3600 / 24);
         }
     } else {
         $ret['decision'] = '';
         $ret['daysToDecision'] = '';
         $ret['dateDecided'] = '';
     }
     $ret['daysToPublication'] = '';
     if ($row['pub_id']) {
         $submitTime = strtotime($ret['dateSubmitted']);
         $publishTime = strtotime($this->journalStatisticsDao->dateFromDB($row['date_published']));
         if ($publishTime > $submitTime) {
             // Imported documents can be published before
             // they were submitted -- in this case, ignore
             // this metric (as opposed to displaying
             // negative numbers).
             $ret['daysToPublication'] = round(($publishTime - $submitTime) / 3600 / 24);
         }
     }
     $ret['status'] = $row['status'];
     return $ret;
 }
 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');
 }
 function submissionReview($args)
 {
     $articleId = isset($args[0]) ? (int) $args[0] : 0;
     $this->validate($articleId, SECTION_EDITOR_ACCESS_REVIEW);
     $journal =& Request::getJournal();
     $submission =& $this->submission;
     $this->setupTemplate(true, $articleId);
     Locale::requireComponents(array(LOCALE_COMPONENT_OJS_MANAGER));
     $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
     $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
     $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO');
     $CBPPlatformDao =& DAORegistry::getDAO('CBPPlatformDAO');
     $userDao =& DAORegistry::getDAO('UserDAO');
     $templateMgr =& TemplateManager::getManager();
     //%CBP% Display is an article has been marked as creatively complete or not
     $templateMgr->assign_by_ref('creativelyComplete', $CBPPlatformDao->getArticleCreativelyComplete($articleId));
     $templateMgr->assign_by_ref('editorAttention', $CBPPlatformDao->getAuthorRequestEditorAttention($articleId));
     //has an author requested editor attention?
     $workshop = $CBPPlatformDao->getWorkshop($journal->getJournalId());
     if ($workshop != "structured") {
         //%CBP% Get reviewer comments and display to author
         $articleFileDao =& DAORegistry::getDAO('ArticleFileDAO');
         $reviewerComments = $CBPPlatformDao->getReviewerComments($articleId, null, null, 0);
         foreach ($reviewerComments as &$reviewRound) {
             foreach ($reviewRound as &$reviewerComment) {
                 if ($reviewerComment['reviewer_file_id']) {
                     $reviewerComment['articleFile'] = $articleFileDao->getArticleFile($reviewerComment['reviewer_file_id']);
                 }
             }
         }
         $templateMgr->assign_by_ref('reviewerComments', $reviewerComments);
         if ($workshop == "workshop") {
             $templateMgr->assign_by_ref('workshop', $workshop = "workshop");
         } else {
             $templateMgr->assign_by_ref('workshop', $workshop = 1);
         }
     }
     // Setting the round.
     $round = isset($args[1]) ? $args[1] : $submission->getCurrentRound();
     $sectionDao =& DAORegistry::getDAO('SectionDAO');
     $sections =& $sectionDao->getJournalSections($journal->getId());
     $showPeerReviewOptions = $round == $submission->getCurrentRound() && $submission->getReviewFile() != null ? true : false;
     $editorDecisions = $submission->getDecisions($round);
     $lastDecision = count($editorDecisions) >= 1 ? $editorDecisions[count($editorDecisions) - 1]['decision'] : null;
     $lastDecisionMaker = count($editorDecisions) >= 1 ? $editorDecisions[count($editorDecisions) - 1]['editorId'] : null;
     $decisionMaker = $userDao->getUser($lastDecisionMaker);
     if ($decisionMaker) {
         $lastDecisionMaker = $decisionMaker->getFullName();
     }
     $editAssignments =& $submission->getEditAssignments();
     $allowRecommendation = $submission->getCurrentRound() == $round && $submission->getReviewFileId() != null && !empty($editAssignments);
     //%CBP% fixing bug for workshops, which was enabling decisions to be made after the intial decision was made
     if ($lastDecision == SUBMISSION_EDITOR_DECISION_ACCEPT) {
         //$allowRecommendation = false;
     }
     $allowResubmit = $lastDecision == SUBMISSION_EDITOR_DECISION_RESUBMIT && $sectionEditorSubmissionDao->getMaxReviewRound($articleId) == $round ? true : false;
     $allowCopyedit = $lastDecision == SUBMISSION_EDITOR_DECISION_ACCEPT && $submission->getFileBySignoffType('SIGNOFF_COPYEDITING_INITIAL', true) == null ? true : false;
     // Prepare an array to store the 'Notify Reviewer' email logs
     $notifyReviewerLogs = array();
     foreach ($submission->getReviewAssignments($round) as $reviewAssignment) {
         $notifyReviewerLogs[$reviewAssignment->getId()] = array();
     }
     // Parse the list of email logs and populate the array.
     import('classes.article.log.ArticleLog');
     $emailLogEntries =& ArticleLog::getEmailLogEntries($articleId);
     foreach ($emailLogEntries->toArray() as $emailLog) {
         if ($emailLog->getEventType() == ARTICLE_EMAIL_REVIEW_NOTIFY_REVIEWER) {
             if (isset($notifyReviewerLogs[$emailLog->getAssocId()]) && is_array($notifyReviewerLogs[$emailLog->getAssocId()])) {
                 array_push($notifyReviewerLogs[$emailLog->getAssocId()], $emailLog);
             }
         }
     }
     // get journal published review form titles
     $reviewFormTitles =& $reviewFormDao->getTitlesByAssocId(ASSOC_TYPE_JOURNAL, $journal->getId(), 1);
     $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO');
     $reviewFormResponses = array();
     $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO');
     $reviewFormTitles = array();
     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->assign_by_ref('submission', $submission);
     $templateMgr->assign_by_ref('reviewIndexes', $reviewAssignmentDao->getReviewIndexesForRound($articleId, $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('copyeditFile', $submission->getFileBySignoffType('SIGNOFF_COPYEDITING_INITIAL'));
     $templateMgr->assign_by_ref('revisedFile', $submission->getRevisedFile());
     $templateMgr->assign_by_ref('editorFile', $submission->getEditorFile());
     $templateMgr->assign('rateReviewerOnQuality', $journal->getSetting('rateReviewerOnQuality'));
     $templateMgr->assign('showPeerReviewOptions', $showPeerReviewOptions);
     $templateMgr->assign_by_ref('sections', $sections->toArray());
     $templateMgr->assign('editorDecisionOptions', SectionEditorSubmission::getEditorDecisionOptions());
     $templateMgr->assign_by_ref('lastDecision', $lastDecision);
     $templateMgr->assign_by_ref('lastDecisionMaker', $lastDecisionMaker);
     import('classes.submission.reviewAssignment.ReviewAssignment');
     $templateMgr->assign_by_ref('reviewerRecommendationOptions', ReviewAssignment::getReviewerRecommendationOptions());
     $templateMgr->assign_by_ref('reviewerRatingOptions', ReviewAssignment::getReviewerRatingOptions());
     $templateMgr->assign('allowRecommendation', $allowRecommendation);
     $templateMgr->assign('allowResubmit', $allowResubmit);
     $templateMgr->assign('allowCopyedit', $allowCopyedit);
     $templateMgr->assign('helpTopicId', 'editorial.sectionEditorsRole.review');
     $templateMgr->display('sectionEditor/submissionReview.tpl');
 }
 /**
  * View the submission review page.
  * @param $args array
  * @param $request PKPRequest
  */
 function submissionReview($args, &$request)
 {
     $articleId = isset($args[0]) ? (int) $args[0] : 0;
     $this->validate($articleId, SECTION_EDITOR_ACCESS_REVIEW);
     $journal =& Request::getJournal();
     $submission =& $this->submission;
     $this->setupTemplate(true, $articleId);
     AppLocale::requireComponents(LOCALE_COMPONENT_OJS_MANAGER);
     $sectionEditorSubmissionDao =& DAORegistry::getDAO('SectionEditorSubmissionDAO');
     $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
     // Setting the round.
     $round = isset($args[1]) ? $args[1] : $submission->getCurrentRound();
     $sectionDao =& DAORegistry::getDAO('SectionDAO');
     $sections =& $sectionDao->getJournalSections($journal->getId());
     $showPeerReviewOptions = $round == $submission->getCurrentRound() && $submission->getReviewFile() != null ? true : false;
     $editorDecisions = $submission->getDecisions($round);
     $lastDecision = count($editorDecisions) >= 1 ? $editorDecisions[count($editorDecisions) - 1]['decision'] : null;
     $editAssignments =& $submission->getEditAssignments();
     $allowRecommendation = $submission->getCurrentRound() == $round && $submission->getReviewFileId() != null && !empty($editAssignments);
     $allowResubmit = $lastDecision == SUBMISSION_EDITOR_DECISION_RESUBMIT && $sectionEditorSubmissionDao->getMaxReviewRound($articleId) == $round ? true : false;
     $allowCopyedit = $lastDecision == SUBMISSION_EDITOR_DECISION_ACCEPT && $submission->getFileBySignoffType('SIGNOFF_COPYEDITING_INITIAL', true) == null ? true : false;
     // Prepare an array to store the 'Notify Reviewer' email logs
     $notifyReviewerLogs = array();
     foreach ($submission->getReviewAssignments($round) as $reviewAssignment) {
         $notifyReviewerLogs[$reviewAssignment->getId()] = array();
     }
     // Parse the list of email logs and populate the array.
     $emailLogDao =& DAORegistry::getDAO('ArticleEmailLogDAO');
     $emailLogEntries =& $emailLogDao->getByAssoc(ASSOC_TYPE_ARTICLE, $articleId);
     foreach ($emailLogEntries->toArray() as $emailLog) {
         if ($emailLog->getEventType() == ARTICLE_EMAIL_REVIEW_NOTIFY_REVIEWER) {
             if (isset($notifyReviewerLogs[$emailLog->getAssocId()]) && is_array($notifyReviewerLogs[$emailLog->getAssocId()])) {
                 array_push($notifyReviewerLogs[$emailLog->getAssocId()], $emailLog);
             }
         }
     }
     $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO');
     $reviewFormResponses = array();
     $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO');
     $reviewFormTitles = array();
     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($articleId, $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('copyeditFile', $submission->getFileBySignoffType('SIGNOFF_COPYEDITING_INITIAL'));
     $templateMgr->assign_by_ref('revisedFile', $submission->getRevisedFile());
     $templateMgr->assign_by_ref('editorFile', $submission->getEditorFile());
     $templateMgr->assign('rateReviewerOnQuality', $journal->getSetting('rateReviewerOnQuality'));
     $templateMgr->assign('showPeerReviewOptions', $showPeerReviewOptions);
     $templateMgr->assign_by_ref('sections', $sections->toArray());
     $templateMgr->assign('editorDecisionOptions', SectionEditorSubmission::getEditorDecisionOptions());
     $templateMgr->assign_by_ref('lastDecision', $lastDecision);
     import('classes.submission.reviewAssignment.ReviewAssignment');
     $templateMgr->assign_by_ref('reviewerRecommendationOptions', ReviewAssignment::getReviewerRecommendationOptions());
     $templateMgr->assign_by_ref('reviewerRatingOptions', ReviewAssignment::getReviewerRatingOptions());
     $templateMgr->assign('allowRecommendation', $allowRecommendation);
     $templateMgr->assign('allowResubmit', $allowResubmit);
     $templateMgr->assign('allowCopyedit', $allowCopyedit);
     $templateMgr->assign('helpTopicId', 'editorial.sectionEditorsRole.review');
     $templateMgr->display('sectionEditor/submissionReview.tpl');
 }
 function submissionReview($args)
 {
     $articleId = isset($args[0]) ? (int) $args[0] : 0;
     $this->validate($articleId, SECTION_EDITOR_ACCESS_REVIEW);
     $journal =& Request::getJournal();
     $submission =& $this->submission;
     $this->setupTemplate(1, $articleId);
     $user =& Request::getUser();
     Locale::requireComponents(array(LOCALE_COMPONENT_OJS_MANAGER));
     $reviewAssignmentDao =& DAORegistry::getDAO('ReviewAssignmentDAO');
     $reviewFormDao =& DAORegistry::getDAO('ReviewFormDAO');
     $sectionDao =& DAORegistry::getDAO('SectionDAO');
     $sections =& $sectionDao->getJournalSections($journal->getId());
     $sectionDecisionDao =& DAORegistry::getDAO("SectionDecisionDAO");
     $lastDecision = $sectionDecisionDao->getLastSectionDecision($articleId);
     $reviewAssignments =& $lastDecision->getReviewAssignments();
     $articleMoreRecent = strtotime($submission->getLastModified()) > strtotime($lastDecision->getDateDecided()) ? true : false;
     $approvalNoticeDao =& DAORegistry::getDAO("ApprovalNoticeDAO");
     $templates =& $approvalNoticeDao->getApprovalNoticesByCommitteeAndTypeId($lastDecision->getSectionId(), $lastDecision->getReviewType());
     // Prepare an array to store the 'Notify Reviewer' email logs
     $notifyReviewerLogs = array();
     foreach ($reviewAssignments as $reviewAssignment) {
         $notifyReviewerLogs[$reviewAssignment->getId()] = array();
     }
     // Parse the list of email logs and populate the array.
     import('classes.article.log.ArticleLog');
     $emailLogEntries =& ArticleLog::getEmailLogEntries($articleId);
     foreach ($emailLogEntries->toArray() as $emailLog) {
         if ($emailLog->getEventType() == ARTICLE_EMAIL_REVIEW_NOTIFY_REVIEWER) {
             if (isset($notifyReviewerLogs[$emailLog->getAssocId()]) && is_array($notifyReviewerLogs[$emailLog->getAssocId()])) {
                 array_push($notifyReviewerLogs[$emailLog->getAssocId()], $emailLog);
             }
         }
     }
     $reviewFormResponseDao =& DAORegistry::getDAO('ReviewFormResponseDAO');
     $reviewFormResponses = array();
     $reviewFormTitles = array();
     foreach ($reviewAssignments as $reviewAssignment) {
         $reviewForm =& $reviewFormDao->getReviewForm($reviewAssignment->getReviewFormId());
         if ($reviewForm) {
             $reviewFormTitles[$reviewForm->getId()] = $reviewForm->getLocalizedTitle();
         }
         unset($reviewForm);
         $reviewFormResponses[$reviewAssignment->getId()] = $reviewFormResponseDao->reviewFormResponseExists($reviewAssignment->getId());
     }
     $ercReviewersDao =& DAORegistry::getDAO('ErcReviewersDAO');
     $ercReviewers =& $ercReviewersDao->getReviewersBySectionId($journal->getId(), $lastDecision->getSectionId());
     $templateMgr =& TemplateManager::getManager();
     $templateMgr->assign('articleId', $submission->getArticleId());
     $templateMgr->assign('scientificTitle', $submission->getScientificTitle());
     $templateMgr->assign('submitter', $submission->getUser());
     $templateMgr->assign('commentsToEditor', $submission->getCommentsToEditor());
     $templateMgr->assign('dateSubmitted', $submission->getDateSubmitted());
     $templateMgr->assign('proposalStatus', $submission->getSubmissionStatus());
     $templateMgr->assign('withdrawComments', $submission->getWithdrawComments('en_US'));
     $templateMgr->assign('withdrawReason', $submission->getWithdrawReason('en_US'));
     $templateMgr->assign_by_ref('reviewers', $ercReviewers);
     $templateMgr->assign('proposalId', $submission->getProposalId());
     $templateMgr->assign_by_ref('reviewAssignmentCount', count($reviewAssignments));
     $templateMgr->assign_by_ref('reviewIndexes', $reviewAssignmentDao->getReviewIndexesForDecision($lastDecision->getId()));
     $templateMgr->assign_by_ref('reviewAssignments', $reviewAssignments);
     $templateMgr->assign('reviewFormResponses', $reviewFormResponses);
     $templateMgr->assign('reviewFormTitles', $reviewFormTitles);
     $templateMgr->assign('sectionId', $submission->getSectionId());
     $templateMgr->assign('templates', $templates);
     $templateMgr->assign_by_ref('notifyReviewerLogs', $notifyReviewerLogs);
     $templateMgr->assign_by_ref('submissionFile', $submission->getSubmissionFile());
     $templateMgr->assign_by_ref('suppFiles', $submission->getSuppFiles());
     $templateMgr->assign_by_ref('reportFiles', $submission->getReportFiles());
     $templateMgr->assign_by_ref('saeFiles', $submission->getSAEFiles());
     $templateMgr->assign_by_ref('reviewFile', $submission->getReviewFile());
     $templateMgr->assign_by_ref('previousFiles', $submission->getPreviousFiles());
     $templateMgr->assign_by_ref('copyeditFile', $submission->getFileBySignoffType('SIGNOFF_COPYEDITING_INITIAL'));
     $templateMgr->assign_by_ref('revisedFile', $submission->getRevisedFile());
     $templateMgr->assign_by_ref('editorFile', $submission->getEditorFile());
     $templateMgr->assign_by_ref('sectionDecisions', $submission->getDecisions());
     $templateMgr->assign('rateReviewerOnQuality', $journal->getSetting('rateReviewerOnQuality'));
     $templateMgr->assign_by_ref('sections', $sections->toArray());
     $sectionDecisions = SectionEditorSubmission::getEditorDecisionOptions();
     $templateMgr->assign('sectionDecisionOptions', $sectionDecisions);
     import('classes.submission.common.Action');
     unset($sectionDecisions[SUBMISSION_SECTION_DECISION_DECLINED]);
     $templateMgr->assign('sectionDecisionOptionsWithoutDeclined', $sectionDecisions);
     $templateMgr->assign('initialReviewOptions', SectionEditorSubmission::getInitialReviewOptions());
     $reviewOptions = SectionEditorSubmission::getReviewOptions();
     $templateMgr->assign('reviewOptions', $reviewOptions);
     unset($reviewOptions[SUBMISSION_SECTION_DECISION_EXEMPTED]);
     $templateMgr->assign('reviewOptionsWithoutExempted', $reviewOptions);
     $templateMgr->assign('continuingReviewOptions', SectionEditorSubmission::getContinuingReviewOptions());
     $templateMgr->assign('articleMoreRecent', $articleMoreRecent);
     $templateMgr->assign('lastDecision', $lastDecision);
     import('classes.submission.reviewAssignment.ReviewAssignment');
     $templateMgr->assign_by_ref('reviewerRecommendationOptions', ReviewAssignment::getReviewerRecommendationOptions());
     $templateMgr->assign_by_ref('reviewerRatingOptions', ReviewAssignment::getReviewerRatingOptions());
     // Set up required Payment Related Information
     import('classes.payment.ojs.OJSPaymentManager');
     $paymentManager =& OJSPaymentManager::getManager();
     if ($paymentManager->submissionEnabled() || $paymentManager->fastTrackEnabled() || $paymentManager->publicationEnabled()) {
         $templateMgr->assign('authorFees', true);
         $completedPaymentDAO =& DAORegistry::getDAO('OJSCompletedPaymentDAO');
         if ($paymentManager->submissionEnabled()) {
             $templateMgr->assign_by_ref('submissionPayment', $completedPaymentDAO->getSubmissionCompletedPayment($journal->getId(), $articleId));
         }
         if ($paymentManager->fastTrackEnabled()) {
             $templateMgr->assign_by_ref('fastTrackPayment', $completedPaymentDAO->getFastTrackCompletedPayment($journal->getId(), $articleId));
         }
         if ($paymentManager->publicationEnabled()) {
             $templateMgr->assign_by_ref('publicationPayment', $completedPaymentDAO->getPublicationCompletedPayment($journal->getId(), $articleId));
         }
     }
     $templateMgr->assign_by_ref('userId', $user->getId());
     $templateMgr->assign('helpTopicId', 'editorial.sectionEditorsRole.review');
     $templateMgr->display('sectionEditor/submissionReview.tpl');
 }