diff --git a/classes/components/forms/publication/PublishForm.php b/classes/components/forms/publication/PublishForm.php
index 9ac04e3aaf..acc812c931 100644
--- a/classes/components/forms/publication/PublishForm.php
+++ b/classes/components/forms/publication/PublishForm.php
@@ -1,4 +1,5 @@
$submitLabel,
],
]);
+
+ // If publication does not have a version stage assigned
+ $publicationVersion = $publication->getVersion();
+ if (!isset($publicationVersion)) {
+ $submission = Repo::submission()->get($publication->getData('submissionId'));
+ $nextVersion = Repo::submission()->getNextAvailableVersion($submission, Publication::DEFAULT_VERSION_STAGE, false);
+
+ $msg .= '
' . __('publication.required.versionStage') . '
';
+ $msg .= '' . __('publication.required.versionStage.assignment', [
+ 'versionString' => $nextVersion
+ ]) . '
';
+ } else {
+ $msg .= '' . __('publication.required.versionStage.alreadyAssignment', [
+ 'versionString' => $publicationVersion
+ ]) . '
';
+ }
} else {
$msg = '' . __('publication.publish.requirements') . '
';
$msg .= '';
diff --git a/classes/migration/install/OPSMigration.php b/classes/migration/install/OPSMigration.php
index 5db8ab093b..169248aed0 100644
--- a/classes/migration/install/OPSMigration.php
+++ b/classes/migration/install/OPSMigration.php
@@ -14,6 +14,7 @@
namespace APP\migration\install;
+use APP\publication\enums\VersionStage;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Schema;
@@ -87,12 +88,21 @@ public function up(): void
$table->tinyInteger('status')->default(1); // PKPSubmission::STATUS_QUEUED
$table->string('url_path', 64)->nullable();
- $table->bigInteger('version')->nullable();
$table->index(['url_path'], 'publications_url_path');
$table->bigInteger('doi_id')->nullable();
$table->foreign('doi_id')->references('doi_id')->on('dois')->nullOnDelete();
$table->index(['doi_id'], 'publications_doi_id');
+
+ $table->enum('version_stage', array_column(VersionStage::cases(), 'value'))->nullable();
+ $table->integer('version_minor')->nullable();
+ $table->integer('version_major')->nullable();
+ $table->datetime('created_at')->after('date_published');
+
+ $table->bigInteger('source_publication_id')->nullable()->after('publication_id');
+ $table->foreign('source_publication_id', 'publications_source_publication_id')
+ ->references('publication_id')->on('publications')->nullOnDelete();
+ $table->index(['source_publication_id'], 'publications_source_publication_id_index');
});
// The following foreign key relationships are for tables defined in SubmissionsMigration
// but they depend on publications to exist so are created here.
diff --git a/classes/publication/DAO.php b/classes/publication/DAO.php
index d063ecc55d..b3d6f9b9e3 100644
--- a/classes/publication/DAO.php
+++ b/classes/publication/DAO.php
@@ -28,8 +28,12 @@ class DAO extends \PKP\publication\DAO
'submissionId' => 'submission_id',
'status' => 'status',
'urlPath' => 'url_path',
- 'version' => 'version',
- 'doiId' => 'doi_id'
+ 'doiId' => 'doi_id',
+ 'versionStage' => 'version_stage',
+ 'versionMinor' => 'version_minor',
+ 'versionMajor' => 'version_major',
+ 'createdAt' => 'created_at',
+ 'sourcePublicationId' => 'source_publication_id'
];
/**
diff --git a/classes/publication/Publication.php b/classes/publication/Publication.php
index 342fcc6a77..5461d7e8e1 100644
--- a/classes/publication/Publication.php
+++ b/classes/publication/Publication.php
@@ -20,10 +20,13 @@
use APP\core\Application;
use APP\file\PublicFileManager;
+use APP\publication\enums\VersionStage;
use PKP\publication\PKPPublication;
class Publication extends PKPPublication
{
+ public const DEFAULT_VERSION_STAGE = VersionStage::AUTHOR_ORIGINAL;
+
public const PUBLICATION_RELATION_NONE = 1;
public const PUBLICATION_RELATION_PUBLISHED = 3;
diff --git a/classes/publication/Repository.php b/classes/publication/Repository.php
index 0b30147ce7..890c57b5f9 100644
--- a/classes/publication/Repository.php
+++ b/classes/publication/Repository.php
@@ -15,6 +15,7 @@
use APP\core\Application;
use APP\facades\Repo;
+use APP\publication\enums\VersionStage;
use APP\submission\Submission;
use Illuminate\Support\Facades\App;
use PKP\context\Context;
@@ -96,9 +97,9 @@ public function validate($publication, array $props, Submission $submission, Con
}
/** @copydoc \PKP\publication\Repository::version() */
- public function version(Publication $publication): int
+ public function version(Publication $publication, ?VersionStage $versionStage = null, bool $isMinorVersion = true): int
{
- $newId = parent::version($publication);
+ $newId = parent::version($publication, $versionStage, $isMinorVersion);
$context = Application::get()->getRequest()->getContext();
diff --git a/classes/publication/enums/VersionStage.php b/classes/publication/enums/VersionStage.php
new file mode 100644
index 0000000000..81d52f03ff
--- /dev/null
+++ b/classes/publication/enums/VersionStage.php
@@ -0,0 +1,36 @@
+ 'publication.versionStage.authorOriginal',
+ self::SUBMITTED_MANUSCRIPT => 'publication.versionStage.submittedManuscript',
+ };
+ }
+
+ public function label(?string $locale = null): string
+ {
+ return __($this->labelKey(), locale: $locale);
+ }
+}
diff --git a/dbscripts/xml/upgrade.xml b/dbscripts/xml/upgrade.xml
index f0a0ea71c8..03ea2bec04 100644
--- a/dbscripts/xml/upgrade.xml
+++ b/dbscripts/xml/upgrade.xml
@@ -164,11 +164,15 @@
+
-
-
+
+
+
+
+
diff --git a/locale/en/submission.po b/locale/en/submission.po
index 1c0bcb6f90..21a1e46767 100644
--- a/locale/en/submission.po
+++ b/locale/en/submission.po
@@ -244,4 +244,10 @@ msgstr "Add any information that you think our moderators should know before pos
msgid "submission.copyright.description"
msgstr ""
"Please read and understand the copyright terms for submissions to this "
-"preprint server."
\ No newline at end of file
+"preprint server."
+
+msgid "publication.versionStage.authorOriginal"
+msgstr "Author Original"
+
+msgid "publication.versionStage.submittedManuscript"
+msgstr "Submitted Manuscript"
\ No newline at end of file
diff --git a/templates/frontend/objects/preprint_details.tpl b/templates/frontend/objects/preprint_details.tpl
index f23e3d6b21..92b87e9d12 100644
--- a/templates/frontend/objects/preprint_details.tpl
+++ b/templates/frontend/objects/preprint_details.tpl
@@ -340,7 +340,7 @@
{foreach from=array_reverse($preprint->getPublishedPublications()) item=iPublication}
- {capture assign="name"}{translate key="submission.versionIdentity" datePublished=$iPublication->getData('datePublished')|date_format:$dateFormatShort version=$iPublication->getData('version')}{/capture}
+ {capture assign="name"}{translate key="submission.versionIdentity" datePublished=$iPublication->getData('datePublished')|date_format:$dateFormatShort version=$iPublication->getData('versionString')}{/capture}
-
{if $iPublication->getId() === $publication->getId()}
{$name}