[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
05122024
/
htdocs
/
jurnal-kesmas
/
plugins
/
reports
/
counter
/
[
Home
]
File: CounterReportPlugin.php
<?php /** * @file plugins/reports/counter/CounterReportPlugin.php * * Copyright (c) 2014-2022 Simon Fraser University * Copyright (c) 2003-2022 John Willinsky * Distributed under the GNU GPL v3. For full terms see the file docs/COPYING. * * @class CounterReportPlugin * * @brief Counter report plugin */ namespace APP\plugins\reports\counter; use APP\core\Application; use APP\core\Services; use APP\notification\NotificationManager; use APP\statistics\StatisticsHelper; use APP\template\TemplateManager; use PKP\notification\PKPNotification; use PKP\plugins\ReportPlugin; class CounterReportPlugin extends ReportPlugin { public const COUNTER_CLASS_SUFFIX = '.php'; /** * @copydoc Plugin::register() * * @param null|mixed $mainContextId */ public function register($category, $path, $mainContextId = null) { $success = parent::register($category, $path, $mainContextId); if ($success) { $this->addLocaleData(); } return $success; } /** * @see PKPPlugin::getName() */ public function getName() { return 'CounterReportPlugin'; } /** * @see PKPPlugin::getDisplayName() */ public function getDisplayName() { return __('plugins.reports.counter'); } /** * @see PKPPlugin::getDescription() */ public function getDescription() { return __('plugins.reports.counter.description'); } /** * Get the latest counter release * * @return string */ public function getCurrentRelease() { return '4.1'; } /** * List the valid reports * Must exist in the report path as {Report}_r{release}.php * * @return array multidimentional array release => array( report => reportClassName ) */ public function getValidReports() { $reports = []; $prefix = "{$this->getReportPath()}/" . classes\CounterReport::COUNTER_CLASS_PREFIX; $suffix = self::COUNTER_CLASS_SUFFIX; foreach (glob($prefix . '*' . $suffix) as $file) { $report_name = substr($file, strlen($prefix), -strlen($suffix)); $report_class_file = substr($file, strlen($prefix), -strlen(self::COUNTER_CLASS_SUFFIX)); $reports[$report_name] = $report_class_file; } return $reports; } /** * Get a COUNTER Reporter Object * Must exist in the report path as {Report}_r{release}.php * * @param string $report Report name * @param string $release release identifier * * @return object */ public function getReporter($report, $release) { $reportClass = '\\APP\\plugins\\reports\\counter\\classes\\reports\\' . classes\CounterReport::COUNTER_CLASS_PREFIX . $report; return class_exists($reportClass) ? new $reportClass($release) : false; } /** * Get classes path for this plugin. * * @return string Path to plugin's classes */ public function getClassPath() { return "{$this->getPluginPath()}/classes"; } /** * Return the report path * * @return string */ public function getReportPath() { return "{$this->getClassPath()}/reports"; } /** * @see ReportPlugin::display() */ public function display($args, $request) { $available = $this->getValidReports(); $years = $this->_getYears(); if ($request->getUserVar('type')) { $type = (string) $request->getUserVar('type'); $errormessage = ''; switch ($type) { case 'fetch': // Modern COUNTER Releases // must provide a release, report, and year parameter $release = $request->getUserVar('release'); $report = $request->getUserVar('report'); $year = $request->getUserVar('year'); if ($release && $report && $year) { // release, report and year parameters must be sane if ($release == $this->getCurrentRelease() && isset($available[$report]) && in_array($year, $years)) { // try to get the report $reporter = $this->getReporter($report, $release); if ($reporter) { // default report parameters with a yearlong range $reportItems = $reporter->getReportItems([], ['dateStart' => $year . '-01-01', 'dateEnd' => $year . '-12-31']); if ($reportItems) { $xmlResult = $reporter->createXML($reportItems); if ($xmlResult) { header('content-type: text/xml'); header('content-disposition: attachment; filename=counter-' . $release . '-' . $report . '-' . date('Ymd') . '.xml'); echo $xmlResult; return; } else { $errormessage = __('plugins.reports.counter.error.noXML'); } } else { $errormessage = __('plugins.reports.counter.error.noResults'); } } } } // fall through to default case with error message if (!$errormessage) { $errormessage = __('plugins.reports.counter.error.badParameters'); } // no break default: if (!$errormessage) { $errormessage = __('plugins.reports.counter.error.badRequest'); } $user = $request->getUser(); $notificationManager = new NotificationManager(); $notificationManager->createTrivialNotification($user->getId(), PKPNotification::NOTIFICATION_TYPE_ERROR, ['contents' => $errormessage]); } } $templateManager = TemplateManager::getManager(); krsort($available); $templateManager->assign('pluginName', $this->getName()); $templateManager->assign('available', $available); $templateManager->assign('release', $this->getCurrentRelease()); $templateManager->assign('years', $years); $templateManager->assign([ 'breadcrumbs' => [ [ 'id' => 'reports', 'name' => __('manager.statistics.reports'), 'url' => $request->getRouter()->url($request, null, 'stats', 'reports'), ], [ 'id' => 'counter', 'name' => __('plugins.reports.counter') ], ], 'pageTitle', __('plugins.reports.counter') ]); $templateManager->display($this->getTemplateResource('index.tpl')); } /** * Get the years for which log entries exist in the DB. * * @return array */ public function _getYears() { $filters = [ 'dateStart' => StatisticsHelper::STATISTICS_EARLIEST_DATE, 'dateEnd' => date('Y-m-d', strtotime('yesterday')), 'contextIds' => [Application::get()->getRequest()->getContext()->getId()], 'assocTypes' => [Application::ASSOC_TYPE_SUBMISSION_FILE] ]; $metricsQB = Services::get('publicationStats')->getQueryBuilder($filters); $metricsQB = $metricsQB->getSum([StatisticsHelper::STATISTICS_DIMENSION_YEAR]); $metricsQB->orderBy(StatisticsHelper::STATISTICS_DIMENSION_YEAR, StatisticsHelper::STATISTICS_ORDER_ASC); $results = $metricsQB->get()->toArray(); $years = array_map(function ($n) { return substr($n, 0, 4); }, array_column($results, 'year')); return $years; } }