1*6980370bSSascha Leib<?php 2*6980370bSSascha Leib 3*6980370bSSascha Leibuse dokuwiki\Extension\EventHandler; 4*6980370bSSascha Leibuse dokuwiki\Extension\Event; 5*6980370bSSascha Leib 6*6980370bSSascha Leib/** 7*6980370bSSascha Leib * Action Component for the Monitor Plugin 8*6980370bSSascha Leib * 9*6980370bSSascha Leib * @license GPL 3 (http://www.gnu.org/licenses/gpl.html) 10*6980370bSSascha Leib * @author Sascha Leib <sascha.leib(at)kolmio.com> 11*6980370bSSascha Leib */ 12*6980370bSSascha Leib 13*6980370bSSascha Leibclass action_plugin_monitor extends DokuWiki_Action_Plugin { 14*6980370bSSascha Leib 15*6980370bSSascha Leib /** 16*6980370bSSascha Leib * Registers a callback functions 17*6980370bSSascha Leib * 18*6980370bSSascha Leib * @param EventHandler $controller DokuWiki's event controller object 19*6980370bSSascha Leib * @return void 20*6980370bSSascha Leib */ 21*6980370bSSascha Leib public function register(EventHandler $controller) { 22*6980370bSSascha Leib $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'insertHeader'); 23*6980370bSSascha Leib } 24*6980370bSSascha Leib 25*6980370bSSascha Leib /** 26*6980370bSSascha Leib * Inserts tracking code to the page header 27*6980370bSSascha Leib * 28*6980370bSSascha Leib * @param Event $event event object by reference 29*6980370bSSascha Leib * @return void 30*6980370bSSascha Leib */ 31*6980370bSSascha Leib public function insertHeader(Event $event, $param) { 32*6980370bSSascha Leib 33*6980370bSSascha Leib global $INFO; 34*6980370bSSascha Leib 35*6980370bSSascha Leib // is there a user logged in? 36*6980370bSSascha Leib $username = ( !empty($INFO['userinfo']) && !empty($INFO['userinfo']['name']) 37*6980370bSSascha Leib ? $INFO['userinfo']['name'] : null); 38*6980370bSSascha Leib 39*6980370bSSascha Leib // build the tracker code: 40*6980370bSSascha Leib $code = NL . DOKU_TAB . "document._monitor = {'t0': Date.now()};" . NL; 41*6980370bSSascha Leib if ($username) { 42*6980370bSSascha Leib $code .= DOKU_TAB . 'document._monitor.user = "' . $username . '";'. NL; 43*6980370bSSascha Leib } 44*6980370bSSascha Leib $code .= DOKU_TAB . "addEventListener('load',function(){" . NL; 45*6980370bSSascha Leib 46*6980370bSSascha Leib $code .= DOKU_TAB . DOKU_TAB . "const e=document.createElement('script');" . NL; 47*6980370bSSascha Leib $code .= DOKU_TAB . DOKU_TAB . "e.async=true;e.defer=true;" . NL; 48*6980370bSSascha Leib $code .= DOKU_TAB . DOKU_TAB . "e.src='".DOKU_BASE."lib/plugins/monitor/client.js';" . NL; 49*6980370bSSascha Leib $code .= DOKU_TAB . DOKU_TAB . "document.getElementsByTagName('head')[0].appendChild(e);" . NL; 50*6980370bSSascha Leib $code .= DOKU_TAB . "});" . NL; 51*6980370bSSascha Leib 52*6980370bSSascha Leib $event->data['script'][] = [ 53*6980370bSSascha Leib '_data' => $code 54*6980370bSSascha Leib ]; 55*6980370bSSascha Leib } 56*6980370bSSascha Leib}