xref: /plugin/numatomo/action.php (revision 9b64bfb6e4f3ec84bec3cc9257caf37d50de3624)
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}