diff --git a/classes/publication/Repository.php b/classes/publication/Repository.php index 5acdb7f14e3..14ac18e1524 100644 --- a/classes/publication/Repository.php +++ b/classes/publication/Repository.php @@ -350,6 +350,14 @@ public function version(Publication $publication): int $citationDao->importCitations($newPublication->getId(), $newPublication->getData('citationsRaw')); } + $jatsFile = Repo::submissionFile() + ->getJatsFiles($publication->getData('submissionId'), $publication->getId()); + + if ($jatsFile) { + Repo::submissionFile() + ->versionSubmissionFile($jatsFile, $newPublication); + } + $newPublication = Repo::publication()->get($newPublication->getId()); Hook::call('Publication::version', [&$newPublication, $publication]); diff --git a/classes/submissionFile/Repository.php b/classes/submissionFile/Repository.php index 3a2ca1845b0..14bf8f92219 100644 --- a/classes/submissionFile/Repository.php +++ b/classes/submissionFile/Repository.php @@ -1010,6 +1010,49 @@ public function addJatsFile( return $submissionFile; } + /** + * Can be used to copy a SubmissionFile to another SubmissionFile along with the corresponding file + */ + public function versionSubmissionFile( + SubmissionFile $submissionFile, + Publication $newPublication + ): SubmissionFile + { + $newSubmissionFile = clone $submissionFile; + + $oldFileId = $submissionFile->getData('fileId'); + + $oldFile = Services::get('file')->get($oldFileId); + + $submission = Repo::submission()->get($newPublication->getData('submissionId')); + + $fileManager = new FileManager(); + $extension = $fileManager->parseFileExtension($oldFile->path); + + $submissionDir = Repo::submissionFile() + ->getSubmissionDir( + $submission->getData('contextId'), + $newPublication->getData('submissionId') + ); + + $newFileId = Services::get('file')->add( + Config::getVar('files', 'files_dir') . '/' . $oldFile->path, + $submissionDir . '/' . uniqid() . '.' . $extension + ); + + $newSubmissionFile->setData('id', null); + $newSubmissionFile->setData('assocId', $newPublication->getId()); + $newSubmissionFile->setData('fileId', $newFileId); + + $submissionFileId = Repo::submissionFile() + ->add($newSubmissionFile); + + $submissionFile = Repo::submissionFile() + ->get($submissionFileId); + + return $submissionFile; + } + /** * Function to get the Context's genres */