diff --git a/classes/components/forms/publication/CatalogEntryForm.php b/classes/components/forms/publication/CatalogEntryForm.php
index 04207be11e9..c785a22a700 100644
--- a/classes/components/forms/publication/CatalogEntryForm.php
+++ b/classes/components/forms/publication/CatalogEntryForm.php
@@ -21,14 +21,23 @@
use APP\publication\Publication;
use APP\submission\Submission;
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 CatalogEntryForm extends FormComponent
{
public const FORM_CATALOG_ENTRY = 'catalogEntry';
+
+ 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_CATALOG_ENTRY;
public $method = 'PUT';
@@ -51,6 +60,13 @@ public function __construct($action, $locales, $publication, $submission, $baseU
$this->successMessage = __('publication.catalogEntry.success');
$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')]);
+
// Series options
$seriesOptions = [['value' => '', 'label' => '']];
$result = Repo::section()
@@ -64,16 +80,16 @@ public function __construct($action, $locales, $publication, $submission, $baseU
];
}
- $this->addField(new FieldText('datePublished', [
- 'label' => __('publication.datePublished'),
- 'value' => $publication->getData('datePublished'),
- ]))
+ $this
->addField(new FieldSelect('seriesId', [
+ 'groupId' => self::GROUP_PLACEMENT,
'label' => __('series.series'),
+ 'description' => __('publication.series.description'),
'value' => $publication->getData('seriesId'),
'options' => $seriesOptions,
]))
->addField(new FieldText('seriesPosition', [
+ 'groupId' => self::GROUP_PLACEMENT,
'label' => __('submission.submit.seriesPosition'),
'description' => __('submission.submit.seriesPosition.description'),
'value' => $publication->getData('seriesPosition'),
@@ -99,9 +115,10 @@ public function __construct($action, $locales, $publication, $submission, $baseU
$vocabulary = Repo::category()->getCategoryVocabularyStructure($categories);
$this->addField(new FieldAutosuggestPreset('categoryIds', [
+ 'groupId' => self::GROUP_PLACEMENT,
'label' => __('submission.submit.placement.categories'),
'value' => (array) $publication->getData('categoryIds'),
- 'description' => $hasAllBreadcrumbs ? '' : __('submission.categories.circularReferenceWarning'),
+ 'description' => __('publication.categories.description') . ($hasAllBreadcrumbs ? '' : ' ' . __('submission.categories.circularReferenceWarning')),
'options' => $categoryOptions,
'vocabularies' => [
[
@@ -113,19 +130,47 @@ public function __construct($action, $locales, $publication, $submission, $baseU
]));
}
- $this->addField(new FieldText('urlPath', [
- 'label' => __('publication.urlPath'),
- 'description' => __('publication.urlPath.description'),
- 'value' => $publication->getData('urlPath'),
- ]))
+ $this
+ ->addField(new FieldText('datePublished', [
+ 'groupId' => self::GROUP_PUBLICATION_TIMING,
+ 'label' => __('publication.datePublished'),
+ 'description' => __('publication.datePublished.description'),
+ 'value' => $publication->getData('datePublished'),
+ ]))
+ ->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' => __('monograph.coverImage'),
+ 'description' => __('publication.coverImage.description'),
'value' => $publication->getData('coverImage'),
'isMultilingual' => true,
'baseUrl' => $baseUrl,
'options' => [
'url' => $temporaryFileApiUrl,
],
+ ]))
+ ->addField(new FieldText('urlPath', [
+ 'groupId' => self::GROUP_ACCESS,
+ 'label' => __('publication.urlPath'),
+ 'description' => __('publication.urlPath.description'),
+ 'value' => $publication->getData('urlPath'),
]));
}
}
diff --git a/classes/migration/install/OMPMigration.php b/classes/migration/install/OMPMigration.php
index 0c64458a66b..595724e0ae4 100644
--- a/classes/migration/install/OMPMigration.php
+++ b/classes/migration/install/OMPMigration.php
@@ -17,6 +17,7 @@
use APP\publication\enums\VersionStage;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
+use PKP\publication\enums\UpdateType;
class OMPMigration extends \PKP\migration\Migration
{
@@ -61,6 +62,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'))->default(UpdateType::NEW_VERSION->value);
$table->datetime('created_at')->useCurrent();
$table->bigInteger('source_publication_id')->nullable();
diff --git a/classes/publication/DAO.php b/classes/publication/DAO.php
index b5f6929763a..bb65a27ac15 100644
--- a/classes/publication/DAO.php
+++ b/classes/publication/DAO.php
@@ -38,6 +38,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/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml
index 9d4d82337f7..baa471caf35 100644
--- a/dbscripts/xml/upgrade.xml
+++ b/dbscripts/xml/upgrade.xml
@@ -209,6 +209,7 @@
+
diff --git a/js/load.js b/js/load.js
index 4fd384ba18e..e41d19d94bc 100644
--- a/js/load.js
+++ b/js/load.js
@@ -35,6 +35,7 @@ import StatsPublicationsPage from '@/components/Container/StatsPublicationsPage.
import StatsContextPage from '@/components/Container/StatsContextPage.vue';
import StatsUsersPage from '@/components/Container/StatsUsersPage.vue';
import SubmissionWizardPage from '@/components/Container/SubmissionWizardPageOMP.vue';
+import FileMetadataForm from '@/managers/FileManager/modals/FileMetadataForm.vue';
import ManageCatalogPage from '@/components/Container/ManageCatalogPage.vue';
// Helper for initializing and tracking Vue controllers
@@ -64,5 +65,6 @@ window.pkp = Object.assign(PkpLoad, window.pkp || {}, {
StatsContextPage,
StatsUsersPage,
SubmissionWizardPage,
+ FileMetadataForm,
},
});
diff --git a/lib/pkp b/lib/pkp
index 8bf6a6f06b1..e96710a4d7e 160000
--- a/lib/pkp
+++ b/lib/pkp
@@ -1 +1 @@
-Subproject commit 8bf6a6f06b1626fdb3d1612e17a6acab6ad8ffab
+Subproject commit e96710a4d7e75e75b9741fe1a23bee397e707fa9
diff --git a/lib/ui-library b/lib/ui-library
index 8e19a90b337..1649e48ef88 160000
--- a/lib/ui-library
+++ b/lib/ui-library
@@ -1 +1 @@
-Subproject commit 8e19a90b337946a273d3d94116beb1f2d96d5331
+Subproject commit 1649e48ef88f7ff1ec00a3c2bc30e842c427732f
diff --git a/locale/en/submission.po b/locale/en/submission.po
index 677f07610da..e55eb940226 100644
--- a/locale/en/submission.po
+++ b/locale/en/submission.po
@@ -387,6 +387,15 @@ msgstr ""
msgid "publication.datePublished"
msgstr "Date Published"
+msgid "publication.datePublished.description"
+msgstr ""
+"The publication date will be set automatically when the catalog entry is "
+"published. Do not enter a publication date unless this work was previously "
+"published elsewhere and you need to backdate it."
+
+msgid "publication.series.description"
+msgstr "Choose the series where this publication will appear."
+
msgid "publication.editDisabled"
msgstr "This version has been published and can not be edited."
diff --git a/pages/dashboard/DashboardHandler.php b/pages/dashboard/DashboardHandler.php
index 9d932f525eb..47aa016e6ea 100644
--- a/pages/dashboard/DashboardHandler.php
+++ b/pages/dashboard/DashboardHandler.php
@@ -23,6 +23,7 @@
use APP\template\TemplateManager;
use PKP\decision\Decision;
use PKP\pages\dashboard\PKPDashboardHandler;
+use PKP\publication\enums\UpdateType;
use PKP\submissionFile\SubmissionFile;
class DashboardHandler extends PKPDashboardHandler
@@ -42,6 +43,18 @@ public function setupIndex($request)
'pageComponent' => 'Page',
]);
+ $updateTypeOptions = [];
+ foreach (UpdateType::cases() as $updateType) {
+ $updateTypeOptions[] = [
+ 'label' => $updateType->label(),
+ 'value' => $updateType->value,
+ ];
+ }
+ $pageInitConfig = $templateMgr->getState('pageInitConfig');
+ $pageInitConfig['componentForms']['updateTypeOptions'] = $updateTypeOptions;
+ $pageInitConfig['componentForms']['defaultUpdateType'] = UpdateType::NEW_VERSION->value;
+ $templateMgr->setState(['pageInitConfig' => $pageInitConfig]);
+
$templateMgr->setConstants([
'DECISION_INTERNAL_REVIEW' => Decision::INTERNAL_REVIEW,
'DECISION_RECOMMEND_EXTERNAL_REVIEW' => Decision::RECOMMEND_EXTERNAL_REVIEW,