Skip to content

Commit

Permalink
pkp#8887 Review assignment refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
Vitaliy-1 committed Oct 19, 2023
1 parent f7d585a commit 13eed3f
Show file tree
Hide file tree
Showing 56 changed files with 1,362 additions and 342 deletions.
42 changes: 35 additions & 7 deletions api/v1/_submissions/PKPBackendSubmissionsHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -89,7 +89,8 @@ public function __construct()
'roles' => [
Role::ROLE_ID_MANAGER,
Role::ROLE_ID_SUB_EDITOR,
Role::ROLE_ID_ASSISTANT
Role::ROLE_ID_ASSISTANT,
Role::ROLE_ID_AUTHOR,
],
],
[
Expand All @@ -99,16 +100,24 @@ public function __construct()
Role::ROLE_ID_MANAGER,
Role::ROLE_ID_SUB_EDITOR,
Role::ROLE_ID_ASSISTANT,
Role::ROLE_ID_AUTHOR,
]
],
[
'pattern' => $this->getEndpointPattern() . '/viewsCount',
'handler' => [$this, 'viewsCount'],
'handler' => [$this, 'getViewsCount'],
'roles' => [
Role::ROLE_ID_MANAGER,
Role::ROLE_ID_SUB_EDITOR,
Role::ROLE_ID_ASSISTANT,
]
],
[
'pattern' => $this->getEndpointPattern() . '/reviewAssignments',
'handler' => [$this, 'getReviewAssignments'],
'roles' => [
Role::ROLE_ID_REVIEWER,
]
]
]
]);
Expand Down Expand Up @@ -162,10 +171,6 @@ public function getMany(SlimRequest $slimRequest, APIResponse $response, array $
}
$collector->assignedTo($val);
break;

case 'isIncomplete':
$collector->filterByIncomplete(true);
break;
}
}

Expand Down Expand Up @@ -277,6 +282,12 @@ public function reviews(SlimRequest $slimRequest, APIResponse $response, array $
case 'reviewsOverdue':
$collector->filterByOverdue(true);
break;
case 'revisionsRequested':
$collector->filterByRevisionsRequested(true);
break;
case 'revisionsSubmitted':
$collector->filterByRevisionsSubmitted(true);
break;
}
}

