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