Open Journal Systems  3.3.0
DublinCoreMetaPlugin.inc.php
1 <?php
2 
16 import('lib.pkp.classes.plugins.GenericPlugin');
17 
22  function register($category, $path, $mainContextId = null) {
23  if (parent::register($category, $path, $mainContextId)) {
24  if ($this->getEnabled($mainContextId)) {
25  HookRegistry::register('ArticleHandler::view',array(&$this, 'articleView'));
26  }
27  return true;
28  }
29  return false;
30  }
31 
38  return $this->getPluginPath() . '/settings.xml';
39  }
40 
47  function articleView($hookName, $args) {
48  $request = $args[0];
49  $issue = $args[1];
50  $article = $args[2];
51  $publication = $article->getCurrentPublication();
52  $requestArgs = $request->getRequestedArgs();
53  $journal = $request->getContext();
54 
55  // Only add Dublin Core metadata tags to the canonical URL for the latest version
56  // See discussion: https://github.com/pkp/pkp-lib/issues/4870
57  if (count($requestArgs) > 1 && $requestArgs[1] === 'version') {
58  return;
59  }
60 
61  $templateMgr = TemplateManager::getManager($request);
62  $templateMgr->addHeader('dublinCoreSchema', '<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />');
63 
64  $i=0;
65  if ($sponsors = $article->getSponsor(null)) foreach ($sponsors as $locale => $sponsor) {
66  $templateMgr->addHeader('dublinCoreSponsor' . $i++, '<meta name="DC.Contributor.Sponsor" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($sponsor)) . '"/>');
67  }
68 
69  $i=0;
70  if ($coverages = $article->getCoverage(null)) foreach($coverages as $locale => $coverage) {
71  $templateMgr->addHeader('dublinCoreCoverage' . $i++, '<meta name="DC.Coverage" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($coverage)) . '"/>');
72  }
73 
74  $i=0;
75  foreach ($article->getAuthors(true) as $author) {
76  $templateMgr->addHeader('dublinCoreAuthor' . $i++, '<meta name="DC.Creator.PersonalName" content="' . htmlspecialchars($author->getFullName(false)) . '"/>');
77  }
78 
79  if (is_a($article, 'Submission') && ($datePublished = $article->getDatePublished())) {
80  $templateMgr->addHeader('dublinCoreDateCreated', '<meta name="DC.Date.created" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($datePublished)) . '"/>');
81  }
82  $templateMgr->addHeader('dublinCoreDateSubmitted', '<meta name="DC.Date.dateSubmitted" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($article->getDateSubmitted())) . '"/>');
83  if ($issue && ($datePublished = $issue->getDatePublished())) {
84  $templateMgr->addHeader('dublinCoreDateIssued', '<meta name="DC.Date.issued" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($issue->getDatePublished())) . '"/>');
85  }
86  if ($dateModified = $article->getCurrentPublication()->getData('lastModified')) $templateMgr->addHeader('dublinCoreDateModified', '<meta name="DC.Date.modified" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($dateModified)) . '"/>');
87 
88  if ($publication) {
89  $i=0;
90  if ($abstracts = (array) $publication->getData('abstract')) foreach($abstracts as $locale => $abstract) {
91  $templateMgr->addHeader('dublinCoreAbstract' . $i++, '<meta name="DC.Description" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($abstract)) . '"/>');
92  }
93  }
94 
95  $i=0;
96  if (is_a($article, 'Submission')) foreach($article->getGalleys() as $galley) {
97  if (is_a($galley, 'SupplementaryFile')) continue;
98  $templateMgr->addHeader('dublinCoreFormat' . $i++, '<meta name="DC.Format" scheme="IMT" content="' . htmlspecialchars($galley->getFileType()) . '"/>');
99  }
100 
101  $templateMgr->addHeader('dublinCoreIdentifier', '<meta name="DC.Identifier" content="' . htmlspecialchars($article->getBestId()) . '"/>');
102 
103  if ($pages = $article->getPages()) {
104  $templateMgr->addHeader('dublinCorePages', '<meta name="DC.Identifier.pageNumber" content="' . htmlspecialchars($pages) . '"/>');
105  }
106 
107  foreach((array) $templateMgr->getTemplateVars('pubIdPlugins') as $pubIdPlugin) {
108  if ($pubId = $article->getStoredPubId($pubIdPlugin->getPubIdType())) {
109  $templateMgr->addHeader('dublinCorePubId' . $pubIdPlugin->getPubIdDisplayType(), '<meta name="DC.Identifier.' . htmlspecialchars($pubIdPlugin->getPubIdDisplayType()) . '" content="' . htmlspecialchars($pubId) . '"/>');
110  }
111  }
112 
113  $templateMgr->addHeader('dublinCoreUri', '<meta name="DC.Identifier.URI" content="' . $request->url(null, 'article', 'view', array($article->getBestId())) . '"/>');
114  $templateMgr->addHeader('dublinCoreLanguage', '<meta name="DC.Language" scheme="ISO639-1" content="' . substr($article->getLocale(), 0, 2) . '"/>');
115  $templateMgr->addHeader('dublinCoreCopyright', '<meta name="DC.Rights" content="' . htmlspecialchars(__('submission.copyrightStatement', array('copyrightHolder' => $article->getCopyrightHolder($article->getLocale()), 'copyrightYear' => $article->getCopyrightYear()))) . '"/>');
116  $templateMgr->addHeader('dublinCorePagesLicenseUrl', '<meta name="DC.Rights" content="' . htmlspecialchars($article->getLicenseURL()) . '"/>');
117  $templateMgr->addHeader('dublinCoreSource', '<meta name="DC.Source" content="' . htmlspecialchars($journal->getName($journal->getPrimaryLocale())) . '"/>');
118  if (($issn = $journal->getData('onlineIssn')) || ($issn = $journal->getData('printIssn')) || ($issn = $journal->getData('issn'))) {
119  $templateMgr->addHeader('dublinCoreIssn', '<meta name="DC.Source.ISSN" content="' . htmlspecialchars($issn) . '"/>');
120  }
121 
122  if ($issue) {
123  if ($issue->getShowNumber()) $templateMgr->addHeader('dublinCoreIssue', '<meta name="DC.Source.Issue" content="' . htmlspecialchars($issue->getNumber()) . '"/>');
124  if ($issue->getShowVolume()) $templateMgr->addHeader('dublinCoreVolume', '<meta name="DC.Source.Volume" content="' . htmlspecialchars($issue->getVolume()) . '"/>');
125  }
126 
127  $templateMgr->addHeader('dublinCoreSourceUri', '<meta name="DC.Source.URI" content="' . $request->url($journal->getPath()) . '"/>');
128 
129  $dao = DAORegistry::getDAO('SubmissionKeywordDAO');
130  $keywords = $dao->getKeywords($article->getCurrentPublication()->getId(), array(AppLocale::getLocale()));
131  foreach ($keywords as $locale => $localeKeywords) {
132  foreach ($localeKeywords as $keyword) {
133  $templateMgr->addHeader('dublinCoreSubject' . $locale, '<meta name="DC.Subject" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($keyword) . '"/>');
134  }
135  }
136 
137  if ($publication) {
138  $templateMgr->addHeader('dublinCoreTitle', '<meta name="DC.Title" content="' . htmlspecialchars($publication->getLocalizedTitle()) . '"/>');
139  foreach ($publication->getData('title') as $locale => $title) {
140  if (empty($title) || $locale === $publication->getData('locale')) continue;
141  $templateMgr->addHeader('dublinCoreAltTitle' . $locale, '<meta name="DC.Title.Alternative" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($publication->getLocalizedTitle($locale)) . '"/>');
142  }
143  }
144 
145  $templateMgr->addHeader('dublinCoreType', '<meta name="DC.Type" content="Text.Serial.Journal"/>');
146  if ($types = $article->getType(null)) foreach($types as $locale => $type) {
147  $templateMgr->addHeader('dublinCoreType' . $locale, '<meta name="DC.Type" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($type)) . '"/>');
148  }
149 
150  $publication = $article->getCurrentPublication();
151  if ($publication) {
152  $sectionDao = DAORegistry::getDAO('SectionDAO'); /* @var $sectionDao SectionDAO */
153  $section = $sectionDao->getById($publication->getData('sectionId'));
154  $templateMgr->addHeader('dublinCoreArticleType', '<meta name="DC.Type.articleType" content="' . htmlspecialchars($section->getTitle($journal->getPrimaryLocale())) . '"/>');
155  }
156 
157  return false;
158  }
159 
164  function getDisplayName() {
165  return __('plugins.generic.dublinCoreMeta.name');
166  }
167 
172  function getDescription() {
173  return __('plugins.generic.dublinCoreMeta.description');
174  }
175 }
176 
177 
DublinCoreMetaPlugin\getDescription
getDescription()
Definition: DublinCoreMetaPlugin.inc.php:172
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DublinCoreMetaPlugin\getContextSpecificPluginSettingsFile
getContextSpecificPluginSettingsFile()
Definition: DublinCoreMetaPlugin.inc.php:37
Plugin\getEnabled
getEnabled()
Definition: Plugin.inc.php:868
DublinCoreMetaPlugin
Inject Dublin Core meta tags into article views to facilitate indexing.
Definition: DublinCoreMetaPlugin.inc.php:18
PKPTemplateManager\getManager
static & getManager($request=null)
Definition: PKPTemplateManager.inc.php:1239
Plugin\getPluginPath
getPluginPath()
Definition: Plugin.inc.php:330
Plugin\$request
$request
Definition: Plugin.inc.php:68
HookRegistry\register
static register($hookName, $callback, $hookSequence=HOOK_SEQUENCE_NORMAL)
Definition: HookRegistry.inc.php:70
AppLocale\getLocale
static getLocale()
Definition: env1/MockAppLocale.inc.php:40
GenericPlugin
Abstract class for generic plugins.
Definition: GenericPlugin.inc.php:18
DublinCoreMetaPlugin\getDisplayName
getDisplayName()
Definition: DublinCoreMetaPlugin.inc.php:164
DublinCoreMetaPlugin\articleView
articleView($hookName, $args)
Definition: DublinCoreMetaPlugin.inc.php:47