-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSiteStatisticsPlugin.php
More file actions
149 lines (130 loc) · 3.88 KB
/
SiteStatisticsPlugin.php
File metadata and controls
149 lines (130 loc) · 3.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
<?php
/**
* @file SiteStatisticsPlugin.php
*
* Copyright (c) 2013-2024 Simon Fraser University
* Copyright (c) 2003-2024 John Willinsky
* Distributed under the GNU GPL v3. For full terms see the file docs/COPYING.
*
* @class SiteStatisticsPlugin
*
* @brief This plugin creates a public site wide statistics page.
*/
namespace APP\plugins\generic\siteStatistics;
use APP\core\Application;
use APP\plugins\generic\siteStatistics\SiteStatisticsPageHandler;
use PKP\core\PKPApplication;
use PKP\core\PKPPageRouter;
use PKP\plugins\GenericPlugin;
use PKP\plugins\Hook;
define('SITESTATISTICS_NMI_TYPE', 'SITESTATISTICS_NMI');
class SiteStatisticsPlugin extends GenericPlugin
{
/**
* @copydoc Plugin::register()
*
* @param null|mixed $mainContextId
*/
public function register($category, $path, $mainContextId = null): bool
{
$success = parent::register($category, $path, $mainContextId);
if (Application::isUnderMaintenance()) {
return $success;
}
// Only show for site level
if ($this->getCurrentContextId() != Application::CONTEXT_ID_NONE) {
return $success;
}
if ($success) {
Hook::add('LoadHandler', $this->setPageHandler(...));
Hook::add('NavigationMenus::itemTypes', $this->addMenuItemTypes(...));
Hook::add('NavigationMenus::displaySettings', $this->setMenuItemDisplayDetails(...));
}
return $success;
}
/**
* Route requests for the site statistics page handler
*/
public function setPageHandler(string $hookName, array $args): bool
{
$page = & $args[0];
$handler = & $args[3];
if ($this->getEnabled() && $page === 'statistics') {
$handler = new SiteStatisticsPageHandler($this);
return true;
}
return false;
}
/**
* Add Navigation Menu Item type
*
* @param $hookName string
* @param $params array [
* @option array Existing menu item types
* ]
*/
public function addMenuItemTypes(string $hookName, array $args)
{
$types =& $args[0];
$types[SITESTATISTICS_NMI_TYPE] = [
'title' => __('plugins.generic.siteStatistics.navMenuItem'),
'description' => __('plugins.generic.siteStatistics.navMenuItem.description'),
];
}
/**
* Set the display details for the custom menu item types
*
* @param $hookName string
* @param $args array [
* @option NavigationMenuItem
* ]
*/
public function setMenuItemDisplayDetails(string $hookName, array $args)
{
$navigationMenuItem =& $args[0];
if ($navigationMenuItem->getType() === SITESTATISTICS_NMI_TYPE) {
$request = Application::get()->getRequest();
$dispatcher = $request->getDispatcher();
$navigationMenuItem->setUrl($dispatcher->url(
$request,
PKPApplication::ROUTE_PAGE,
'index',
'statistics',
null,
null
));
}
}
/**
* @copydoc Plugin::isSitePlugin()
*/
public function isSitePlugin(): bool
{
// This is a site-wide plugin.
return true;
}
/**
* @copydoc LazyLoadPlugin::getName()
*/
public function getName(): string
{
return 'siteStatisticsPlugin';
}
/**
* @copydoc Plugin::getDisplayName()
*/
public function getDisplayName(): string
{
return __('plugins.generic.siteStatistics.name');
}
/**
* @copydoc Plugin::getDescription()
*/
public function getDescription(): string
{
return __('plugins.generic.siteStatistics.description');
}
}
if (!PKP_STRICT_MODE) {
class_alias('\APP\plugins\generic\siteStatistics\SiteStatisticsPlugin', '\SiteStatisticsPlugin');
}