Skip to content

pkp/pkp-lib#4787 Reviewer suggestions #1835

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
wants to merge 6 commits into from
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions api/v1/submissions/index.php
Original file line number Diff line number Diff line change
@@ -23,6 +23,8 @@

if (strpos($requestPath, '/files')) {
return new \PKP\handler\APIHandler(new \PKP\API\v1\submissions\PKPSubmissionFileController());
} elseif (strpos($requestPath, '/suggestions')) {
return new \PKP\handler\APIHandler(new PKP\API\v1\reviewers\suggestions\ReviewerSuggestionController());
} else {
return new \PKP\handler\APIHandler(new \APP\API\v1\submissions\SubmissionController());
}
23 changes: 23 additions & 0 deletions classes/migration/upgrade/v3_5_0/I4787_AddReviewSuggestionHelp.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

/**
* @file classes/migration/upgrade/v3_5_0/I4787_AddReviewSuggestionHelp.php
*
* Copyright (c) 2025 Simon Fraser University
* Copyright (c) 2025 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class I4787_AddReviewSuggestionHelp.php
*
* @brief Add reviewer suggestion related default help text
*
*/

namespace APP\migration\upgrade\v3_5_0;

class I4787_AddReviewSuggestionHelp extends \PKP\migration\upgrade\v3_5_0\I4787_AddReviewSuggestionHelp
{
protected string $CONTEXT_TABLE = 'presses';
protected string $CONTEXT_SETTINGS_TABLE = 'press_settings';
protected string $CONTEXT_COLUMN = 'press_id';
}
1 change: 1 addition & 0 deletions dbscripts/xml/install.xml
Original file line number Diff line number Diff line change
@@ -35,6 +35,7 @@
<migration class="PKP\migration\install\ReviewFormsMigration" />
<migration class="PKP\migration\install\LibraryFilesMigration" />
<migration class="PKP\migration\install\ReviewsMigration" />
<migration class="PKP\migration\install\ReviewerSuggestionsMigration" />
<migration class="PKP\migration\install\TemporaryFilesMigration" />
<migration class="PKP\migration\install\TombstoneMigration" />
<migration class="PKP\migration\install\DoiMigration" />
2 changes: 2 additions & 0 deletions dbscripts/xml/upgrade.xml
Original file line number Diff line number Diff line change
@@ -156,6 +156,8 @@
<migration class="PKP\migration\upgrade\v3_5_0\I10759_AddReviewAssignmentSettings"/>
<migration class="PKP\migration\upgrade\v3_5_0\I10819_OrcidOauthScopeMail"/>
<migration class="PKP\migration\upgrade\v3_5_0\I10359_DateConsideredToReviewAssignments"/>
<migration class="APP\migration\upgrade\v3_5_0\I4787_AddReviewSuggestionHelp"/>
<migration class="PKP\migration\upgrade\v3_5_0\I4787_InstallReviewerSuggestion"/>
<note file="docs/release-notes/README-3.5.0" />
</upgrade>

