getEnabled($mainContextId)) {
Hook::add('ArticleHandler::view', [&$this, 'submissionView']);
Hook::add('PreprintHandler::view', [&$this, 'submissionView']);
}
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 Google Scholar metadata into submission landing page view
*
* @param string $hookName
* @param array $args
*
* @return boolean
*/
public function submissionView($hookName, $args)
{
$application = Application::get();
$applicationName = $application->getName();
/** @var Request */
$request = $args[0];
if ($applicationName == 'ojs2') {
$issue = $args[1];
$submission = $args[2];
$submissionPath = 'article';
}
if ($applicationName == 'ops') {
$submission = $args[1];
$submissionPath = 'preprint';
}
/** @var Submission $submission */
$requestArgs = $request->getRequestedArgs();
$context = $request->getContext();
// Only add Google Scholar 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 false;
}
$templateMgr = TemplateManager::getManager($request);
$templateMgr->addHeader('googleScholarRevision', '');
// Context identification
if ($applicationName == 'ojs2') {
$templateMgr->addHeader('googleScholarJournalTitle', '');
if (($abbreviation = $context->getData('abbreviation', $context->getPrimaryLocale())) || ($abbreviation = $context->getData('acronym', $context->getPrimaryLocale()))) {
$templateMgr->addHeader('googleScholarJournalAbbrev', '');
}
if (($issn = $context->getData('onlineIssn')) || ($issn = $context->getData('printIssn')) || ($issn = $context->getData('issn'))) {
$templateMgr->addHeader('googleScholarIssn', ' ');
}
}
if ($applicationName == 'ops') {
$templateMgr->addHeader('googleScholarPublisher', '');
}
$publication = $submission->getCurrentPublication();
$publicationLocale = $publication->getData('locale');
$submissionBestId = $submission->getBestId();
// Contributors
$authors = $publication->getData('authors');
foreach ($authors as $i => $author) {
$templateMgr->addHeader('googleScholarAuthor' . $i, '');
if ($affiliation = htmlspecialchars($author->getLocalizedData('affiliation', $publicationLocale))) {
$templateMgr->addHeader('googleScholarAuthor' . $i . 'Affiliation', '');
}
}
// Submission title
$templateMgr->addHeader('googleScholarTitle', '');
$templateMgr->addHeader('googleScholarLanguage', '');
// Submission publish date and issue information
if ($applicationName == 'ojs2') {
if (($datePublished = $publication->getData('datePublished')) && (!$issue || !$issue->getYear() || $issue->getYear() == date('Y', strtotime($datePublished)))) {
$templateMgr->addHeader('googleScholarDate', '');
} elseif ($issue && $issue->getYear()) {
$templateMgr->addHeader('googleScholarDate', '');
} elseif ($issue && ($datePublished = $issue->getDatePublished())) {
$templateMgr->addHeader('googleScholarDate', '');
}
if ($issue) {
if ($issue->getShowVolume()) {
$templateMgr->addHeader('googleScholarVolume', '');
}
if ($issue->getShowNumber()) {
$templateMgr->addHeader('googleScholarNumber', '');
}
}
if ($publication->getData('pages')) {
if ($startPage = $publication->getStartingPage()) {
$templateMgr->addHeader('googleScholarStartPage', '');
}
if ($endPage = $publication->getEndingPage()) {
$templateMgr->addHeader('googleScholarEndPage', '');
}
}
}
if ($applicationName == 'ops') {
if ($datePublished = $publication->getData('datePublished')) {
$templateMgr->addHeader('googleScholarDate', '');
}
}
// DOI
if ($doi = $publication->getDoi()) {
$templateMgr->addHeader('googleScholarPublicationDOI', '');
}
// URN
foreach ((array) $templateMgr->getTemplateVars('pubIdPlugins') as $pubIdPlugin) {
if ($pubId = $publication->getStoredPubId($pubIdPlugin->getPubIdType())) {
$templateMgr->addHeader('googleScholarPubId' . $pubIdPlugin->getPubIdDisplayType(), '');
}
}
// Abstract URL
$templateMgr->addHeader('googleScholarHtmlUrl', '');
// Abstract
if ($abstract = $publication->getLocalizedData('abstract', $publicationLocale)) {
$templateMgr->addHeader('googleScholarAbstract', '');
}
// Subjects
if ($subjects = $publication->getData('subjects')) {
foreach ($subjects as $locale => $localeSubjects) {
foreach ($localeSubjects as $i => $subject) {
$templateMgr->addHeader('googleScholarSubject' . $i++, '');
}
}
}
// Keywords
if ($keywords = $publication->getData('keywords')) {
foreach ($keywords as $locale => $localeKeywords) {
foreach ($localeKeywords as $i => $keyword) {
$templateMgr->addHeader('googleScholarKeyword' . $i++, '');
}
}
}
// Galley links
$galleys = $publication->getData('galleys');
foreach ($galleys as $i => $galley) {
$submissionFileId = $galley->getData('submissionFileId');
if ($submissionFileId && $submissionFile = Repo::submissionFile()->get($submissionFileId)) {
if ($submissionFile->getData('mimetype') == 'application/pdf') {
$templateMgr->addHeader('googleScholarPdfUrl' . $i++, '');
} elseif ($submissionFile->getData('mimetype') == 'text/html') {
$templateMgr->addHeader('googleScholarHtmlUrl' . $i++, '');
}
}
}
// Citations
$outputReferences = [];
$citationDao = DAORegistry::getDAO('CitationDAO'); /** @var CitationDAO $citationDao */
$parsedCitations = $citationDao->getByPublicationId($publication->getId());
while ($citation = $parsedCitations->next()) {
$outputReferences[] = $citation->getRawCitation();
}
Hook::call('GoogleScholarPlugin::references', [&$outputReferences, $submission->getId()]);
foreach ($outputReferences as $i => $outputReference) {
$templateMgr->addHeader('googleScholarReference' . $i++, '');
}
return false;
}
/**
* Get the display name of this plugin
*
* @return string
*/
public function getDisplayName()
{
return __('plugins.generic.googleScholar.name');
}
/**
* Get the description of this plugin
*
* @return string
*/
public function getDescription()
{
return __('plugins.generic.googleScholar.description');
}
}
if (!PKP_STRICT_MODE) {
class_alias('\APP\plugins\generic\googleScholar\GoogleScholarPlugin', '\GoogleScholarPlugin');
}