diff --git a/classes/components/forms/publication/IssueEntryForm.php b/classes/components/forms/publication/IssueEntryForm.php index f5703e16290..d44e444649c 100644 --- a/classes/components/forms/publication/IssueEntryForm.php +++ b/classes/components/forms/publication/IssueEntryForm.php @@ -17,14 +17,23 @@ use APP\facades\Repo; use PKP\components\forms\FieldAutosuggestPreset; +use PKP\components\forms\FieldRichTextarea; use PKP\components\forms\FieldSelect; use PKP\components\forms\FieldText; use PKP\components\forms\FieldUploadImage; use PKP\components\forms\FormComponent; +use PKP\publication\enums\UpdateType; class IssueEntryForm extends FormComponent { public const FORM_ISSUE_ENTRY = 'issueEntry'; + + public const GROUP_PLACEMENT = 'placement'; + public const GROUP_PUBLICATION_TIMING = 'publicationTiming'; + public const GROUP_VERSION_AND_UPDATES = 'versionAndUpdates'; + public const GROUP_DISPLAY = 'display'; + public const GROUP_ACCESS = 'access'; + public $id = self::FORM_ISSUE_ENTRY; public $method = 'PUT'; @@ -49,6 +58,13 @@ public function __construct( $this->action = $action; $this->locales = $locales; + $this + ->addGroup(['id' => self::GROUP_PLACEMENT, 'label' => __('publication.placement')]) + ->addGroup(['id' => self::GROUP_PUBLICATION_TIMING, 'label' => __('publication.publicationTiming')]) + ->addGroup(['id' => self::GROUP_VERSION_AND_UPDATES, 'label' => __('publication.versionAndUpdates')]) + ->addGroup(['id' => self::GROUP_DISPLAY, 'label' => __('publication.display')]) + ->addGroup(['id' => self::GROUP_ACCESS, 'label' => __('publication.access')]); + // Section options $sections = Repo::section()->getSectionList($publicationContext->getId()); $sectionOptions = []; @@ -60,7 +76,9 @@ public function __construct( } $this->addField(new FieldSelect('sectionId', [ + 'groupId' => self::GROUP_PLACEMENT, 'label' => __('section.section'), + 'description' => __('publication.section.description'), 'options' => $sectionOptions, 'value' => (int) $publication->getData('sectionId'), 'size' => 'large', @@ -86,8 +104,9 @@ public function __construct( $vocabulary = Repo::category()->getCategoryVocabularyStructure($categories); $this->addField(new FieldAutosuggestPreset('categoryIds', [ + 'groupId' => self::GROUP_PLACEMENT, 'label' => __('submission.submit.placement.categories'), - 'description' => $hasAllBreadcrumbs ? '' : __('submission.categories.circularReferenceWarning'), + 'description' => __('publication.categories.description') . ($hasAllBreadcrumbs ? '' : ' ' . __('submission.categories.circularReferenceWarning')), 'value' => $publication->getData('categoryIds'), 'options' => $categoryOptions, 'vocabularies' => [ @@ -102,8 +121,35 @@ public function __construct( } $this + ->addField(new FieldText('datePublished', [ + 'groupId' => self::GROUP_PUBLICATION_TIMING, + 'label' => __('publication.publicationDate'), + 'description' => __('publication.datePublished.description'), + 'value' => $publication->getData('datePublished'), + 'size' => 'large', + ])) + ->addField(new FieldSelect('updateType', [ + 'groupId' => self::GROUP_VERSION_AND_UPDATES, + 'label' => __('publication.updateType.label'), + 'description' => __('publication.updateType.description'), + 'options' => array_map( + fn (UpdateType $case) => ['value' => $case->value, 'label' => $case->label()], + UpdateType::cases() + ), + 'value' => $publication->getData('updateType') ?? UpdateType::NEW_VERSION->value, + 'size' => 'large', + ])) + ->addField(new FieldRichTextarea('summaryOfChanges', [ + 'groupId' => self::GROUP_VERSION_AND_UPDATES, + 'label' => __('submission.form.summaryOfChanges'), + 'description' => __('publication.summaryOfChanges.description'), + 'isMultilingual' => true, + 'value' => $publication->getData('summaryOfChanges'), + ])) ->addField(new FieldUploadImage('coverImage', [ + 'groupId' => self::GROUP_DISPLAY, 'label' => __('editor.article.coverImage'), + 'description' => __('publication.coverImage.description'), 'value' => $publication->getData('coverImage'), 'isMultilingual' => true, 'baseUrl' => $baseUrl, @@ -112,19 +158,18 @@ public function __construct( ], ])) ->addField(new FieldText('pages', [ + 'groupId' => self::GROUP_DISPLAY, 'label' => __('editor.issues.pages'), + 'description' => __('publication.pages.description'), 'value' => $publication->getData('pages'), + 'size' => 'large', ])) ->addField(new FieldText('urlPath', [ + 'groupId' => self::GROUP_ACCESS, 'label' => __('publication.urlPath'), - 'description' => __('publication.urlPath.description'), + 'description' => __('publication.publicationSettings.urlPath.description'), 'value' => $publication->getData('urlPath'), - ])) - ->addField(new FieldText('datePublished', [ - 'label' => __('publication.datePublished'), - 'description' => __('publication.datePublished.description'), - 'value' => $publication->getData('datePublished'), - 'size' => 'small', + 'size' => 'large', ])); } } diff --git a/classes/migration/install/OJSMigration.php b/classes/migration/install/OJSMigration.php index f563ec8923f..1711c2080a8 100644 --- a/classes/migration/install/OJSMigration.php +++ b/classes/migration/install/OJSMigration.php @@ -18,6 +18,7 @@ use Illuminate\Database\Schema\Blueprint; use Illuminate\Support\Facades\DB; use Illuminate\Support\Facades\Schema; +use PKP\publication\enums\UpdateType; class OJSMigration extends \PKP\migration\Migration { @@ -245,6 +246,7 @@ public function up(): void $table->enum('version_stage', array_column(VersionStage::cases(), 'value'))->nullable(); $table->integer('version_minor')->nullable(); $table->integer('version_major')->nullable(); + $table->enum('update_type', array_column(UpdateType::cases(), 'value'))->nullable(); $table->datetime('created_at')->useCurrent(); $table->bigInteger('issue_id')->nullable(); diff --git a/classes/publication/DAO.php b/classes/publication/DAO.php index 6e971343789..1b415439c18 100644 --- a/classes/publication/DAO.php +++ b/classes/publication/DAO.php @@ -44,6 +44,7 @@ class DAO extends \PKP\publication\DAO 'versionStage' => 'version_stage', 'versionMinor' => 'version_minor', 'versionMajor' => 'version_major', + 'updateType' => 'update_type', 'createdAt' => 'created_at', 'sourcePublicationId' => 'source_publication_id' ]; diff --git a/cypress/tests/data/60-content/AmwandengaSubmission.cy.js b/cypress/tests/data/60-content/AmwandengaSubmission.cy.js index 4ea394abd3c..f8fd7850e2c 100644 --- a/cypress/tests/data/60-content/AmwandengaSubmission.cy.js +++ b/cypress/tests/data/60-content/AmwandengaSubmission.cy.js @@ -328,8 +328,8 @@ describe('Data suite: Amwandenga', function() { cy.get('[role="status"]').contains('Saved'); //cy.wait(1000); - // Issue - cy.openWorkflowMenu('Unassigned version', 'Issue') + // Publication Settings + cy.openWorkflowMenu('Unassigned version', 'Publication Settings') // Initially set to no issue cy.get('label:Contains("Don\'t Assign To An Issue")').click(); @@ -518,7 +518,7 @@ describe('Data suite: Amwandenga', function() { cy.get('[data-cy="galley-manager"]').contains("PDF Version 2"); // Edit url path and select issue - cy.openWorkflowMenu('Version of Record 1.1', 'Issue') + cy.openWorkflowMenu('Version of Record 1.1', 'Publication Settings') cy.wait(2000); cy.get('select[name="issueId"]').select('Vol. 1 No. 2 (2014)'); cy.get('[name="urlPath"]').clear(); diff --git a/cypress/tests/data/60-content/VkarbasizaedSubmission.cy.js b/cypress/tests/data/60-content/VkarbasizaedSubmission.cy.js index 4b6ef55a5db..239490dc184 100644 --- a/cypress/tests/data/60-content/VkarbasizaedSubmission.cy.js +++ b/cypress/tests/data/60-content/VkarbasizaedSubmission.cy.js @@ -221,7 +221,7 @@ describe('Data suite tests', function() { cy.visit('index.php/publicknowledge/dashboard/editorial'); cy.get('nav').contains('Active submissions').click(); cy.openSubmission(author.familyName); - cy.openWorkflowMenu('Version of Record 1.0', 'Issue') + cy.openWorkflowMenu('Version of Record 1.0', 'Publication Settings') // update issue selection and publish cy.get('button').contains('Schedule For Publication').click(); diff --git a/cypress/tests/integration/Z_ArticleViewDCMetadata.cy.js b/cypress/tests/integration/Z_ArticleViewDCMetadata.cy.js index e52fea64e07..e0f740e7a6d 100644 --- a/cypress/tests/integration/Z_ArticleViewDCMetadata.cy.js +++ b/cypress/tests/integration/Z_ArticleViewDCMetadata.cy.js @@ -469,8 +469,8 @@ describe('Article View Metadata - DC Plugin', function() { }); - // Issue - cy.openWorkflowMenu('Unassigned version', 'Issue') + // Publication Settings + cy.openWorkflowMenu('Unassigned version', 'Publication Settings') cy.get('label:Contains("'+issueAssignmentOption+'")').click(); cy.get('select[name="issueId"]').select(submission.source.issueTitle); submission.publishIssueSections.forEach((sectionTitle) => { diff --git a/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml index 067989a36fc..d07bc9c0e9f 100644 --- a/dbscripts/xml/upgrade.xml +++ b/dbscripts/xml/upgrade.xml @@ -224,6 +224,7 @@ + diff --git a/js/load.js b/js/load.js index 5b27b2e6ae9..3c9a83a02a3 100644 --- a/js/load.js +++ b/js/load.js @@ -35,6 +35,7 @@ import StatsContextPage from '@/components/Container/StatsContextPage.vue'; import StatsIssuesPage from '@/components/Container/StatsIssuesPage.vue'; import StatsUsersPage from '@/components/Container/StatsUsersPage.vue'; import SubmissionWizardPage from '@/components/Container/SubmissionWizardPage.vue'; +import FileMetadataForm from '@/managers/FileManager/modals/FileMetadataForm.vue'; import DashboardPage from '@/pages/dashboard/DashboardPage.vue'; // Helper for initializing and tracking Vue controllers @@ -62,6 +63,7 @@ window.pkp = Object.assign(PkpLoad, window.pkp || {}, { StatsIssuesPage, StatsUsersPage, SubmissionWizardPage, + FileMetadataForm, DashboardPage, }, }); diff --git a/lib/pkp b/lib/pkp index 1a5a8b1d7e5..7ce74c1e63f 160000 --- a/lib/pkp +++ b/lib/pkp @@ -1 +1 @@ -Subproject commit 1a5a8b1d7e52ad079e4a669d4a6f3795cab9e61f +Subproject commit 7ce74c1e63f3d3a18056c7d5d721dd2e584379a8 diff --git a/lib/ui-library b/lib/ui-library index 3f97137cef1..2af728c7dc3 160000 --- a/lib/ui-library +++ b/lib/ui-library @@ -1 +1 @@ -Subproject commit 3f97137cef11b99042ee8bcc96ff0dfe5dcf84e4 +Subproject commit 2af728c7dc39fab19089f669563ed05d8ceb1943 diff --git a/locale/en/submission.po b/locale/en/submission.po index 99e78aef28e..6c04093865a 100644 --- a/locale/en/submission.po +++ b/locale/en/submission.po @@ -166,9 +166,54 @@ msgstr "" msgid "galley.publicationNotFound" msgstr "The publication for this galley could not be found." +msgid "publication.access" +msgstr "Access" + +msgid "publication.assignToIssue.description" +msgstr "Choose whether to publish this now or include it in an issue." + msgid "publication.assignToissue" msgstr "Assign to Issue" +msgid "publication.categories.description" +msgstr "Assign categories to help organize and filter this publication." + +msgid "publication.coverImage.description" +msgstr "Upload an image to represent this publication." + +msgid "publication.display" +msgstr "Display" + +msgid "publication.insertContent.empty" +msgstr "No saved summaries found for this submission's review revisions." + +msgid "publication.pages.description" +msgstr "Enter page numbers for this publication, if applicable." + +msgid "publication.placement" +msgstr "Placement" + +msgid "publication.publicationDate" +msgstr "Publication Date" + +msgid "publication.publicationSettings" +msgstr "Publication Settings" + +msgid "publication.publicationSettings.urlPath.description" +msgstr "Set a custom URL for this publication, or leave blank to use the default." + +msgid "publication.publicationTiming" +msgstr "Publication Timing" + +msgid "publication.section.description" +msgstr "Choose the journal section where this publication will appear." + +msgid "publication.summaryOfChanges.description" +msgstr "This will appear publicly as the version amendment notice. Ensure it accurately reflects the changes made in this version before publishing." + +msgid "publication.versionAndUpdates" +msgstr "Version and Updates" + msgid "publication.assignedToIssue" msgstr "" "This has been assigned to {$issueName} but it " diff --git a/pages/dashboard/DashboardHandler.php b/pages/dashboard/DashboardHandler.php index cf5d8f9be11..ef7fe1db3f3 100644 --- a/pages/dashboard/DashboardHandler.php +++ b/pages/dashboard/DashboardHandler.php @@ -22,6 +22,7 @@ use APP\facades\Repo; use APP\template\TemplateManager; use PKP\pages\dashboard\PKPDashboardHandler; +use PKP\publication\enums\UpdateType; use PKP\submission\reviewer\recommendation\ReviewerRecommendation; class DashboardHandler extends PKPDashboardHandler @@ -56,6 +57,16 @@ public function setupIndex($request) ->filterByContextIds([$context->getId()]) ->getCount(); + $updateTypeOptions = []; + foreach (UpdateType::cases() as $updateType) { + $updateTypeOptions[] = [ + 'label' => $updateType->label(), + 'value' => $updateType->value, + ]; + } + $pageInitConfig['componentForms']['updateTypeOptions'] = $updateTypeOptions; + $pageInitConfig['componentForms']['defaultUpdateType'] = UpdateType::NEW_VERSION->value; + $templateMgr->setState(['pageInitConfig' => $pageInitConfig]); }