getEnabled($mainContextId)) { Hook::add('ArticleHandler::view', [&$this, 'articleView']); } return true; } return false; } /** * Get the name of the settings file to be installed on new context * creation. * * @return string */ public function getContextSpecificPluginSettingsFile() { return $this->getPluginPath() . '/settings.xml'; } /** * Inject Dublin Core metadata into article view * * @param string $hookName * @param array $args * * @return bool */ public function articleView($hookName, $args) { $request = $args[0]; $issue = $args[1]; $article = $args[2]; $requestArgs = $request->getRequestedArgs(); $journal = $request->getContext(); // Only add Dublin Core metadata tags to the canonical URL for the latest version // See discussion: https://github.com/pkp/pkp-lib/issues/4870 if (count($requestArgs) > 1 && $requestArgs[1] === 'version') { return; } $publication = $article->getCurrentPublication(); $publicationLocale = $publication->getData('locale'); $articleBestId = strlen($urlPath = (string) $publication->getData('urlPath')) ? $urlPath : $article->getId(); $templateMgr = TemplateManager::getManager($request); $section = $templateMgr->getTemplateVars('section'); $templateMgr = TemplateManager::getManager($request); $templateMgr->addHeader('dublinCoreSchema', ''); if ($supportingAgencies = $publication->getData('supportingAgencies')) { foreach ($supportingAgencies as $locale => $localeSupportingAgencies) { foreach ($localeSupportingAgencies as $i => $supportingAgency) { $templateMgr->addHeader('dublinCoreSponsor' . $locale . $i++, ''); } } } if ($coverages = $publication->getData('coverage')) { foreach ($coverages as $locale => $coverage) { if ($coverage != '') { $templateMgr->addHeader('dublinCoreCoverage' . $locale, ''); } } } $authors = $publication->getData('authors'); foreach ($authors as $i => $author) { $templateMgr->addHeader('dublinCoreAuthor' . $i++, ''); } if ($datePublished = $publication->getData('datePublished')) { $templateMgr->addHeader('dublinCoreDateCreated', ''); } $templateMgr->addHeader('dublinCoreDateSubmitted', ''); if ($issue && ($datePublished = $issue->getDatePublished())) { $templateMgr->addHeader('dublinCoreDateIssued', ''); } if ($dateModified = $publication->getData('lastModified')) { $templateMgr->addHeader('dublinCoreDateModified', ''); } $abstracts = $publication->getData('abstract') ?: []; foreach ($abstracts as $locale => $abstract) { if ($abstract != '') { $templateMgr->addHeader('dublinCoreAbstract' . $locale, ''); } } $galleys = $publication->getData('galleys'); foreach ($galleys as $i => $galley) { $submissionFileId = $galley->getData('submissionFileId'); if ($submissionFileId && $submissionFile = Repo::submissionFile()->get($submissionFileId)) { $templateMgr->addHeader('dublinCoreFormat' . $i++, ''); } } $templateMgr->addHeader('dublinCoreIdentifier', ''); if ($pages = $publication->getData('pages')) { $templateMgr->addHeader('dublinCorePages', ''); } // DOI if ($doi = $publication->getDoi()) { $templateMgr->addHeader('dublinCorePubIdDOI', ''); } // URN foreach ((array) $templateMgr->getTemplateVars('pubIdPlugins') as $pubIdPlugin) { if ($pubId = $publication->getStoredPubId($pubIdPlugin->getPubIdType())) { $templateMgr->addHeader('dublinCorePubId' . $pubIdPlugin->getPubIdDisplayType(), ''); } } $templateMgr->addHeader('dublinCoreUri', ''); $templateMgr->addHeader('dublinCoreLanguage', ''); if (($copyrightHolder = $publication->getData('copyrightHolder', $publicationLocale)) && ($copyrightYear = $publication->getData('copyrightYear'))) { $templateMgr->addHeader('dublinCoreCopyright', ''); } if ($licenseURL = $publication->getData('licenseUrl')) { $templateMgr->addHeader('dublinCorePagesLicenseUrl', ''); } $templateMgr->addHeader('dublinCoreSource', ''); if (($issn = $journal->getData('onlineIssn')) || ($issn = $journal->getData('printIssn')) || ($issn = $journal->getData('issn'))) { $templateMgr->addHeader('dublinCoreIssn', ''); } if ($issue) { if ($issue->getShowNumber()) { $templateMgr->addHeader('dublinCoreIssue', ''); } if ($issue->getShowVolume()) { $templateMgr->addHeader('dublinCoreVolume', ''); } } $templateMgr->addHeader('dublinCoreSourceUri', ''); if ($subjects = $publication->getData('subjects')) { foreach ($subjects as $locale => $localeSubjects) { foreach ($localeSubjects as $i => $subject) { $templateMgr->addHeader('dublinCoreSubject' . $locale . $i++, ''); } } } if ($keywords = $publication->getData('keywords')) { foreach ($keywords as $locale => $localeKeywords) { foreach ($localeKeywords as $i => $keyword) { $templateMgr->addHeader('dublinCoreKeyword' . $locale . $i++, ''); } } } $templateMgr->addHeader('dublinCoreTitle', ''); foreach ($publication->getFullTitles() as $locale => $title) { if ($title != '' && $locale != $publicationLocale) { $templateMgr->addHeader('dublinCoreAltTitle' . $locale, ''); } } $templateMgr->addHeader('dublinCoreType', ''); if ($types = $publication->getData('type')) { foreach ($types as $locale => $type) { if ($type != '') { $templateMgr->addHeader('dublinCoreType' . $locale, ''); } } } $templateMgr->addHeader('dublinCoreArticleType', ''); return false; } /** * Get the display name of this plugin * * @return string */ public function getDisplayName() { return __('plugins.generic.dublinCoreMeta.name'); } /** * Get the description of this plugin * * @return string */ public function getDescription() { return __('plugins.generic.dublinCoreMeta.description'); } }