xref: /plugin/googletagmanager/action.php (revision 31d55d8330c533e22ef3efe068fb7ecdbac608e6)
1<?php
2
3use dokuwiki\Extension\ActionPlugin;
4use dokuwiki\Extension\EventHandler;
5
6class action_plugin_googletagmanager extends ActionPlugin
7{
8    public const GTMID = 'GTMID';
9
10    /**
11     * Register its handlers with the DokuWiki's event controller
12     */
13    public function register(EventHandler $controller)
14    {
15        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addHeaders');
16    }
17
18    public function addHeaders(&$event, $param)
19    {
20            $GTMID = $this->getConf(self::GTMID);
21            if (!$GTMID) return;
22
23            $is_AW_tag = substr($GTMID, 0, 3) == 'AW-';
24
25        if ($is_AW_tag) {
26            $event->data['script'][] = ['src' => "https://www.googletagmanager.com/gtag/js?id=" . $GTMID];
27            $event->data['script'][] = ['type' => 'text/javascript',
28                '_data' => "window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);}" .
29                " gtag('js', new Date()); gtag('config', '" .
30                $GTMID .
31                "');"];
32        } else {
33            $event->data['noscript'][] = ['_data' => '<iframe src="https://www.googletagmanager.com/ns.html?id=' .
34                $GTMID .
35                '" height="0" width="0" style="display:none;visibility:hidden"></iframe>'];
36            $event->data['script'][] = ['type' => 'text/javascript',
37                '_data' => "(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
38new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
39j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
40'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
41})(window,document,'script','dataLayer','" .
42                $GTMID .
43                "');"];
44        }
45    }
46}
47