2 changes: 1 addition & 1 deletion lib/pkp
Submodule pkp updated 48 files
+207 −0 api/v1/reviewers/suggestions/ReviewerSuggestionController.php
+112 −0 api/v1/reviewers/suggestions/formRequests/AddReviewerSuggestion.php
+72 −0 api/v1/reviewers/suggestions/formRequests/EditReviewerSuggestion.php
+53 −0 api/v1/reviewers/suggestions/resources/ReviewerSuggestionResource.php
+31 −1 classes/components/forms/context/PKPReviewSetupForm.php
+82 −0 classes/components/forms/submission/ReviewerSuggestionsForm.php
+25 −1 classes/components/forms/submission/SubmissionGuidanceSettings.php
+43 −0 classes/components/listPanels/PKPSelectReviewerListPanel.php
+117 −0 classes/components/listPanels/ReviewerSuggestionsListPanel.php
+46 −20 classes/controllers/grid/users/reviewer/PKPReviewerGridHandler.php
+11 −6 classes/core/PKPBaseController.php
+10 −4 classes/core/PKPContainer.php
+251 −0 classes/core/ValidationServiceProvider.php
+1 −1 classes/i18n/Locale.php
+113 −0 classes/migration/install/ReviewerSuggestionsMigration.php
+31 −0 classes/migration/upgrade/v3_5_0/I4787_AddReviewSuggestionHelp.php
+36 −0 classes/migration/upgrade/v3_5_0/I4787_InstallReviewerSuggestion.php
+1 −1 classes/publication/Repository.php
+68 −0 classes/security/authorization/internal/SubmissionIncompletePolicy.php
+82 −4 classes/submission/maps/Schema.php
+306 −0 classes/submission/reviewer/suggestion/ReviewerSuggestion.php
+109 −0 classes/validation/MultilingualInput.php
+14 −107 classes/validation/ValidatorFactory.php
+94 −0 classes/validation/traits/HasMultilingualRule.php
+31 −10 controllers/grid/users/reviewer/form/AdvancedSearchReviewerForm.php
+33 −15 controllers/grid/users/reviewer/form/CreateReviewerForm.php
+26 −8 controllers/grid/users/reviewer/form/EnrollExistingReviewerForm.php
+36 −11 controllers/grid/users/reviewer/form/ReviewerForm.php
+74 −51 js/controllers/grid/users/reviewer/AdvancedReviewerSearchHandler.js
+3 −0 locale/en/api.po
+3 −0 locale/en/common.po
+9 −0 locale/en/default.po
+3 −0 locale/en/editor.po
+11 −0 locale/en/grid.po
+12 −0 locale/en/manager.po
+18 −0 locale/en/submission.po
+3 −0 locale/en/user.po
+4 −0 pages/dashboard/PKPDashboardHandlerNext.php
+98 −12 pages/submission/PKPSubmissionHandler.php
+9 −7 templates/common/urlInEl.tpl
+3 −2 templates/controllers/extrasOnDemand.tpl
+12 −3 templates/controllers/grid/users/reviewer/form/advancedSearchReviewerAssignmentForm.tpl
+34 −25 templates/controllers/grid/users/reviewer/form/advancedSearchReviewerForm.tpl
+4 −0 templates/controllers/grid/users/reviewer/form/createReviewerForm.tpl
+15 −1 templates/controllers/grid/users/reviewer/form/enrollExistingReviewerForm.tpl
+1 −0 templates/controllers/grid/users/reviewer/form/reviewerFormFooter.tpl
+70 −0 templates/submission/review-reviewer-suggestions.tpl
+8 −0 templates/submission/wizard.tpl
2 changes: 1 addition & 1 deletion lib/ui-library
Submodule ui-library updated 33 files
+28 −19 public/globals.js
+9 −0 src/components/Container/SubmissionWizardPage.vue
+1 −1 src/components/Form/fields/Autosuggest.vue
+16 −1 src/components/Form/fields/FieldAffiliations.vue
+39 −26 src/components/Form/fields/FieldAffiliationsRorAutoSuggest.vue
+26 −0 src/components/ListPanel/reviewerSuggestions/ReviewerSuggestionsEditModal.vue
+325 −0 src/components/ListPanel/reviewerSuggestions/ReviewerSuggestionsListPanel.vue
+111 −0 src/components/ListPanel/users/SelectReviewerListPanel.vue
+155 −0 src/components/ListPanel/users/SelectReviewerSuggestionListItem.vue
+38 −1 src/components/Modal/ModalManager.vue
+4 −0 src/components/Modal/SideModalBody.vue
+4 −3 src/composables/useSubmission.js
+14 −13 src/managers/ReviewerManager/useReviewerManagerConfig.js
+84 −0 src/managers/ReviewerSuggestionManager/ReviewerSuggestionManager.vue
+111 −0 src/managers/ReviewerSuggestionManager/reviewerSuggestionManagerStore.js
+54 −0 src/managers/ReviewerSuggestionManager/useReviewerSuggestionManagerActions.js
+5 −2 src/pages/dashboard/DashboardPage.stories.js
+16 −0 src/pages/dashboard/components/DashboardTable/DashboardCellReviewAssignmentActions.vue
+4 −2 ...rd/components/DashboardTable/DashboardCellSubmissionActivity/DashboardCellSubmissionActivityReviewsItem.vue
+2 −2 src/pages/dashboard/components/ReviewActivityIndicatorPopover/ReviewActivityIndicatorPopover.stories.js
+41 −19 src/pages/dashboard/composables/useDashboardConfigEditorialActivity.js
+6 −9 src/pages/dashboard/composables/useDashboardConfigReviewActivity.js
+1 −1 src/pages/dashboard/dashboardPageStore.js
+0 −38 src/pages/dashboard/mocks/pageInitConfigEditorial.js
+0 −32 src/pages/dashboard/mocks/pageInitConfigMySubmissions.js
+0 −26 src/pages/dashboard/mocks/pageInitConfigReviewAssignments.js
+15 −0 src/pages/dashboard/mocks/reviewAssignmentScenariosMock.js
+2 −0 src/pages/workflow/WorkflowPageOJS.vue
+2 −0 src/pages/workflow/WorkflowPageOMP.vue
+1 −0 src/pages/workflow/composables/useWorkflowConfig/useWorkflowConfigOJS.js
+1 −0 src/pages/workflow/composables/useWorkflowConfig/useWorkflowConfigOMP.js
+35 −2 src/pages/workflow/composables/useWorkflowConfig/workflowConfigEditorialOJS.js
+27 −1 src/stores/modalStore.js
14 changes: 14 additions & 0 deletions schemas/context.json
Original file line number Diff line number Diff line change
@@ -177,6 +177,20 @@
"type": "boolean",
"default": false,
"description": "Whether each publication version should receive a unique DOI"
},
"reviewerSuggestionEnabled": {
"type": "boolean",
"validation": [
"nullable"
]
},
"reviewerSuggestionsHelp": {
"type": "string",
"multilingual": true,
"validation": [
"nullable"
],
"defaultLocaleKey": "default.submission.step.reviewerSuggestions"
}
}
}
79 changes: 79 additions & 0 deletions schemas/submission.json
Original file line number Diff line number Diff line change
@@ -48,6 +48,85 @@
"validation": [
"in:1,2"
]
},
"reviewerSuggestions": {
"type": "array",
"description": "Information about suggested reviewers at the time of submission.",
"readOnly": true,
"items": {
"type": "object",
"properties": {
"id": {
"type": "integer"
},
"familyName" : {
"type": "string",
"multilingual": true,
"apiSummary": true
},
"givenName": {
"type": "string",
"multilingual": true,
"apiSummary": true
},
"fullName": {
"type": "string",
"multilingual": true,
"apiSummary": true
},
"email": {
"type": "string",
"apiSummary": true
},
"orcidId": {
"type": "string",
"apiSummary": true,
"validation": [
"nullable"
]
},
"suggestionReason": {
"type": "string",
"multilingual": true,
"apiSummary": true
},
"affiliation" : {
"type": "string",
"multilingual": true,
"apiSummary": true
},
"approvedAt": {
"type": "string",
"apiSummary": true,
"description": "The date suggestion was approved as reviewer.",
"validation": [
"nullable",
"date:Y-m-d H:i:s"
]
},
"existingUserId": {
"type": "integer",
"apiSummary": true,
"description": "The existing user id if already present as an user.",
"validation": [
"nullable"
]
},
"existingReviewerRole": {
"type": "boolean",
"apiSummary": true,
"description": "The existing user has reviewer role when already there is an existing user association."
},
"reviewerId": {
"type": "integer",
"apiSummary": true,
"description": "The existing user id with reviewer role who as been mapped to this suggestion after the suggestion has made",
"validation": [
"nullable"
]
}
}
}
}
}
}