first commit
This commit is contained in:
@@ -0,0 +1,212 @@
|
||||
<?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');
|
||||
}
|
||||
Reference in New Issue
Block a user