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');
}
}