168843692SSascha Leib<?php 268843692SSascha Leib 368843692SSascha Leibuse dokuwiki\Extension\EventHandler; 468843692SSascha Leibuse dokuwiki\Extension\Event; 568843692SSascha Leib 668843692SSascha Leib/** 7fce6bfe4SSascha Leib * Action Component for the Nu Matomo Plugin 868843692SSascha Leib * 968843692SSascha Leib * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 1068843692SSascha Leib * @author Sascha Leib <sascha.leib(at)kolmio.com> 1168843692SSascha Leib */ 1268843692SSascha Leib 13fce6bfe4SSascha Leibclass action_plugin_numatomo extends DokuWiki_Action_Plugin { 1468843692SSascha Leib 1568843692SSascha Leib /** 1668843692SSascha Leib * Registers a callback functions 1768843692SSascha Leib * 1868843692SSascha Leib * @param EventHandler $controller DokuWiki's event controller object 1968843692SSascha Leib * @return void 2068843692SSascha Leib */ 2168843692SSascha Leib public function register(EventHandler $controller) 2268843692SSascha Leib { 2368843692SSascha Leib $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'handleHeader'); 2468843692SSascha Leib } 2568843692SSascha Leib 2668843692SSascha Leib /** 2768843692SSascha Leib * Adds the preview parameter to the stylesheet loading in non-js mode 2868843692SSascha Leib * 2968843692SSascha Leib * @param Event $event event object by reference 3068843692SSascha Leib * @return void 3168843692SSascha Leib */ 3268843692SSascha Leib public function handleHeader(Event $event, $param) { 3368843692SSascha Leib 3468843692SSascha Leib global $INFO; 35b84896faSSascha Leib 36b84896faSSascha Leib // is the user logged in? 3768843692SSascha Leib $loggedin = isset($INFO['userinfo']); 38b84896faSSascha Leib 39b84896faSSascha Leib // build the tracker code: 40b84896faSSascha Leib $code = NL . DOKU_TAB . DOKU_TAB . "var _paq = window._paq = window._paq || [];" . NL; 41b84896faSSascha Leib 42b84896faSSascha Leib // add the feature flags: 43b84896faSSascha Leib foreach (explode(',', $this->getConf('feature-flags')) as $flag) { 44b84896faSSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['$flag']);" . NL; 45b84896faSSascha Leib } 46b84896faSSascha Leib 47b84896faSSascha Leib // get setting about excluded user groups: 4868843692SSascha Leib $exgrp = $this->getConf('exclude'); 4968843692SSascha Leib $exclUser = false; 5068843692SSascha Leib if ($exgrp === 'admins' && ($loggedin && ($INFO['isadmin'] === 1))) { 5168843692SSascha Leib $exclUser = true; 5268843692SSascha Leib } elseif ($exgrp === 'users' && $loggedin) { 5368843692SSascha Leib $exclUser = true; 5468843692SSascha Leib } 5568843692SSascha Leib if ($exclUser) { 5668843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['optUserOut']);" . NL; 5768843692SSascha Leib } 58b84896faSSascha Leib 59b84896faSSascha Leib // honour the DoNotTrack header? 60b84896faSSascha Leib if ($this->getConf('donottrack') !== 0) { 61b84896faSSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['setDoNotTrack', 'true']);" . NL; 62b84896faSSascha Leib } 63b84896faSSascha Leib 64b84896faSSascha Leib // useful settings for DokuWiki sites 6568843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['setLinkClasses', ['interwiki','urlextern']]);" . NL; 6668843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['setExcludedQueryParams', ['do']]);" . NL; 67b84896faSSascha Leib 68b84896faSSascha Leib // continue default code: 6968843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "_paq.push(['trackPageView']);" . NL; 7068843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "(function() {" . NL; 7168843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "var u='{$this->getConf('server')}';" . NL; 7268843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "_paq.push(['setTrackerUrl', u+'{$this->getConf('instance')}.php']);" . NL; 73*9b64bfb6SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "_paq.push(['setSiteId', '{$this->getConf('siteid')}']);" . NL; 7468843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "var d=document, g=d.createElement('script'), s=d.getElementsByTagName('script')[0];" . NL; 7568843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . DOKU_TAB . "g.async=true; g.src=u+'{$this->getConf('instance')}.js'; s.parentNode.insertBefore(g,s);" . NL; 7668843692SSascha Leib $code .= DOKU_TAB . DOKU_TAB . "})();" . NL. DOKU_TAB; 7768843692SSascha Leib 7868843692SSascha Leib $event->data['script'][] = [ 7968843692SSascha Leib '_data' => $code 8068843692SSascha Leib ]; 8168843692SSascha Leib } 8268843692SSascha Leib}