xref: /plugin/botmon/action.php (revision 6980370b98ee4057ff71f90de2008460e270ecc7)
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}