Expand All @@ -299,7 +310,7 @@ public function reviews(SlimRequest $slimRequest, APIResponse $response, array $
/**
* Get a number of the submissions for each view
*/
public function viewsCount(SlimRequest $slimRequest, APIResponse $response, array $args): APIResponse
public function getViewsCount(SlimRequest $slimRequest, APIResponse $response, array $args): APIResponse
{
$request = Application::get()->getRequest();
$context = $request->getContext();
Expand All @@ -313,6 +324,19 @@ public function viewsCount(SlimRequest $slimRequest, APIResponse $response, arra
return $response->withJson($dashboardViews->map(fn(DashboardView $view) => $view->getCount()), 200);
}

/**
* Get all reviewer's assignments
*/
public function getReviewAssignments(SlimRequest $slimRequest, APIResponse $response, array $args)
{
$request = Application::get()->getRequest();
$context = $request->getContext();
if (!$context) {
return $response->withStatus(404)->withJsonError('api.404.resourceNotFound');
}
$currentUser = $request->getUser();
}

/**
* Delete a submission
*
Expand Down Expand Up @@ -409,6 +433,10 @@ protected function getSubmissionCollector(array $queryParams): Collector
case 'isOverdue':
$collector->filterByOverdue(true);
break;

case 'isIncomplete':
$collector->filterByIncomplete(true);
break;
}
}

Expand Down
12 changes: 7 additions & 5 deletions api/v1/submissions/PKPSubmissionHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -870,11 +870,13 @@ public function getPublications($slimRequest, $response, $args)
->filterByContextIds([$submission->getData('contextId')])
->getMany();

$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var \PKP\submission\reviewAssignment\ReviewAssignmentDAO $reviewAssignmentDao */
$currentUserReviewAssignment = $reviewAssignmentDao->getLastReviewRoundReviewAssignmentByReviewer(
$submission->getId(),
$request->getUser()->getId()
);
$currentUserReviewAssignment = Repo::reviewAssignment()->getCollector()
->filterBySubmissionIds([$submission->getId()])
->filterByReviewerIds([$request->getUser()->getId()])
->filterByLastReviewRound(true)
->getMany()
->first();

$anonymize = $currentUserReviewAssignment && $currentUserReviewAssignment->getReviewMethod() === ReviewAssignment::SUBMISSION_REVIEW_METHOD_DOUBLEANONYMOUS;

/** @var GenreDAO $genreDao */
Expand Down
42 changes: 17 additions & 25 deletions classes/controllers/grid/users/reviewer/PKPReviewerGridHandler.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
use APP\core\PageRouter;
use APP\core\Request;
use APP\facades\Repo;
use APP\log\event\SubmissionEventLogEntry;
use APP\notification\NotificationManager;
use APP\submission\Submission;
use APP\template\TemplateManager;
Expand All @@ -47,7 +46,6 @@
use PKP\linkAction\LinkAction;
use PKP\linkAction\request\AjaxModal;
use PKP\log\event\PKPSubmissionEventLogEntry;
use PKP\log\SubmissionLog;
use PKP\mail\Mailable;
use PKP\mail\mailables\ReviewerReinstate;
use PKP\mail\mailables\ReviewerResendRequest;
Expand All @@ -65,7 +63,6 @@
use PKP\security\Role;
use PKP\security\Validation;
use PKP\submission\reviewAssignment\ReviewAssignment;
use PKP\submission\reviewAssignment\ReviewAssignmentDAO;
use PKP\submission\reviewRound\ReviewRound;
use PKP\submission\reviewRound\ReviewRoundDAO;
use PKP\submission\SubmissionCommentDAO;
Expand Down Expand Up @@ -332,8 +329,12 @@ protected function loadData($request, $filter)
{
// Get the existing review assignments for this submission
$reviewRound = $this->getReviewRound();
$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var ReviewAssignmentDAO $reviewAssignmentDao */
return $reviewAssignmentDao->getByReviewRoundId($reviewRound->getId());
return Repo::reviewAssignment()->getCollector()
->filterByReviewRoundIds([$reviewRound->getId()])
->getMany()
->keyBy(fn(ReviewAssignment $reviewAssignment, int $key) => $reviewAssignment->getId())
->sortKeys()
->toArray();
}


Expand Down Expand Up @@ -678,10 +679,8 @@ public function unconsiderReview($args, $request)
$submission = $this->getSubmission();
$user = $request->getUser();
$reviewAssignment = $this->getAuthorizedContextObject(Application::ASSOC_TYPE_REVIEW_ASSIGNMENT);
$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var ReviewAssignmentDAO $reviewAssignmentDao */

$reviewAssignment->setConsidered(ReviewAssignment::REVIEW_ASSIGNMENT_UNCONSIDERED);
$reviewAssignmentDao->updateObject($reviewAssignment);
Repo::reviewAssignment()->edit($reviewAssignment, ['considered' => ReviewAssignment::REVIEW_ASSIGNMENT_UNCONSIDERED]);

// log the unconsider.
$eventLog = Repo::eventLog()->newDataObject([
Expand Down Expand Up @@ -716,39 +715,32 @@ public function reviewRead($args, $request)

// Rate the reviewer's performance on this assignment
$quality = $request->getUserVar('quality');
$newReviewData = [];
if ($quality) {
$reviewAssignment->setQuality((int) $quality);
$reviewAssignment->setDateRated(Core::getCurrentDate());
$newReviewData['quality'] = (int) $quality;
$newReviewData['dateRated'] = Core::getCurrentDate();
} else {
$reviewAssignment->setQuality(null);
$reviewAssignment->setDateRated(null);
$newReviewData['quality'] = $newReviewData['dateRated'] = null;
}

// Mark the latest read date of the review by the editor.
$user = $request->getUser();

// if the review assignment had been unconsidered, update the flag.
$reviewAssignment->setConsidered(
$reviewAssignment->getConsidered() === ReviewAssignment::REVIEW_ASSIGNMENT_NEW
? ReviewAssignment::REVIEW_ASSIGNMENT_CONSIDERED
: ReviewAssignment::REVIEW_ASSIGNMENT_RECONSIDERED
);
$newReviewData['considered'] = $reviewAssignment->getConsidered() === ReviewAssignment::REVIEW_ASSIGNMENT_NEW
? ReviewAssignment::REVIEW_ASSIGNMENT_CONSIDERED
: ReviewAssignment::REVIEW_ASSIGNMENT_RECONSIDERED;

if (!$reviewAssignment->getDateCompleted()) {
// Editor completes the review.
$reviewAssignment->setDateConfirmed(Core::getCurrentDate());
$reviewAssignment->setDateCompleted(Core::getCurrentDate());
$newReviewData['dateConfirmed'] = $newReviewData['dateCompleted'] = Core::getCurrentDate();
}

// Trigger an update of the review round status
$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var ReviewAssignmentDAO $reviewAssignmentDao */
$reviewAssignmentDao->updateObject($reviewAssignment);
Repo::reviewAssignment()->edit($reviewAssignment, $newReviewData);

//if the review was read by an editor, log event
if ($reviewAssignment->isRead()) {
$submissionId = $reviewAssignment->getSubmissionId();
$submission = Repo::submission()->get($submissionId);

$user = $request->getUser();
$eventLog = Repo::eventLog()->newDataObject([
'assocType' => PKPApplication::ASSOC_TYPE_SUBMISSION,
'assocId' => $submission->getId(),
Expand Down
1 change: 0 additions & 1 deletion classes/core/PKPApplication.php
Original file line number Diff line number Diff line change
Expand Up @@ -491,7 +491,6 @@ public function getDAOMap()
'PluginSettingsDAO' => 'PKP\plugins\PluginSettingsDAO',
'PublicationDAO' => 'APP\publication\PublicationDAO',
'QueuedPaymentDAO' => 'PKP\payment\QueuedPaymentDAO',
'ReviewAssignmentDAO' => 'PKP\submission\reviewAssignment\ReviewAssignmentDAO',
'ReviewFilesDAO' => 'PKP\submission\ReviewFilesDAO',
'ReviewFormDAO' => 'PKP\reviewForm\ReviewFormDAO',
'ReviewFormElementDAO' => 'PKP\reviewForm\ReviewFormElementDAO',
Expand Down
6 changes: 4 additions & 2 deletions classes/decision/types/CancelReviewRound.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
namespace PKP\decision\types;

use APP\decision\Decision;
use APP\facades\Repo;
use APP\submission\Submission;
use Illuminate\Validation\Validator;
use PKP\context\Context;
Expand Down Expand Up @@ -193,10 +194,11 @@ public function runAdditionalActions(Decision $decision, Submission $submission,
}

$reviewRoundDao = DAORegistry::getDAO('ReviewRoundDAO'); /** @var ReviewRoundDAO $reviewRoundDao */
$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO'); /** @var \PKP\submission\reviewAssignment\ReviewAssignmentDAO $reviewAssignmentDao */
$reviewRoundId = $decision->getData('reviewRoundId');

$reviewAssignmentDao->deleteByReviewRoundId($reviewRoundId);
Repo::reviewAssignment()->deleteMany(
Repo::reviewAssignment()->getCollector()->filterByReviewRoundIds([$reviewRoundId])
);
$reviewRoundDao->deleteById($reviewRoundId);
}

Expand Down
13 changes: 8 additions & 5 deletions classes/decision/types/traits/InExternalReviewRound.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@
use PKP\components\fileAttachers\ReviewFiles;
use PKP\components\fileAttachers\Upload;
use PKP\context\Context;
use PKP\db\DAORegistry;
use PKP\submission\reviewAssignment\ReviewAssignmentDAO;
use PKP\submission\reviewAssignment\ReviewAssignment;
use PKP\submission\reviewRound\ReviewRound;
use PKP\submissionFile\SubmissionFile;

Expand Down Expand Up @@ -78,9 +77,13 @@ protected function getFileAttachers(Submission $submission, Context $context, ?R
];

if ($reviewRound) {
/** @var ReviewAssignmentDAO $reviewAssignmentDAO */
$reviewAssignmentDAO = DAORegistry::getDAO('ReviewAssignmentDAO');
$reviewAssignments = $reviewAssignmentDAO->getByReviewRoundId($reviewRound->getId());
$reviewAssignments = Repo::reviewAssignment()->getCollector()
->filterByReviewRoundIds([$reviewRound->getId()])
->getMany()
->keyBy(fn(ReviewAssignment $reviewAssignment, int $key) => $reviewAssignment->getId())
->sortKeys()
->toArray();

$reviewerFiles = [];
if (!empty($reviewAssignments)) {
$reviewerFiles = Repo::submissionFile()
Expand Down
19 changes: 8 additions & 11 deletions classes/decision/types/traits/NotifyReviewers.php
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,16 @@

use APP\core\Application;
use APP\facades\Repo;
use APP\log\event\SubmissionEventLogEntry;
use APP\submission\Submission;
use Illuminate\Support\Facades\Mail;
use Illuminate\Validation\Validator;
use PKP\core\Core;
use PKP\core\PKPApplication;
use PKP\db\DAORegistry;
use PKP\log\event\PKPSubmissionEventLogEntry;
use PKP\log\SubmissionLog;
use PKP\mail\EmailData;
use PKP\mail\mailables\DecisionNotifyReviewer;
use PKP\mail\mailables\ReviewerUnassign;
use PKP\security\Validation;
use PKP\submission\reviewAssignment\ReviewAssignment;
use PKP\submission\reviewAssignment\ReviewAssignmentDAO;
use PKP\user\User;

trait NotifyReviewers
Expand All @@ -54,13 +49,15 @@ protected function sendReviewersEmail(DecisionNotifyReviewer|ReviewerUnassign $m

// Update the ReviewAssignment to indicate the reviewer has been acknowledged
if (is_a($mailable, DecisionNotifyReviewer::class)) {
/** @var ReviewAssignmentDAO $reviewAssignmentDao */
$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO');
$reviewAssignment = $reviewAssignmentDao->getReviewAssignment($mailable->getDecision()->getData('reviewRoundId'), $recipient->getId());
$reviewAssignment = Repo::reviewAssignment()->getCollector()
->filterByReviewRoundIds([$mailable->getDecision()->getData('reviewRoundId')])
->filterByReviewerIds([$recipient->getId()])
->getMany()
->first();
if ($reviewAssignment) {
$reviewAssignment->setDateAcknowledged(Core::getCurrentDate());
$reviewAssignment->stampModified();
$reviewAssignmentDao->updateObject($reviewAssignment);
Repo::reviewAssignment()->edit($reviewAssignment, [
'dateAcknowledged' => Core::getCurrentDate(),
]);
}
}
}
Expand Down
11 changes: 6 additions & 5 deletions classes/decision/types/traits/WithReviewAssignments.php
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,10 @@

namespace PKP\decision\types\traits;

use APP\facades\Repo;
use Exception;
use PKP\db\DAORegistry;
use PKP\decision\DecisionType;
use PKP\submission\reviewAssignment\ReviewAssignment;
use PKP\submission\reviewAssignment\ReviewAssignmentDAO;

trait WithReviewAssignments
{
Expand All @@ -36,10 +35,12 @@ trait WithReviewAssignments
*/
protected function getReviewAssignments(int $submissionId, int $reviewRoundId, int $reviewAssignmentStatus): array
{
/** @var ReviewAssignmentDAO $reviewAssignmentDao */
$reviewAssignmentDao = DAORegistry::getDAO('ReviewAssignmentDAO');
$reviewAssignments = Repo::reviewAssignment()->getCollector()
->filterByReviewRoundIds([$reviewRoundId])
->filterBySubmissionIds([$submissionId])
->filterByStageId($this->getStageId())
->getMany();

$reviewAssignments = $reviewAssignmentDao->getBySubmissionId($submissionId, $reviewRoundId, $this->getStageId());
$assignments = [];

foreach ($reviewAssignments as $reviewAssignment) {
Expand Down
Loading

0 comments on commit 13eed3f

Please sign in to comment.