1*68843692SSascha Leib<?php 2*68843692SSascha Leib 3*68843692SSascha Leibuse dokuwiki\Extension\EventHandler; 4*68843692SSascha Leibuse dokuwiki\Extension\Event; 5*68843692SSascha Leib 6*68843692SSascha Leib/** 7*68843692SSascha Leib * Action Component for the Matomo Plugin 8*68843692SSascha Leib * 9*68843692SSascha Leib * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 10*68843692SSascha Leib * @author Andreas Gohr <andi@splitbrain.org> 11*68843692SSascha Leib * @author Sascha Leib <sascha.leib(at)kolmio.com> 12*68843692SSascha Leib */ 13*68843692SSascha Leib 14*68843692SSascha Leibclass action_plugin_matomo extends DokuWiki_Action_Plugin { 15*68843692SSascha Leib 16*68843692SSascha Leib /** 17*68843692SSascha Leib * Registers a callback functions 18*68843692SSascha Leib * 19*68843692SSascha Leib * @param EventHandler $controller DokuWiki's event controller object 20*68843692SSascha Leib * @return void 21*68843692SSascha Leib */ 22*68843692SSascha Leib public function register(EventHandler $controller) 23*68843692SSascha Leib { 24*68843692SSascha Leib $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'handleHeader'); 25*68843692SSascha Leib } 26*68843692SSascha Leib 27*68843692SSascha Leib /** 28*68843692SSascha Leib * Adds the preview parameter to the stylesheet loading in non-js mode 29*68843692SSascha Leib * 30*68843692SSascha Leib * @param Event $event event object by reference 31*68843692SSascha Leib * @return void 32*68843692SSascha Leib */ 33*68843692SSascha Leib public function handleHeader(Event $event, $param) { 34*68843692SSascha Leib 35*68843692SSascha Leib global $INFO; 36*68843692SSascha Leib $loggedin = isset($INFO['userinfo']); 37*68843692SSascha Leib $exgrp = $this->getConf('exclude'); 38*68843692SSascha Leib $exclUser = false; 39*68843692SSascha Leib if ($exgrp === 'admins' && ($loggedin && ($INFO['isadmin'] === 1))) { 40*68843692SSascha Leib $exclUser = true; 41*68843692SSascha Leib } elseif ($exgrp === 'users' && $loggedin) { 42*68843692SSascha Leib $exclUser = true; 43*68843692SSascha Leib } 44*68843692SSascha Leib 45*68843692SSascha Leib $code = NL . DOKU_TAB . DOKU_TAB . "var _paq = window._paq = window._paq || [];" . NL; 46*68843692SSascha Leib 47*68843692SSascha Leib foreach (explode(',', $this->getConf('feature-flags')) as $flag) { 48*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['$flag']);" . NL; 49*68843692SSascha Leib } 50*68843692SSascha Leib if ($exclUser) { 51*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['optUserOut']);" . NL; 52*68843692SSascha Leib } 53*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['setLinkClasses', ['interwiki','urlextern']]);" . NL; 54*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['setExcludedQueryParams', ['do']]);" . NL; 55*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['setDoNotTrack', 'true']);" . NL; 56*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['trackPageView']);" . NL; 57*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "(function() {" . NL; 58*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "var u='{$this->getConf('server')}';" . NL; 59*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "_paq.push(['setTrackerUrl', u+'{$this->getConf('instance')}.php']);" . NL; 60*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "_paq.push(['setSiteId', '{$this->getConf('siteid')}}']);" . NL; 61*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];" . NL; 62*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "g.async=true; g.src=u+'{$this->getConf('instance')}.js'; s.parentNode.insertBefore(g,s);" . NL; 63*68843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "})();" . NL. DOKU_TAB; 64*68843692SSascha Leib 65*68843692SSascha Leib // $code .= '<!-- ' . print_r($INFO, true) . ' -->' . NL; 66*68843692SSascha Leib 67*68843692SSascha Leib $event->data['script'][] = [ 68*68843692SSascha Leib '_data' => $code 69*68843692SSascha Leib ]; 70*68843692SSascha Leib } 71*68843692SSascha Leib}