109 lines
3.5 KiB
PHP
109 lines
3.5 KiB
PHP
<?php
|
|
/**
|
|
* @file classes/submissionFile/Repository.php
|
|
*
|
|
* Copyright (c) 2014-2020 Simon Fraser University
|
|
* Copyright (c) 2000-2020 John Willinsky
|
|
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
|
|
*
|
|
* @class Repository
|
|
*
|
|
* @brief A repository to find and manage submission files.
|
|
*/
|
|
|
|
namespace APP\submissionFile;
|
|
|
|
use APP\core\Application;
|
|
use APP\facades\Repo;
|
|
use Exception;
|
|
use Illuminate\Support\Facades\App;
|
|
use PKP\observers\events\SubmissionFileDeleted;
|
|
use PKP\plugins\Hook;
|
|
use PKP\submissionFile\Collector;
|
|
use PKP\submissionFile\Repository as BaseRepository;
|
|
use PKP\submissionFile\SubmissionFile;
|
|
|
|
class Repository extends BaseRepository
|
|
{
|
|
public array $reviewFileStages = [
|
|
SubmissionFile::SUBMISSION_FILE_REVIEW_REVISION,
|
|
SubmissionFile::SUBMISSION_FILE_REVIEW_ATTACHMENT,
|
|
SubmissionFile::SUBMISSION_FILE_REVIEW_FILE,
|
|
];
|
|
|
|
public function getCollector(): Collector
|
|
{
|
|
return App::makeWith(Collector::class, ['dao' => $this->dao]);
|
|
}
|
|
|
|
public function add(SubmissionFile $submissionFile): int
|
|
{
|
|
$galley = null;
|
|
|
|
if ($submissionFile->getData('assocType') === Application::ASSOC_TYPE_REPRESENTATION) {
|
|
$galley = Repo::galley()->get($submissionFile->getData('assocId'));
|
|
if (!$galley) {
|
|
throw new Exception('Galley not found when adding submission file.');
|
|
}
|
|
}
|
|
|
|
$submissionFileId = parent::add($submissionFile);
|
|
|
|
if ($galley) {
|
|
Repo::galley()->edit($galley, ['submissionFileId' => $submissionFile->getId()]);
|
|
}
|
|
|
|
return $submissionFileId;
|
|
}
|
|
|
|
public function delete(SubmissionFile $submissionFile): void
|
|
{
|
|
$this->deleteRelatedSubmissionFileObjects($submissionFile);
|
|
parent::delete($submissionFile);
|
|
}
|
|
|
|
/**
|
|
* Delete related objects when a submission file is deleted
|
|
*/
|
|
public function deleteRelatedSubmissionFileObjects(SubmissionFile $submissionFile): void
|
|
{
|
|
// Remove galley associations and update search index
|
|
if ($submissionFile->getData('assocType') === Application::ASSOC_TYPE_REPRESENTATION) {
|
|
$galley = Repo::galley()->get((int)$submissionFile->getData('assocId'));
|
|
if ($galley && $galley->getData('submissionFileId') == $submissionFile->getId()) {
|
|
$galley->_data['submissionFileId'] = null; // Work around pkp/pkp-lib#5740
|
|
Repo::galley()->edit($galley, []);
|
|
}
|
|
|
|
event(
|
|
new SubmissionFileDeleted(
|
|
(int)$submissionFile->getData('submissionId'),
|
|
(int)$submissionFile->getId()
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
public function getFileStages(): array
|
|
{
|
|
$stages = [
|
|
SubmissionFile::SUBMISSION_FILE_SUBMISSION,
|
|
SubmissionFile::SUBMISSION_FILE_NOTE,
|
|
SubmissionFile::SUBMISSION_FILE_REVIEW_FILE,
|
|
SubmissionFile::SUBMISSION_FILE_REVIEW_ATTACHMENT,
|
|
SubmissionFile::SUBMISSION_FILE_FINAL,
|
|
SubmissionFile::SUBMISSION_FILE_COPYEDIT,
|
|
SubmissionFile::SUBMISSION_FILE_PROOF,
|
|
SubmissionFile::SUBMISSION_FILE_PRODUCTION_READY,
|
|
SubmissionFile::SUBMISSION_FILE_ATTACHMENT,
|
|
SubmissionFile::SUBMISSION_FILE_REVIEW_REVISION,
|
|
SubmissionFile::SUBMISSION_FILE_DEPENDENT,
|
|
SubmissionFile::SUBMISSION_FILE_QUERY,
|
|
];
|
|
|
|
Hook::call('SubmissionFile::fileStages', [&$stages]);
|
|
|
|
return $stages;
|
|
}
|
|
}
|