[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
classes
/
plugins
/
[
Home
]
File: DOIPubIdExportPlugin.php
<?php /** * @file classes/plugins/DOIPubIdExportPlugin.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2003-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class DOIPubIdExportPlugin * * @ingroup plugins * * @brief Basis class for DOI XML metadata export plugins */ namespace APP\plugins; use APP\facades\Repo; use APP\issue\Issue; use APP\journal\Journal; use APP\submission\Submission; use APP\template\TemplateManager; use PKP\core\PKPString; use PKP\galley\Galley; use PKP\submission\PKPSubmission; // Configuration errors. define('DOI_EXPORT_CONFIG_ERROR_DOIPREFIX', 0x01); // The name of the setting used to save the registered DOI. define('DOI_EXPORT_REGISTERED_DOI', 'registeredDoi'); abstract class DOIPubIdExportPlugin extends PubObjectsExportPlugin { /** * @copydoc ImportExportPlugin::display() */ public function display($args, $request) { switch (array_shift($args)) { case 'index': case '': $templateMgr = TemplateManager::getManager($request); $templateMgr->display($this->getTemplateResource('index.tpl')); break; default: parent::display($args, $request); } } /** * Get pub ID type * * @return string */ public function getPubIdType() { return 'doi'; } /** * Get pub ID display type * * @return string */ public function getPubIdDisplayType() { return 'DOI'; } /** * Mark selected submissions or issues as registered. * * @param Journal $context * @param array $objects Array of published submissions, issues or galleys */ public function markRegistered($context, $objects) { foreach ($objects as $object) { $doiId = $object->getData('doiId'); if ($doiId != null) { Repo::doi()->markRegistered($doiId); } } } /** * Saving object's DOI to the object's * "registeredDoi" setting. * We prefix the setting with the plugin's * id so that we do not get name clashes * when several DOI registration plug-ins * are active at the same time. * * @param Journal $context * @param Issue|Submission|Galley $object * @param string $testPrefix */ public function saveRegisteredDoi($context, $object, $testPrefix = '10.1234') { $registeredDoi = $object->getStoredPubId('doi'); assert(!empty($registeredDoi)); if ($this->isTestMode($context)) { $registeredDoi = PKPString::regexp_replace('#^[^/]+/#', $testPrefix . '/', $registeredDoi); } $object->setData($this->getPluginSettingsPrefix() . '::' . DOI_EXPORT_REGISTERED_DOI, $registeredDoi); $this->updateObject($object); } /** * Get a list of additional setting names that should be stored with the objects. * * @return array */ protected function _getObjectAdditionalSettings() { return array_merge(parent::_getObjectAdditionalSettings(), [ $this->getPluginSettingsPrefix() . '::' . DOI_EXPORT_REGISTERED_DOI ]); } /** * Get published submissions with a DOI assigned from submission IDs. * * @param array $submissionIds * @param Journal $context * * @return array */ public function getPublishedSubmissions($submissionIds, $context) { $allSubmissionIds = Repo::submission() ->getCollector() ->filterByContextIds([$context->getId()]) ->filterByStatus([PKPSubmission::STATUS_PUBLISHED]) ->getIds() ->toArray(); $validSubmissionIds = array_intersect($allSubmissionIds, $submissionIds); $submissions = array_map(function ($submissionId) { return Repo::submission()->get($submissionId); }, $validSubmissionIds); return array_filter($submissions, function ($submission) { return $submission->getCurrentPublication()->getDoi() !== null; }); } /** * Get published issues with a DOI assigned from issue IDs. * * @param array $issueIds * @param Journal $context * * @return array */ public function getPublishedIssues($issueIds, $context) { return Repo::issue() ->getCollector() ->filterByContextIds([$context->getId()]) ->filterByIssueIds($issueIds) ->filterByPublished(true) ->filterByHasDois(true) ->getMany() ->toArray(); } /** * Get article galleys with a DOI assigned from galley IDs. * * @param array $galleyIds * @param Journal $context * * @return array */ public function getArticleGalleys($galleyIds, $context) { $allGalleyIds = Repo::galley() ->getCollector() ->filterByContextIds([$context->getId()]) ->getIds() ->toArray(); $validGalleyIds = array_intersect($allGalleyIds, $galleyIds); $galleys = array_map(function ($galleyId) { return Repo::galley()->get($galleyId); }, $validGalleyIds); return array_filter($galleys, function ($galley) { return $galley->getDoi() !== null; }); } /** * @copydoc ImportExportPlugin::executeCLI() */ public function executeCLI($scriptName, &$args) { return; } /** * @copydoc ImportExportPlugin::supportsCLI() */ public function supportsCLI(): bool { return false; } } if (!PKP_STRICT_MODE) { class_alias('\APP\plugins\DOIPubIdExportPlugin', '\DOIPubIdExportPlugin'); }