xref: /plugin/botmon/admin.php (revision 0c03961572c9f505f27467430b8d67632cbd6df3)
1f125bc8dSSascha Leib<?php
2f125bc8dSSascha Leib
3f125bc8dSSascha Leibuse dokuwiki\Extension\AdminPlugin;
4f125bc8dSSascha Leib
5f125bc8dSSascha Leib/**
67bd08c30SSascha Leib * Bot Monitoring Plugin
7f125bc8dSSascha Leib*
8f125bc8dSSascha Leib* @license    GPL 2 (http://www.gnu.org/licenses/gpl.html)
9f125bc8dSSascha Leib* @author     Sascha Leib <ad@hominem.info>
10f125bc8dSSascha Leib*/
11f125bc8dSSascha Leib
12f125bc8dSSascha Leib/**
13f125bc8dSSascha Leib * All DokuWiki plugins to extend the admin function
14f125bc8dSSascha Leib * need to inherit from this class
15f125bc8dSSascha Leib**/
167bd08c30SSascha Leibclass admin_plugin_botmon extends AdminPlugin {
17f125bc8dSSascha Leib
18f125bc8dSSascha Leib	/**
19f125bc8dSSascha Leib	 * Return the path to the icon being displayed in the main admin menu.
20f125bc8dSSascha Leib	 *
21f125bc8dSSascha Leib	 * @return string full path to the icon file
22f125bc8dSSascha Leib	**/
23f125bc8dSSascha Leib	public function getMenuIcon() {
24f125bc8dSSascha Leib		$plugin = $this->getPluginName();
25f125bc8dSSascha Leib		return DOKU_PLUGIN . $plugin . '/img/admin.svg';
26f125bc8dSSascha Leib	}
27f125bc8dSSascha Leib
28f125bc8dSSascha Leib	/**
29f125bc8dSSascha Leib	 * output appropriate html
30f125bc8dSSascha Leib	*/
31f125bc8dSSascha Leib	public function html() {
32f125bc8dSSascha Leib
33ade4db36SSascha Leib		global $conf;
34ade4db36SSascha Leib
35ade4db36SSascha Leib		$pluginPath = $conf['basedir'] . 'lib/plugins/' . $this->getPluginName();
36f125bc8dSSascha Leib
37f125bc8dSSascha Leib		/* Plugin Headline */
38*0c039615SSascha Leib		echo '<div id="botmon__admin">
39*0c039615SSascha Leib	<h1>Bot Monitoring Plugin</h1>
40*0c039615SSascha Leib	<nav id="botmon__tabs">
41*0c039615SSascha Leib		<ul class="tabs" role="tablist">
42*0c039615SSascha Leib			<li role="presentation" class="active"><a role="tab" href="#botmon__panel1" aria-controls="botmon__panel1" id="botmon__tab1" aria-selected="true">Today</a></li>
43*0c039615SSascha Leib		</ul>
44*0c039615SSascha Leib	</nav>';
45f125bc8dSSascha Leib
46*0c039615SSascha Leib	if ($this->hasOldLogFiles()) {
47*0c039615SSascha Leib		echo '<div class="info"><strong>Note:</strong> There are old log files that can be deleted. <a href="' . $pluginPath . '/cleanup.php" target="_blank">Click here</a> to run a delete script, or use <em>cron</em> to automatically delete them.</div>';
48*0c039615SSascha Leib	}
49f125bc8dSSascha Leib
50*0c039615SSascha Leib	echo '<article role="tabpanel" id="botmon__today"">
51*0c039615SSascha Leib		<h2 class="a11y">Today</h2>
52*0c039615SSascha Leib		<header id="botmon__today__title">Loading&nbsp;&hellip;</header>
53*0c039615SSascha Leib		<div id="botmon__today__content">
54*0c039615SSascha Leib			<details id="botmon__today__overview" open>
55*0c039615SSascha Leib				<summary>Bot overview</summary>
56*0c039615SSascha Leib				<div class="grid-3-columns">
57*0c039615SSascha Leib					<dl id="botmon__today__botsvshumans"></dl>
58*0c039615SSascha Leib					<dl id="botmon__botslist"></dl>
59*0c039615SSascha Leib					<dl id="botmon__today__botips"></dl>
60*0c039615SSascha Leib				</div>
61*0c039615SSascha Leib			</details>
62*0c039615SSascha Leib			<details id="botmon__today__webmetrics">
63*0c039615SSascha Leib				<summary>Web metrics</summary>
64*0c039615SSascha Leib				<div class="grid-3-columns">
65*0c039615SSascha Leib					<dl id="botmon__today__wm_overview"></dl>
66*0c039615SSascha Leib					<dl></dl>
67*0c039615SSascha Leib					<dl></dl>
68*0c039615SSascha Leib				</div>
69*0c039615SSascha Leib			</details>
70*0c039615SSascha Leib			<details id="botmon__today__visitors">
71*0c039615SSascha Leib				<summary>Visitor logs</summary>
72*0c039615SSascha Leib				<div id="botmon__today__visitorlists"></div>
73*0c039615SSascha Leib			</details>
74*0c039615SSascha Leib		</div>
75*0c039615SSascha Leib		<footer aria-live="polite">
76*0c039615SSascha Leib			<img src="' . $pluginPath . '/img/spinner.svg" id="botmon__today__busy" width="12" height="12" alt="busy indicator">
77*0c039615SSascha Leib			<span id="botmon__today__status">Initialising&nbsp;&hellip;</span>
78*0c039615SSascha Leib		</footer>
79*0c039615SSascha Leib	</article>
80*0c039615SSascha Leib</div><!-- End of BotMon Admin Tool -->';
81ade4db36SSascha Leib
82*0c039615SSascha Leib	}
83f125bc8dSSascha Leib
84*0c039615SSascha Leib	/**
85*0c039615SSascha Leib	 * Check if there are old log files that can be deleted.
86*0c039615SSascha Leib	 *
87*0c039615SSascha Leib	 * @return bool true if there are old log files, false otherwise
88*0c039615SSascha Leib	 */
89*0c039615SSascha Leib	private function hasOldLogFiles() {
90*0c039615SSascha Leib
91*0c039615SSascha Leib		$today = gmdate('Y-m-d');
92*0c039615SSascha Leib		$yesterday = gmdate('Y-m-d', time() - 86400);
93*0c039615SSascha Leib
94*0c039615SSascha Leib		// scan the log directory and delete all files except for today and yesterday:
95*0c039615SSascha Leib		$dir = scandir(getcwd() . '/lib/plugins/botmon/logs');
96*0c039615SSascha Leib		foreach($dir as $file) {
97*0c039615SSascha Leib			$fName = pathinfo($file, PATHINFO_BASENAME);
98*0c039615SSascha Leib			$bName = strtok($fName, '.');
99*0c039615SSascha Leib
100*0c039615SSascha Leib			if ($bName == '' || $bName == 'logfiles') {
101*0c039615SSascha Leib				// ignore
102*0c039615SSascha Leib			} else if ($bName == $today || $bName == $yesterday) {
103*0c039615SSascha Leib				// skip
104*0c039615SSascha Leib			} else {
105*0c039615SSascha Leib				return true;
106*0c039615SSascha Leib			}
107*0c039615SSascha Leib		}
108*0c039615SSascha Leib		return false;
109f125bc8dSSascha Leib	}
110f125bc8dSSascha Leib}