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]);
}