Open Monograph Press  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('CatalogBookHandler::book',array(&$this, 'monographView'));
26  HookRegistry::register('CatalogBookHandler::view', array($this, 'monographFileView'));
27  }
28  return true;
29  }
30  return false;
31  }
32 
39  return $this->getPluginPath() . '/settings.xml';
40  }
41 
48  function monographView($hookName, $args) {
49  $request = $args[0];
50  $monograph = $args[1];
51  $publication = $monograph->getCurrentPublication();
52  $press = $request->getContext();
53 
54  $templateMgr = TemplateManager::getManager($request);
55  $templateMgr->addHeader('dublinCoreSchema', '<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />');
56 
57  $i=0;
58  if ($sponsors = $publication->getData('supportingAgencies')) foreach ($sponsors as $locale => $sponsor) {
59  $templateMgr->addHeader('dublinCoreSponsor' . $i++, '<meta name="DC.Contributor.Sponsor" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($sponsor)) . '"/>');
60  }
61 
62  $i=0;
63  if ($coverages = $publication->getData('coverage')) foreach($coverages as $locale => $coverage) {
64  $templateMgr->addHeader('dublinCoreCoverage' . $i++, '<meta name="DC.Coverage" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($coverage)) . '"/>');
65  }
66 
67  $i=0;
68  foreach ($publication->getData('authors') as $author) {
69  $templateMgr->addHeader('dublinCoreAuthor' . $i++, '<meta name="DC.Creator.PersonalName" content="' . htmlspecialchars($author->getFullName(false)) . '"/>');
70  }
71 
72  if ($datePublished = $publication->getData('datePublished')) {
73  $templateMgr->addHeader('dublinCoreDateCreated', '<meta name="DC.Date.created" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($datePublished)) . '"/>');
74  }
75  $templateMgr->addHeader('dublinCoreDateSubmitted', '<meta name="DC.Date.dateSubmitted" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($monograph->getDateSubmitted())) . '"/>');
76  if ($dateModified = $publication->getData('lastModified')) $templateMgr->addHeader('dublinCoreDateModified', '<meta name="DC.Date.modified" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($dateModified)) . '"/>');
77  $i=0;
78  if ($abstracts = $publication->getData('abstract')) foreach($abstracts as $locale => $abstract) {
79  $templateMgr->addHeader('dublinCoreAbstract' . $i++, '<meta name="DC.Description" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($abstract)) . '"/>');
80  }
81 
82  $templateMgr->addHeader('dublinCoreIdentifier', '<meta name="DC.Identifier" content="' . htmlspecialchars($monograph->getBestId()) . '"/>');
83 
84  foreach((array) $templateMgr->getTemplateVars('pubIdPlugins') as $pubIdPlugin) {
85  if ($pubId = $monograph->getStoredPubId($pubIdPlugin->getPubIdType())) {
86  $templateMgr->addHeader('dublinCorePubId' . $pubIdPlugin->getPubIdDisplayType(), '<meta name="DC.Identifier.' . htmlspecialchars($pubIdPlugin->getPubIdDisplayType()) . '" content="' . htmlspecialchars($pubId) . '"/>');
87  }
88  }
89 
90  $templateMgr->addHeader('dublinCoreUri', '<meta name="DC.Identifier.URI" content="' . $request->url(null, 'catalog', 'book', array($monograph->getBestId())) . '"/>');
91  $templateMgr->addHeader('dublinCoreLanguage', '<meta name="DC.Language" scheme="ISO639-1" content="' . substr($publication->getData('locale'), 0, 2) . '"/>');
92  $templateMgr->addHeader('dublinCoreCopyright', '<meta name="DC.Rights" content="' . htmlspecialchars(__('submission.copyrightStatement', array('copyrightHolder' => $monograph->getCopyrightHolder($publication->getData('locale')), 'copyrightYear' => $monograph->getCopyrightYear()))) . '"/>');
93  $templateMgr->addHeader('dublinCorePagesLicenseUrl', '<meta name="DC.Rights" content="' . htmlspecialchars($monograph->getLicenseURL()) . '"/>');
94  $templateMgr->addHeader('dublinCoreSource', '<meta name="DC.Source" content="' . htmlspecialchars($press->getName($press->getPrimaryLocale())) . '"/>');
95 
96  $templateMgr->addHeader('dublinCoreSourceUri', '<meta name="DC.Source.URI" content="' . $request->url($press->getPath()) . '"/>');
97 
98  $i=0;
99  $submissionSubjectDao = DAORegistry::getDAO('SubmissionSubjectDAO'); /* @var $submissionSubjectDao SubmissionSubjectDAO */
100  $supportedLocales = array_keys(AppLocale::getSupportedFormLocales());
101  if ($subjects = $submissionSubjectDao->getSubjects($publication->getId(), $supportedLocales)) foreach ($subjects as $locale => $subjectLocale) {
102  foreach ($subjectLocale as $subject) $templateMgr->addHeader('dublinCoreSubject' . $i++, '<meta name="DC.Subject" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($subject) . '"/>');
103  }
104 
105  $i=0;
106  $submissionKeywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $submissionKeywordDao SubmissionKeywordDAO */
107  if ($keywords = $submissionKeywordDao->getKeywords($publication->getId(), $supportedLocales)) foreach ($keywords as $locale => $keywordLocale) {
108  foreach ($keywordLocale as $keyword) $templateMgr->addHeader('dublinCoreKeyword' . $i++, '<meta name="DC.Subject" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($keyword) . '"/>');
109  }
110 
111  $templateMgr->addHeader('dublinCoreTitle', '<meta name="DC.Title" content="' . htmlspecialchars($publication->getData('title', $monograph->getLocale())) . '"/>');
112  $i=0;
113  foreach ($publication->getData('title') as $locale => $title) {
114  if ($locale == $monograph->getLocale()) continue;
115  $templateMgr->addHeader('dublinCoreAltTitle' . $i++, '<meta name="DC.Title.Alternative" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($title) . '"/>');
116  }
117 
118  $templateMgr->addHeader('dublinCoreType', '<meta name="DC.Type" content="Text.Book"/>');
119  $i=0;
120  if ($types = $publication->getData('type')) foreach($types as $locale => $type) {
121  $templateMgr->addHeader('dublinCoreType' . $i++, '<meta name="DC.Type" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($type)) . '"/>');
122  }
123 
124  return false;
125  }
126 
133  function monographFileView($hookName, $args) {
134  $request = Application::get()->getRequest();
135  $monograph = $args[1];
136  $publicationFormat = $args[2];
137  $submissionFile = $args[3];
138  $press = $request->getContext();
139 
140  $templateMgr = TemplateManager::getManager($request);
141  $chapter = $templateMgr->getTemplateVars('chapter');
142  $series = $templateMgr->getTemplateVars('series');
143 
144  $templateMgr->addHeader('dublinCoreSchema', '<link rel="schema.DC" href="http://purl.org/dc/elements/1.1/" />');
145 
146  $i=0;
147  if ($sponsors = $monograph->getSponsor(null)) foreach ($sponsors as $locale => $sponsor) {
148  $templateMgr->addHeader('dublinCoreSponsor' . $i++, '<meta name="DC.Contributor.Sponsor" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($sponsor)) . '"/>');
149  }
150 
151  $i=0;
152  if ($coverages = $monograph->getCoverage(null)) foreach($coverages as $locale => $coverage) {
153  $templateMgr->addHeader('dublinCoreCoverage' . $i++, '<meta name="DC.Coverage" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($coverage)) . '"/>');
154  }
155 
156  $i=0;
157  foreach ($chapter?$chapter->getAuthors()->toArray():$monograph->getAuthors() as $author) {
158  $templateMgr->addHeader('dublinCoreAuthor' . $i++, '<meta name="DC.Creator.PersonalName" content="' . htmlspecialchars($author->getFullName(false)) . '"/>');
159  }
160 
161  if (is_a($monograph, 'Submission') && ($datePublished = $monograph->getDatePublished())) {
162  $templateMgr->addHeader('dublinCoreDateCreated', '<meta name="DC.Date.created" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($datePublished)) . '"/>');
163  }
164  $templateMgr->addHeader('dublinCoreDateSubmitted', '<meta name="DC.Date.dateSubmitted" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($monograph->getDateSubmitted())) . '"/>');
165  if ($dateModified = $monograph->getData('dateLastActivity')) $templateMgr->addHeader('dublinCoreDateModified', '<meta name="DC.Date.modified" scheme="ISO8601" content="' . strftime('%Y-%m-%d', strtotime($dateModified)) . '"/>');
166  $i=0;
167  if ($abstracts = $monograph->getAbstract(null)) foreach($abstracts as $locale => $abstract) {
168  $templateMgr->addHeader('dublinCoreAbstract' . $i++, '<meta name="DC.Description" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($abstract)) . '"/>');
169  }
170 
171  $templateMgr->addHeader('dublinCoreIdentifier', '<meta name="DC.Identifier" content="' . htmlspecialchars($monograph->getBestId() . '/' . $publicationFormat->getId() . '/' . $submissionFile->getFileIdAndRevision()) . '"/>');
172 
173  if ($pages = $monograph->getPages()) {
174  $templateMgr->addHeader('dublinCorePages', '<meta name="DC.Identifier.pageNumber" content="' . htmlspecialchars($pages) . '"/>');
175  }
176 
177  foreach((array) $templateMgr->getTemplateVars('pubIdPlugins') as $pubIdPlugin) {
178  if ($pubId = $monograph->getStoredPubId($pubIdPlugin->getPubIdType())) {
179  $templateMgr->addHeader('dublinCorePubId' . $pubIdPlugin->getPubIdDisplayType(), '<meta name="DC.Identifier.' . htmlspecialchars($pubIdPlugin->getPubIdDisplayType()) . '" content="' . htmlspecialchars($pubId) . '"/>');
180  }
181  }
182 
183  $templateMgr->addHeader('dublinCoreUri', '<meta name="DC.Identifier.URI" content="' . $request->url(null, 'catalog', 'book', array($monograph->getBestId(), $publicationFormat->getId(), $submissionFile->getFileIdAndRevision())) . '"/>');
184  $templateMgr->addHeader('dublinCoreLanguage', '<meta name="DC.Language" scheme="ISO639-1" content="' . substr($monograph->getLocale(), 0, 2) . '"/>');
185  $templateMgr->addHeader('dublinCoreCopyright', '<meta name="DC.Rights" content="' . htmlspecialchars(__('submission.copyrightStatement', array('copyrightHolder' => $monograph->getCopyrightHolder($monograph->getLocale()), 'copyrightYear' => $monograph->getCopyrightYear()))) . '"/>');
186  $templateMgr->addHeader('dublinCorePagesLicenseUrl', '<meta name="DC.Rights" content="' . htmlspecialchars($monograph->getLicenseURL()) . '"/>');
187  $templateMgr->addHeader('dublinCoreSource', '<meta name="DC.Source" content="' . htmlspecialchars($press->getName($press->getPrimaryLocale())) . '"/>');
188  if ($series && $issn = $series->getOnlineISSN()) {
189  $templateMgr->addHeader('dublinCoreIssn', '<meta name="DC.Source.ISSN" content="' . htmlspecialchars($issn) . '"/>');
190  }
191 
192  $templateMgr->addHeader('dublinCoreSourceUri', '<meta name="DC.Source.URI" content="' . $request->url($press->getPath()) . '"/>');
193 
194  $i=0;
195  $submissionSubjectDao = DAORegistry::getDAO('SubmissionSubjectDAO'); /* @var $submissionSubjectDao SubmissionSubjectDAO */
196  $supportedLocales = array_keys(AppLocale::getSupportedFormLocales());
197  if ($subjects = $submissionSubjectDao->getSubjects($monograph->getId(), $supportedLocales)) foreach ($subjects as $locale => $subjectLocale) {
198  foreach ($subjectLocale as $subject) $templateMgr->addHeader('dublinCoreSubject' . $i++, '<meta name="DC.Subject" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($subject) . '"/>');
199  }
200 
201  $i=0;
202  $submissionKeywordDao = DAORegistry::getDAO('SubmissionKeywordDAO'); /* @var $submissionKeywordDao SubmissionKeywordDAO */
203  if ($keywords = $submissionKeywordDao->getKeywords($monograph->getId(), $supportedLocales)) foreach ($keywords as $locale => $keywordLocale) {
204  foreach ($keywordLocale as $keyword) $templateMgr->addHeader('dublinCoreKeyword' . $i++, '<meta name="DC.Subject" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($keyword) . '"/>');
205  }
206 
207 
208  if ($chapter) {
209  $templateMgr->addHeader('dublinCoreTitle', '<meta name="DC.Title" content="' . htmlspecialchars($chapter->getTitle($monograph->getLocale())) . '"/>');
210  $i=0;
211  foreach ($chapter->getTitle(null) as $locale => $title) {
212  if ($locale == $monograph->getLocale()) continue;
213  $templateMgr->addHeader('dublinCoreAltTitle' . $i++, '<meta name="DC.Title.Alternative" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($title) . '"/>');
214  }
215  } else {
216  $templateMgr->addHeader('dublinCoreTitle', '<meta name="DC.Title" content="' . htmlspecialchars($monograph->getTitle($monograph->getLocale())) . '"/>');
217  $i=0;
218  foreach ($monograph->getTitle(null) as $locale => $title) {
219  if ($locale == $monograph->getLocale()) continue;
220  $templateMgr->addHeader('dublinCoreAltTitle' . $i++, '<meta name="DC.Title.Alternative" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars($title) . '"/>');
221  }
222  }
223 
224  $templateMgr->addHeader('dublinCoreType', '<meta name="DC.Type" content="Text.Chapter"/>');
225  $i=0;
226  if ($types = $monograph->getType(null)) foreach($types as $locale => $type) {
227  $templateMgr->addHeader('dublinCoreType' . $i++, '<meta name="DC.Type" xml:lang="' . htmlspecialchars(substr($locale, 0, 2)) . '" content="' . htmlspecialchars(strip_tags($type)) . '"/>');
228  }
229 
230  return false;
231  }
232 
237  function getDisplayName() {
238  return __('plugins.generic.dublinCoreMeta.name');
239  }
240 
245  function getDescription() {
246  return __('plugins.generic.dublinCoreMeta.description');
247  }
248 }
249 
250 
DublinCoreMetaPlugin\monographFileView
monographFileView($hookName, $args)
Definition: DublinCoreMetaPlugin.inc.php:133
DublinCoreMetaPlugin\getDescription
getDescription()
Definition: DublinCoreMetaPlugin.inc.php:245
DAORegistry\getDAO
static & getDAO($name, $dbconn=null)
Definition: DAORegistry.inc.php:57
DublinCoreMetaPlugin\monographView
monographView($hookName, $args)
Definition: DublinCoreMetaPlugin.inc.php:48
DublinCoreMetaPlugin\getContextSpecificPluginSettingsFile
getContextSpecificPluginSettingsFile()
Definition: DublinCoreMetaPlugin.inc.php:38
Plugin\getEnabled
getEnabled()
Definition: Plugin.inc.php:868
DublinCoreMetaPlugin
Inject Dublin Core meta tags into monograph 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
PKPApplication\get
static get()
Definition: PKPApplication.inc.php:235
AppLocale\getSupportedFormLocales
static getSupportedFormLocales()
Definition: env1/MockAppLocale.inc.php:124
GenericPlugin
Abstract class for generic plugins.
Definition: GenericPlugin.inc.php:18
DublinCoreMetaPlugin\getDisplayName
getDisplayName()
Definition: DublinCoreMetaPlugin.inc.php:237