xref: /plugin/googletagmanager/action.php (revision b325d71abafbc7dfcd713d8db5c31ec13e3931b8)
1<?php
2
3class action_plugin_googletagmanager extends DokuWiki_Action_Plugin
4{
5    public const GTMID = 'GTMID';
6
7    /**
8         * return some info
9         */
10        function getInfo(){
11                return array(
12                        'author' => 'Alexander Lehmann',
13                        'email'  => 'alexlehm@gmail.com',
14                        'date'   => '2026-01-03',
15                        'name'   => 'Google Tag Manager Plugin',
16                        'desc'   => 'Plugin to embed Google Tag Manager in your wiki.',
17                        'url'    => 'https://wiki.lehmann.cx/projects:dokuwiki_gtm',
18                );
19        }
20
21        /**
22         * Register its handlers with the DokuWiki's event controller
23         */
24    public function register(Doku_Event_Handler $controller)
25    {
26        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'addHeaders');
27    }
28
29    public function addHeaders(&$event, $param)
30    {
31            $GTMID = $this->getConf(self::GTMID);
32            if (!$GTMID) return;
33
34            $is_AW_tag = substr($GTMID, 0, 3) == 'AW-';
35
36        if ($is_AW_tag) {
37            $event->data['script'][] = array (
38                'src' => "https://www.googletagmanager.com/gtag/js?id=" . $GTMID,
39            );
40            $event->data['script'][] = array (
41                'type' => 'text/javascript',
42                '_data' => "window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);}" .
43                    " gtag('js', new Date()); gtag('config', '" .
44                    $GTMID .
45                    "');",
46            );
47        } else {
48            $event->data['noscript'][] = array (
49                '_data' => '<iframe src="https://www.googletagmanager.com/ns.html?id=' .
50                    $GTMID .
51                    '" height="0" width="0" style="display:none;visibility:hidden"></iframe>',
52            );
53            $event->data['script'][] = array (
54                'type' => 'text/javascript',
55                '_data' => "(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
56new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
57j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
58'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
59})(window,document,'script','dataLayer','" .
60                    $GTMID .
61                    "');",
62            );
63        }
64    }
65}
66