*/ 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 ]; } }