[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
baru
/
classes
/
publication
/
[
Home
]
File: Repository.php
<?php /** * @file classes/publication/Repository.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2000-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class Repository * * @brief Get publications and information about publications */ namespace APP\publication; use APP\core\Application; use APP\core\Services; use APP\facades\Repo; use APP\payment\ojs\OJSCompletedPaymentDAO; use APP\payment\ojs\OJSPaymentManager; use APP\submission\Submission; use Illuminate\Support\Facades\App; use PKP\context\Context; use PKP\core\Core; use PKP\core\PKPString; use PKP\db\DAORegistry; use PKP\publication\Collector; class Repository extends \PKP\publication\Repository { /** @copydoc \PKP\submission\Repository::$schemaMap */ public $schemaMap = maps\Schema::class; public function getCollector(): Collector { return App::makeWith(Collector::class, ['dao' => $this->dao]); } /** @copydoc PKP\publication\Repository::validate() */ public function validate($publication, array $props, Submission $submission, Context $context): array { $errors = parent::validate($publication, $props, $submission, $context); $allowedLocales = $context->getSupportedSubmissionLocales(); $primaryLocale = $submission->getLocale(); // Ensure that the specified section exists $section = null; if (isset($props['sectionId'])) { $section = Repo::section()->get($props['sectionId'], $context->getId()); if (!$section) { $errors['sectionId'] = [__('publication.invalidSection')]; } } // Get the section so we can validate section abstract requirements if (!$section && !is_null($publication)) { $section = Repo::section()->get($publication->getData('sectionId'), $context->getId()); } // Only validate section settings for completed submissions if ($section && !$submission->getData('submissionProgress')) { // Require abstracts for new publications if the section requires them if (is_null($publication) && !$section->getData('abstractsNotRequired') && empty($props['abstract'])) { $errors['abstract'][$primaryLocale] = [__('author.submit.form.abstractRequired')]; } if (isset($props['abstract']) && empty($errors['abstract'])) { // Require abstracts in the primary language if the section requires them if (!$section->getData('abstractsNotRequired')) { if (empty($props['abstract'][$primaryLocale])) { if (!isset($errors['abstract'])) { $errors['abstract'] = []; }; $errors['abstract'][$primaryLocale] = [__('author.submit.form.abstractRequired')]; } } // Check the word count on abstracts foreach ($allowedLocales as $localeKey) { if (empty($props['abstract'][$localeKey])) { continue; } $wordCount = PKPString::getWordCount($props['abstract'][$localeKey]); $wordCountLimit = $section->getData('wordCount'); if ($wordCountLimit && $wordCount > $wordCountLimit) { if (!isset($errors['abstract'])) { $errors['abstract'] = []; }; $errors['abstract'][$localeKey] = [__('publication.wordCountLong', ['limit' => $wordCountLimit, 'count' => $wordCount])]; } } } } // Ensure that the issueId exists if (isset($props['issueId']) && empty($errors['issueId'])) { if (!Repo::issue()->exists($props['issueId'])) { $errors['issueId'] = [__('publication.invalidIssue')]; } } return $errors; } /** @copydoc PKP\publication\Repository::validatePublish() */ public function validatePublish(Publication $publication, Submission $submission, array $allowedLocales, string $primaryLocale): array { $errors = parent::validatePublish($publication, $submission, $allowedLocales, $primaryLocale); // Every publication must be scheduled in an issue if (!$publication->getData('issueId') || !Repo::issue()->get($publication->getData('issueId'))) { $errors['issueId'] = __('publication.required.issue'); } // If submission fees are enabled, check that they're fulfilled $context = Application::get()->getRequest()->getContext(); if (!$context || $context->getId() !== $submission->getData('contextId')) { $context = Services::get('context')->get($submission->getData('contextId')); } $paymentManager = Application::getPaymentManager($context); $completedPaymentDao = DAORegistry::getDAO('OJSCompletedPaymentDAO'); /** @var OJSCompletedPaymentDAO $completedPaymentDao */ $publicationFeeEnabled = $paymentManager->publicationEnabled(); $publicationFeePayment = $completedPaymentDao->getByAssoc(null, OJSPaymentManager::PAYMENT_TYPE_PUBLICATION, $submission->getId()); if ($publicationFeeEnabled && !$publicationFeePayment) { $errors['publicationFeeStatus'] = __('editor.article.payment.publicationFeeNotPaid'); } return $errors; } /** @copydoc \PKP\publication\Repository::version() */ public function version(Publication $publication): int { $newId = parent::version($publication); $context = Application::get()->getRequest()->getContext(); $galleys = $publication->getData('galleys'); $isDoiVersioningEnabled = $context->getData(Context::SETTING_DOI_VERSIONING); if (!empty($galleys)) { foreach ($galleys as $galley) { $newGalley = clone $galley; $newGalley->setData('id', null); $newGalley->setData('publicationId', $newId); if ($isDoiVersioningEnabled) { $newGalley->setData('doiId', null); } Repo::galley()->add($newGalley); } } return $newId; } /** @copydoc \PKP\publication\Repository::setStatusOnPublish() */ protected function setStatusOnPublish(Publication $publication) { // A publication may be scheduled in a future issue. In such cases, // the `datePublished` should remain empty and the status should be set to // scheduled. // // If there is no assigned issue, the journal may be using a continuous // publishing model in which articles are published right away. $issue = Repo::issue()->get($publication->getData('issueId')); if ($issue && !$issue->getData('published')) { $publication->setData('datePublished', null); $publication->setData('status', Submission::STATUS_SCHEDULED); } else { $publication->setData('status', Submission::STATUS_PUBLISHED); if (!$publication->getData('datePublished')) { $publication->setData('datePublished', Core::getCurrentDate()); } } } /** @copydoc \PKP\publication\Repository::delete() */ public function delete(Publication $publication) { $galleys = Repo::galley()->getCollector() ->filterByPublicationIds([$publication->getId()]) ->getMany(); foreach ($galleys as $galley) { Repo::galley()->delete($galley); } parent::delete($publication); } /** * Create all DOIs associated with the publication. * * @throws \Exception */ protected function createDois(Publication $newPublication): void { $submission = Repo::submission()->get($newPublication->getData('submissionId')); Repo::submission()->createDois($submission); } }