[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
plugins
/
gateways
/
resolver
/
[
Home
]
File: ResolverPlugin.php
<?php /** * @file plugins/gateways/resolver/ResolverPlugin.php * * Copyright (c) 2014-2021 Simon Fraser University * Copyright (c) 2003-2021 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class ResolverPlugin * * @brief Simple resolver gateway plugin */ namespace APP\plugins\gateways\resolver; use APP\core\Application; use APP\facades\Repo; use APP\issue\Collector; use APP\journal\JournalDAO; use APP\template\TemplateManager; use PKP\core\PKPString; use PKP\db\DAORegistry; use PKP\plugins\GatewayPlugin; class ResolverPlugin extends GatewayPlugin { /** * @copydoc Plugin::register() * * @param null|mixed $mainContextId */ public function register($category, $path, $mainContextId = null) { $success = parent::register($category, $path, $mainContextId); $this->addLocaleData(); return $success; } /** * Get the name of the settings file to be installed on new journal * creation. * * @return string */ public function getContextSpecificPluginSettingsFile() { return $this->getPluginPath() . '/settings.xml'; } /** * Get the name of this plugin. The name must be unique within * its category. * * @return string name of plugin */ public function getName() { return 'ResolverPlugin'; } public function getDisplayName() { return __('plugins.gateways.resolver.displayName'); } public function getDescription() { return __('plugins.gateways.resolver.description'); } /** * Handle fetch requests for this plugin. */ public function fetch($args, $request) { if (!$this->getEnabled()) { return false; } $scheme = array_shift($args); switch ($scheme) { case 'doi': $doi = implode('/', $args); $article = Repo::submission()->getByDoi($doi, $request->getJournal()->getId()); if ($article) { $request->redirect(null, 'article', 'view', $article->getBestId()); } break; case 'vnp': // Volume, number, page case 'ynp': // Volume, number, year, page // This can only be used from within a journal context $journal = $request->getJournal(); if (!$journal) { break; } if ($scheme == 'vnp') { $volume = (int) array_shift($args); $year = null; } elseif ($scheme == 'ynp') { $year = (int) array_shift($args); $volume = null; } else { return; // Suppress scrutinizer warn } $number = array_shift($args); $page = (int) array_shift($args); $issueCollector = Repo::issue()->getCollector() ->filterByContextIds([$journal->getId()]); if ($volume !== null) { $issueCollector->filterByVolumes([$volume]); } if ($number !== null) { $issueCollector->filterByNumbers([$number]); } if ($year !== null) { $issueCollector->filterByYears([$year]); } $issues = $issueCollector->getMany(); // Ensure only one issue matched, and fetch it. if ($issues->count() != 1) { break; } $issue = $issues->first(); unset($issues); $submissions = Repo::submission() ->getCollector() ->filterByContextIds([$issue->getJournalId()]) ->filterByIssueIds([$issue->getId()]) ->getMany(); foreach ($submissions as $submission) { // Look for the correct page in the list of articles. $matches = null; if (PKPString::regexp_match_get('/^[Pp][Pp]?[.]?[ ]?(\d+)$/', $submission->getPages(), $matches)) { $matchedPage = $matches[1]; if ($page == $matchedPage) { $request->redirect(null, 'article', 'view', $submission->getBestId()); } } if (PKPString::regexp_match_get('/^[Pp][Pp]?[.]?[ ]?(\d+)[ ]?-[ ]?([Pp][Pp]?[.]?[ ]?)?(\d+)$/', $submission->getPages(), $matches)) { $matchedPageFrom = $matches[1]; $matchedPageTo = $matches[3]; if ($page >= $matchedPageFrom && ($page < $matchedPageTo || ($page == $matchedPageTo && $matchedPageFrom = $matchedPageTo))) { $request->redirect(null, 'article', 'view', $submission->getBestId()); } } unset($submission); } break; } // Failure. header('HTTP/1.0 404 Not Found'); $templateMgr = TemplateManager::getManager($request); $templateMgr->assign('message', 'plugins.gateways.resolver.errors.errorMessage'); $templateMgr->display('frontend/pages/message.tpl'); exit; } public function sanitize($string) { return str_replace("\t", ' ', strip_tags($string)); } public function exportHoldings() { $journalDao = DAORegistry::getDAO('JournalDAO'); /** @var JournalDAO $journalDao */ $journals = $journalDao->getAll(true); $request = Application::get()->getRequest(); header('content-type: text/plain'); header('content-disposition: attachment; filename=holdings.txt'); echo "title\tissn\te_issn\tstart_date\tend_date\tembargo_months\tembargo_days\tjournal_url\tvol_start\tvol_end\tiss_start\tiss_end\n"; while ($journal = $journals->next()) { $issues = Repo::issue()->getCollector() ->filterByContextIds([$journal->getId()]) ->filterByPublished(true) ->orderBy(Collector::ORDERBY_PUBLISHED_ISSUES) ->getMany(); $startDate = $endDate = null; $startNumber = $endNumber = null; $startVolume = $endVolume = null; foreach ($issues as $issue) { $datePublished = $issue->getDatePublished(); if ($datePublished !== null) { $datePublished = strtotime($datePublished); } if ($startDate === null || $startDate > $datePublished) { $startDate = $datePublished; } if ($endDate === null || $endDate < $datePublished) { $endDate = $datePublished; } $volume = $issue->getVolume(); if ($startVolume === null || $startVolume > $volume) { $startVolume = $volume; } if ($endVolume === null || $endVolume < $volume) { $endVolume = $volume; } $number = $issue->getNumber(); if ($startNumber === null || $startNumber > $number) { $startNumber = $number; } if ($endNumber === null || $endNumber < $number) { $endNumber = $number; } } echo $this->sanitize($journal->getLocalizedName()) . "\t"; echo $this->sanitize($journal->getData('printIssn')) . "\t"; echo $this->sanitize($journal->getData('onlineIssn')) . "\t"; echo $this->sanitize($startDate === null ? '' : date('Y-m-d', $startDate)) . "\t"; // start_date echo $this->sanitize($endDate === null ? '' : date('Y-m-d', $endDate)) . "\t"; // end_date echo $this->sanitize('') . "\t"; // embargo_months echo $this->sanitize('') . "\t"; // embargo_days echo $request->url($journal->getPath()) . "\t"; // journal_url echo $this->sanitize($startVolume) . "\t"; // vol_start echo $this->sanitize($endVolume) . "\t"; // vol_end echo $this->sanitize($startNumber) . "\t"; // iss_start echo $this->sanitize($endNumber) . "\n"; // iss_end } } }