Open Journal Systems  3.3.0
DOIPubIdExportPlugin.inc.php
1 <?php
2 
16 import('classes.plugins.PubObjectsExportPlugin');
17 
18 // Configuration errors.
19 define('DOI_EXPORT_CONFIG_ERROR_DOIPREFIX', 0x01);
20 
21 // The name of the setting used to save the registered DOI.
22 define('DOI_EXPORT_REGISTERED_DOI', 'registeredDoi');
23 
28  function display($args, $request) {
29  parent::display($args, $request);
30  $context = $request->getContext();
31  switch (array_shift($args)) {
32  case 'index':
33  case '':
34  $templateMgr = TemplateManager::getManager($request);
35  // Check for configuration errors:
36  $configurationErrors = $templateMgr->getTemplateVars('configurationErrors');
37  // missing DOI prefix
38  $doiPrefix = null;
39  $pubIdPlugins = PluginRegistry::loadCategory('pubIds', true);
40  if (isset($pubIdPlugins['doipubidplugin'])) {
41  $doiPlugin = $pubIdPlugins['doipubidplugin'];
42  $doiPrefix = $doiPlugin->getSetting($context->getId(), $doiPlugin->getPrefixFieldName());
43  $templateMgr->assign(array(
44  'exportArticles' => $doiPlugin->getSetting($context->getId(), 'enablePublicationDoi'),
45  'exportIssues' => $doiPlugin->getSetting($context->getId(), 'enableIssueDoi'),
46  'exportRepresentations' => $doiPlugin->getSetting($context->getId(), 'enableRepresentationDoi'),
47  ));
48  }
49  if (empty($doiPrefix)) {
50  $configurationErrors[] = DOI_EXPORT_CONFIG_ERROR_DOIPREFIX;
51  }
52  $templateMgr->display($this->getTemplateResource('index.tpl'));
53  break;
54  }
55  }
56 
61  function getPubIdType() {
62  return 'doi';
63  }
64 
69  function getPubIdDisplayType() {
70  return 'DOI';
71  }
72 
78  function markRegistered($context, $objects) {
79  foreach ($objects as $object) {
80  $object->setData($this->getDepositStatusSettingName(), EXPORT_STATUS_MARKEDREGISTERED);
81  $this->saveRegisteredDoi($context, $object);
82  }
83  }
84 
96  function saveRegisteredDoi($context, $object, $testPrefix = '10.1234') {
97  $registeredDoi = $object->getStoredPubId('doi');
98  assert(!empty($registeredDoi));
99  if ($this->isTestMode($context)) {
100  $registeredDoi = PKPString::regexp_replace('#^[^/]+/#', $testPrefix . '/', $registeredDoi);
101  }
102  $object->setData($this->getPluginSettingsPrefix() . '::' . DOI_EXPORT_REGISTERED_DOI, $registeredDoi);
103  $this->updateObject($object);
104  }
105 
110  protected function _getObjectAdditionalSettings() {
111  return array_merge(parent::_getObjectAdditionalSettings(), array(
112  $this->getPluginSettingsPrefix() . '::' . DOI_EXPORT_REGISTERED_DOI
113  ));
114  }
115 
121  function getUnregisteredArticles($context) {
122  // Retrieve all published submissions that have not yet been registered.
123  $submissionDao = DAORegistry::getDAO('SubmissionDAO'); /* @var $submissionDao SubmissionDAO */
124  $articles = $submissionDao->getExportable(
125  $context->getId(),
126  $this->getPubIdType(),
127  null,
128  null,
129  null,
130  $this->getPluginSettingsPrefix(). '::' . DOI_EXPORT_REGISTERED_DOI,
131  null,
132  null
133  );
134  return $articles->toArray();
135  }
136 
142  function getUnregisteredIssues($context) {
143  // Retrieve all issues that have not yet been registered.
144  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
145  $issuesFactory = $issueDao->getExportable(
146  $context->getId(),
147  $this->getPubIdType(),
148  $this->getPluginSettingsPrefix(). '::' . DOI_EXPORT_REGISTERED_DOI,
149  null,
150  null
151  );
152  $issues = $issuesFactory->toArray();
153  // Cache issues.
154  $cache = $this->getCache();
155  foreach ($issues as $issue) {
156  $cache->add($issue, null);
157  unset($issue);
158  }
159  return $issues;
160  }
161 
167  function getUnregisteredGalleys($context) {
168  // Retrieve all galleys that have not yet been registered.
169  $galleyDao = DAORegistry::getDAO('ArticleGalleyDAO'); /* @var $galleyDao ArticleGalleyDAO */
170  $galleys = $galleyDao->getExportable(
171  $context?$context->getId():null,
172  $this->getPubIdType(),
173  null,
174  null,
175  null,
176  $this->getPluginSettingsPrefix(). '::' . DOI_EXPORT_REGISTERED_DOI,
177  null,
178  null
179  );
180  return $galleys->toArray();
181  }
182 
189  function getPublishedSubmissions($submissionIds, $context) {
190  $submissions = array_map(function($submissionId) {
191  return Services::get('submission')->get($submissionId);
192  }, $submissionIds);
193  return array_filter($submissions, function($submission) {
194  return $submission->getData('status') === STATUS_PUBLISHED && !!$submission->getStoredPubId('doi');
195  });
196  }
197 
204  function getPublishedIssues($issueIds, $context) {
205  $publishedIssues = array();
206  $issueDao = DAORegistry::getDAO('IssueDAO'); /* @var $issueDao IssueDAO */
207  foreach ($issueIds as $issueId) {
208  $publishedIssue = $issueDao->getById($issueId, $context->getId());
209  if ($publishedIssue && $publishedIssue->getStoredPubId('doi')) $publishedIssues[] = $publishedIssue;
210  }
211  return $publishedIssues;
212  }
213 
219  function getArticleGalleys($galleyIds) {
220  $galleys = array();
221  $articleGalleyDao = DAORegistry::getDAO('ArticleGalleyDAO'); /* @var $articleGalleyDao ArticleGalleyDAO */
222  foreach ($galleyIds as $galleyId) {
223  $articleGalley = $articleGalleyDao->getById($galleyId);
224  if ($articleGalley && $articleGalley->getStoredPubId('doi')) $galleys[] = $articleGalley;
225  }
226  return $galleys;
227  }
228 }
229 
230 
PubObjectsExportPlugin\getCache
getCache()
Definition: PubObjectsExportPlugin.inc.php:44
PKPString\regexp_replace
static regexp_replace($pattern, $replacement, $subject, $limit=-1)
Definition: PKPString.inc.php:279
PubObjectsExportPlugin\getDepositStatusSettingName
getDepositStatusSettingName()
Definition: PubObjectsExportPlugin.inc.php:521
DOIPubIdExportPlugin\getPubIdType
getPubIdType()
Definition: DOIPubIdExportPlugin.inc.php:61
DOIPubIdExportPlugin\getUnregisteredGalleys
getUnregisteredGalleys($context)
Definition: DOIPubIdExportPlugin.inc.php:167
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DOIPubIdExportPlugin
Basis class for DOI XML metadata export plugins.
Definition: DOIPubIdExportPlugin.inc.php:24
PubObjectsExportPlugin\isTestMode
isTestMode($context)
Definition: PubObjectsExportPlugin.inc.php:513
DOIPubIdExportPlugin\_getObjectAdditionalSettings
_getObjectAdditionalSettings()
Definition: DOIPubIdExportPlugin.inc.php:110
PluginRegistry\loadCategory
static loadCategory($category, $enabledOnly=false, $mainContextId=null)
Definition: PluginRegistry.inc.php:103
DOIPubIdExportPlugin\saveRegisteredDoi
saveRegisteredDoi($context, $object, $testPrefix='10.1234')
Definition: DOIPubIdExportPlugin.inc.php:96
DOIPubIdExportPlugin\markRegistered
markRegistered($context, $objects)
Definition: DOIPubIdExportPlugin.inc.php:78
DOIPubIdExportPlugin\getPublishedIssues
getPublishedIssues($issueIds, $context)
Definition: DOIPubIdExportPlugin.inc.php:204
DOIPubIdExportPlugin\getPublishedSubmissions
getPublishedSubmissions($submissionIds, $context)
Definition: DOIPubIdExportPlugin.inc.php:189
DOIPubIdExportPlugin\getArticleGalleys
getArticleGalleys($galleyIds)
Definition: DOIPubIdExportPlugin.inc.php:219
DOIPubIdExportPlugin\getUnregisteredArticles
getUnregisteredArticles($context)
Definition: DOIPubIdExportPlugin.inc.php:121
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
ImportExportPlugin\getPluginSettingsPrefix
getPluginSettingsPrefix()
Definition: ImportExportPlugin.inc.php:132
PubObjectsExportPlugin
Basis class for XML metadata export plugins.
Definition: PubObjectsExportPlugin.inc.php:33
Plugin\getTemplateResource
getTemplateResource($template=null, $inCore=false)
Definition: Plugin.inc.php:349
PubObjectsExportPlugin\updateObject
updateObject($object)
Definition: PubObjectsExportPlugin.inc.php:421
Plugin\$request
$request
Definition: Plugin.inc.php:68
DOIPubIdExportPlugin\display
display($args, $request)
Definition: DOIPubIdExportPlugin.inc.php:28
DOIPubIdExportPlugin\getUnregisteredIssues
getUnregisteredIssues($context)
Definition: DOIPubIdExportPlugin.inc.php:142
PKPServices\get
static get($service)
Definition: PKPServices.inc.php:49
DOIPubIdExportPlugin\getPubIdDisplayType
getPubIdDisplayType()
Definition: DOIPubIdExportPlugin.inc.php:69