diff --git a/api/v1/contexts/index.php b/api/v1/contexts/index.php index 59a41fb2796..cdd46f71f7e 100644 --- a/api/v1/contexts/index.php +++ b/api/v1/contexts/index.php @@ -15,4 +15,12 @@ * @brief Handle API requests for contexts (journals/presses). */ +$urlParts = explode('/', trim($_SERVER['PATH_INFO'], '/')); + +if (in_array('recommendations', $urlParts)) { + return new \PKP\handler\APIHandler( + new \PKP\API\v1\reviewers\recommendations\ReviewerRecommendationController() + ); +} + return new \PKP\handler\APIHandler(new \PKP\API\v1\contexts\PKPContextController()); diff --git a/classes/migration/install/ReviewerRecommendationsMigration.php b/classes/migration/install/ReviewerRecommendationsMigration.php new file mode 100644 index 00000000000..989a834b16a --- /dev/null +++ b/classes/migration/install/ReviewerRecommendationsMigration.php @@ -0,0 +1,42 @@ + + diff --git a/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml index ac0540c3f13..bb40109cfb0 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -160,6 +160,7 @@ + diff --git a/lib/pkp b/lib/pkp index c1af6388c45..0eaf2fb7200 160000 --- a/lib/pkp +++ b/lib/pkp @@ -1 +1 @@ -Subproject commit c1af6388c45e9f4f0c3391fa437a75b5e983f2bb +Subproject commit 0eaf2fb7200d17a5713ba75b2464974c8461233a diff --git a/lib/ui-library b/lib/ui-library index 63c6795eda5..9a47b499b51 160000 --- a/lib/ui-library +++ b/lib/ui-library @@ -1 +1 @@ -Subproject commit 63c6795eda58e49eb3f258babd0891b5a611fa67 +Subproject commit 9a47b499b51efe6711365af57660e81a99c41147 diff --git a/pages/management/SettingsHandler.php b/pages/management/SettingsHandler.php index 7e2308d24ea..5abe4815de1 100644 --- a/pages/management/SettingsHandler.php +++ b/pages/management/SettingsHandler.php @@ -19,6 +19,7 @@ use APP\components\forms\context\AccessForm; use APP\components\forms\context\ArchivingLockssForm; use APP\template\TemplateManager; +use PKP\API\v1\reviewers\recommendations\resources\ReviewerRecommendationResource; use PKP\components\forms\context\PKPContextStatisticsForm; use PKP\components\forms\context\PKPDisableSubmissionsForm; use PKP\components\forms\context\PKPDoiRegistrationSettingsForm; @@ -29,11 +30,14 @@ use PKP\components\forms\context\PKPReviewGuidanceForm; use PKP\components\forms\context\PKPReviewSetupForm; use PKP\components\forms\context\PKPSearchIndexingForm; +use PKP\components\listPanels\ReviewerRecommendationsListPanel; use PKP\core\PKPApplication; +use PKP\core\PKPRequest; use PKP\pages\management\ManagementHandler; use PKP\plugins\Hook; use PKP\plugins\PluginRegistry; use PKP\security\Role; +use PKP\submission\reviewer\recommendation\ReviewerRecommendation; class SettingsHandler extends ManagementHandler { @@ -77,6 +81,35 @@ public function workflow($args, $request) $templateMgr->display('management/workflow.tpl'); } + /** + * Add support for review related forms in workflow. + */ + protected function addReviewFormWorkflowSupport(PKPRequest $request): void + { + parent::addReviewFormWorkflowSupport($request); + + $templateManager = TemplateManager::getManager($request); + $components = $templateManager->getState('components'); + + $context = $request->getContext(); + $recommendations = ReviewerRecommendation::withContextId($context->getId())->get(); + + $reviewerRecommendationsListPanel = new ReviewerRecommendationsListPanel( + __('manager.reviewerRecommendations'), + $context, + $this->getSupportedFormLocales($context), + array_values( + ReviewerRecommendationResource::collection($recommendations) + ->toArray(app()->get('request')) + ), + ReviewerRecommendation::withContextId($context->getId())->count() + ); + + $components[$reviewerRecommendationsListPanel->id] = $reviewerRecommendationsListPanel->getConfig(); + $templateManager->setState(['components' => $components]); + $templateManager->assign('hasCustomizableRecommendation', true); + } + /** * Add the archive and payments tabs to the distribution settings page * diff --git a/plugins/reports/reviewReport b/plugins/reports/reviewReport index 613059b9792..0145b76d4ba 160000 --- a/plugins/reports/reviewReport +++ b/plugins/reports/reviewReport @@ -1 +1 @@ -Subproject commit 613059b97921cf6ade3a485b560bdcc6f1b1ca0d +Subproject commit 0145b76d4ba0596dcb13186a84bb769243687434 diff --git a/registry/uiLocaleKeysBackend.json b/registry/uiLocaleKeysBackend.json index 7d7a74391c0..4fe3ecf6745 100644 --- a/registry/uiLocaleKeysBackend.json +++ b/registry/uiLocaleKeysBackend.json @@ -402,14 +402,9 @@ "publication.version", "publication.version.all", "publication.version.confirm", - "reviewer.article.decision.accept", - "reviewer.article.decision.decline", - "reviewer.article.decision.pendingRevisions", - "reviewer.article.decision.resubmitElsewhere", - "reviewer.article.decision.resubmitHere", - "reviewer.article.decision.seeComments", "reviewer.article.recommendation", "reviewer.competingInterests", + "reviewer.recommendation.management.options", "reviewer.submission.acceptedOn", "reviewer.submission.responseDueDate", "reviewer.submission.reviewDueDate", @@ -494,7 +489,6 @@ "submission.list.revisionsSubmitted", "submission.production", "submission.publication", - "submission.recommendation", "submission.review", "submission.stage.externalReviewWithRound", "submission.stage.internalReviewWithRound", diff --git a/templates/reviewer/review/reviewerRecommendations.tpl b/templates/reviewer/review/reviewerRecommendations.tpl index aeff37ed12e..7ae44298a13 100644 --- a/templates/reviewer/review/reviewerRecommendations.tpl +++ b/templates/reviewer/review/reviewerRecommendations.tpl @@ -1,13 +1,25 @@ {** * templates/reviewer/review/reviewerRecommendations.tpl * - * Copyright (c) 2014-2021 Simon Fraser University - * Copyright (c) 2003-2021 John Willinsky + * Copyright (c) 2014-2024 Simon Fraser University + * Copyright (c) 2003-2024 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * Include reviewer recommendations for OJS review assignment responses. *} -{fbvFormSection label="reviewer.article.recommendation" description=$description|default:"reviewer.article.selectRecommendation"} - {fbvElement type="select" id="recommendation" from=$reviewerRecommendationOptions selected=$reviewAssignment->getRecommendation() size=$fbvStyles.size.MEDIUM required=$required|default:true disabled=$readOnly} +{fbvFormSection + label="reviewer.article.recommendation" + description=$description|default:"reviewer.article.selectRecommendation" +} + {fbvElement + type="select" + id="recommendation" + from=$reviewerRecommendationOptions + selected=$reviewAssignment->getRecommendation() + size=$fbvStyles.size.MEDIUM + required=$required|default:true + disabled=$readOnly + translate=false + } {/fbvFormSection}