getRequest(); $reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO'); /** @var ReviewRoundDAO $reviewRoundDao */ // Get the submission file. $submissionFile = $this->getSubmissionFile($request); if (!$submissionFile instanceof SubmissionFile) { return AuthorizationPolicy::AUTHORIZATION_DENY; } // Make sure the file is part of a review round // with a requested revision decision. $reviewRound = $reviewRoundDao->getBySubmissionFileId($submissionFile->getId()); if (!$reviewRound instanceof ReviewRound) { return AuthorizationPolicy::AUTHORIZATION_DENY; } $countRevisionDecisions = Repo::decision()->getCollector() ->filterBySubmissionIds([$submissionFile->getData('submissionId)')]) ->filterByReviewRoundIds([$reviewRound->getId()]) ->filterByDecisionTypes([Decision::PENDING_REVISIONS]) ->getCount(); if (!$countRevisionDecisions) { return AuthorizationPolicy::AUTHORIZATION_DENY; } // Make sure review round stage is the same of the current stage in request. $stageId = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_WORKFLOW_STAGE); if ($reviewRound->getStageId() != $stageId) { return AuthorizationPolicy::AUTHORIZATION_DENY; } // Make sure the file stage is SubmissionFile::SUBMISSION_FILE_REVIEW_REVISION. if ($submissionFile->getData('fileStage') != SubmissionFile::SUBMISSION_FILE_REVIEW_REVISION) { return AuthorizationPolicy::AUTHORIZATION_DENY; } $reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO'); /** @var ReviewRoundDAO $reviewRoundDao */ // Make sure that the last review round editor decision is request revisions. $reviewRoundDecisions = Repo::decision()->getCollector() ->filterBySubmissionIds([$submissionFile->getData('submissionId')]) ->filterByStageIds([$reviewRound->getStageId()]) ->filterByReviewRoundIds([$reviewRound->getId()]) ->getMany(); if ($reviewRoundDecisions->isEmpty()) { return AuthorizationPolicy::AUTHORIZATION_DENY; } $lastEditorDecision = $reviewRoundDecisions->last(); if ($lastEditorDecision->getData('decision') != Decision::PENDING_REVISIONS) { return AuthorizationPolicy::AUTHORIZATION_DENY; } // Made it through -- permit access. return AuthorizationPolicy::AUTHORIZATION_PERMIT; } } if (!PKP_STRICT_MODE) { class_alias('\PKP\security\authorization\internal\SubmissionFileRequestedRevisionRequiredPolicy', '\SubmissionFileRequestedRevisionRequiredPolicy'); }