Files
dokuwiki-plugin-botmon/action.php
2025-08-20 22:58:42 +03:00

86 lines
2.4 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?php
use dokuwiki\Extension\EventHandler;
use dokuwiki\Extension\Event;
/**
* Action Component for the Monitor Plugin
*
* @license GPL 3 (http://www.gnu.org/licenses/gpl.html)
* @author Sascha Leib <sascha.leib(at)kolmio.com>
*/
class action_plugin_monitor extends DokuWiki_Action_Plugin {
/**
* Registers a callback functions
*
* @param EventHandler $controller DokuWiki's event controller object
* @return void
*/
public function register(EventHandler $controller) {
$controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'insertHeader');
}
/**
* Inserts tracking code to the page header
*
* @param Event $event event object by reference
* @return void
*/
public function insertHeader(Event $event, $param) {
global $INFO;
// is there a user logged in?
$username = ( !empty($INFO['userinfo']) && !empty($INFO['userinfo']['name'])
? $INFO['userinfo']['name'] : null);
// build the tracker code:
$code = NL . DOKU_TAB . "document._monitor = {'t0': Date.now()};" . NL;
if ($username) {
$code .= DOKU_TAB . 'document._monitor.user = "' . $username . '";'. NL;
}
$code .= DOKU_TAB . "addEventListener('load',function(){" . NL;
$code .= DOKU_TAB . DOKU_TAB . "const e=document.createElement('script');" . NL;
$code .= DOKU_TAB . DOKU_TAB . "e.async=true;e.defer=true;" . NL;
$code .= DOKU_TAB . DOKU_TAB . "e.src='".DOKU_BASE."lib/plugins/monitor/client.js';" . NL;
$code .= DOKU_TAB . DOKU_TAB . "document.getElementsByTagName('head')[0].appendChild(e);" . NL;
$code .= DOKU_TAB . "});" . NL;
$event->data['script'][] = [
'_data' => $code
];
/* Write out client info to a server log: */
$logArr = Array(
$_SERVER['REMOTE_ADDR'] ?? '', /* remote IP */
$INFO['id'] ?? '', /* user agent */
$_COOKIE['DokuWiki'] ?? '', /* DokuWiki session ID */
$username,
$_SERVER['HTTP_USER_AGENT'] ?? '' /* User agent */
);
//* create the log line */
$filename = __DIR__ .'/logs/' . gmdate('Y-m-d') . '.srv'; /* use GMT date for filename */
$logline = gmdate('Y-m-d H:i:s'); /* use GMT time for log entries */
foreach ($logArr as $tab) {
$logline .= "\t" . $tab;
};
/* write the log line to the file */
$logfile = fopen($filename, 'a');
if (!$logfile) die();
if (fwrite($logfile, $logline . "\n") === false) {
fclose($logfile);
die();
}
/* Done */
fclose($logfile);
}
}