[ Mini Kiebo ]
Server: Windows NT DESKTOP-5B8S0D4 6.2 build 9200 (Windows 8 Professional Edition) i586
Path:
D:
/
Backup
/
14082024
/
Data
/
htdocs
/
htdocs
/
jurnal-kesmas
/
baru
/
pages
/
stats
/
[
Home
]
File: StatsHandler.php
<?php /** * @file pages/stats/StatsHandler.php * * Copyright (c) 2013-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 StatsHandler * * @ingroup pages_stats * * @brief Handle requests for statistics pages. */ namespace APP\pages\stats; use APP\core\Application; use APP\core\Request; use APP\core\Services; use APP\facades\Repo; use APP\template\TemplateManager; use PKP\core\PKPApplication; use PKP\pages\stats\PKPStatsHandler; use PKP\plugins\Hook; use PKP\security\Role; use PKP\statistics\PKPStatisticsHelper; class StatsHandler extends PKPStatsHandler { /** * Constructor. */ public function __construct() { parent::__construct(); $this->addRoleAssignment( [Role::ROLE_ID_SITE_ADMIN, Role::ROLE_ID_MANAGER, Role::ROLE_ID_SUB_EDITOR], ['issues'] ); Hook::add('TemplateManager::display', [$this, 'addSectionFilters']); } /** * Display issues stats * */ public function issues(array $args, Request $request): void { $dispatcher = $request->getDispatcher(); $context = $request->getContext(); if (!$context) { $dispatcher->handle404(); } $templateMgr = TemplateManager::getManager($request); $this->setupTemplate($request); $dateStart = date('Y-m-d', strtotime('-31 days')); $dateEnd = date('Y-m-d', strtotime('yesterday')); $count = 30; $timeline = Services::get('issueStats')->getTimeline(PKPStatisticsHelper::STATISTICS_DIMENSION_DAY, [ 'assocTypes' => [Application::ASSOC_TYPE_ISSUE], 'contextIds' => [$context->getId()], 'count' => $count, 'dateStart' => $dateStart, 'dateEnd' => $dateEnd, ]); $statsComponent = new \APP\components\StatsIssuePage( $dispatcher->url($request, PKPApplication::ROUTE_API, $context->getPath(), 'stats/issues'), [ 'timeline' => $timeline, 'timelineInterval' => PKPStatisticsHelper::STATISTICS_DIMENSION_DAY, 'timelineType' => 'toc', 'tableColumns' => [ [ 'name' => 'title', 'label' => __('issue.issue'), ], [ 'name' => 'tocViews', 'label' => __('stats.views'), 'value' => 'tocViews', ], [ 'name' => 'issueGalleyViews', 'label' => __('stats.downloads'), 'value' => 'issueGalleyViews', ], [ 'name' => 'total', 'label' => __('stats.total'), 'value' => 'totalViews', 'orderBy' => 'totalViews', 'initialOrderDirection' => true, ], ], 'count' => $count, 'dateStart' => $dateStart, 'dateEnd' => $dateEnd, 'dateRangeOptions' => [ [ 'dateStart' => $dateStart, 'dateEnd' => $dateEnd, 'label' => __('stats.dateRange.last30Days'), ], [ 'dateStart' => date('Y-m-d', strtotime('-91 days')), 'dateEnd' => $dateEnd, 'label' => __('stats.dateRange.last90Days'), ], [ 'dateStart' => date('Y-m-d', strtotime('-12 months')), 'dateEnd' => $dateEnd, 'label' => __('stats.dateRange.last12Months'), ], [ 'dateStart' => '', 'dateEnd' => '', 'label' => __('stats.dateRange.allDates'), ], ], 'orderBy' => 'total', 'orderDirection' => true, ] ); $templateMgr->setState($statsComponent->getConfig()); $templateMgr->assign([ 'pageComponent' => 'StatsIssuesPage', 'pageTitle' => __('stats.issueStats'), 'pageWidth' => TemplateManager::PAGE_WIDTH_WIDE ]); $templateMgr->display('stats/issues.tpl'); } /** * Add OJS-specific configuration options to the stats component data * * Fired when the `TemplateManager::display` hook is called. * * @param array $args [$templateMgr, $template, $sendContentType, $charset, $output] */ public function addSectionFilters($hookName, $args) { $templateMgr = $args[0]; $template = $args[1]; if (!in_array($template, ['stats/publications.tpl', 'stats/editorial.tpl'])) { return; } $context = Application::get()->getRequest()->getContext(); $filters = $templateMgr->getState('filters'); if (is_null($filters)) { $filters = []; } $sections = Repo::section()->getSectionList($context->getId()); $filters[] = [ 'heading' => __('section.sections'), 'filters' => array_map(function ($section) { return [ 'param' => 'sectionIds', 'value' => (int) $section['id'], 'title' => $section['title'], ]; }, $sections), ]; if ($template == 'stats/publications.tpl') { $issues = Repo::issue()->getCollector() ->filterByContextIds([$context->getId()]) ->filterByPublished(true) ->getMany(); $filters[] = [ 'heading' => __('issue.issues'), 'filters' => $issues->map(function ($issue, $key) { return [ 'param' => 'issueIds', 'value' => (int) $issue->getId(), 'title' => $issue->getIssueIdentification(), ]; })->toArray(), ]; } $templateMgr->setState([ 'filters' => $filters ]); } }