xref: /plugin/combo/action/canonical.php (revision c3437056399326d621a01da73b649707fbb0ae69)
1*c3437056SNickeau<?php
2*c3437056SNickeau
3*c3437056SNickeauuse ComboStrap\Canonical;
4*c3437056SNickeauuse ComboStrap\DokuPath;
5*c3437056SNickeauuse ComboStrap\Page;
6*c3437056SNickeauuse ComboStrap\PluginUtility;
7*c3437056SNickeau
8*c3437056SNickeauif (!defined('DOKU_INC')) die();
9*c3437056SNickeau
10*c3437056SNickeau/**
11*c3437056SNickeau *
12*c3437056SNickeau *
13*c3437056SNickeau */
14*c3437056SNickeauclass action_plugin_combo_canonical extends DokuWiki_Action_Plugin
15*c3437056SNickeau{
16*c3437056SNickeau
17*c3437056SNickeau    const CONF_CANONICAL_FOR_GA_PAGE_VIEW = "useCanonicalValueForGoogleAnalyticsPageView";
18*c3437056SNickeau    const CANONICAL = Canonical::PROPERTY_NAME;
19*c3437056SNickeau
20*c3437056SNickeau
21*c3437056SNickeau    function __construct()
22*c3437056SNickeau    {
23*c3437056SNickeau        // enable direct access to language strings
24*c3437056SNickeau        // ie $this->lang
25*c3437056SNickeau        $this->setupLocale();
26*c3437056SNickeau    }
27*c3437056SNickeau
28*c3437056SNickeau    public function register(Doku_Event_Handler $controller)
29*c3437056SNickeau    {
30*c3437056SNickeau
31*c3437056SNickeau        /**
32*c3437056SNickeau         * Add canonical to javascript
33*c3437056SNickeau         */
34*c3437056SNickeau        $controller->register_hook('TPL_ACT_RENDER', 'BEFORE', $this, 'addCanonicalToJavascript', array());
35*c3437056SNickeau
36*c3437056SNickeau    }
37*c3437056SNickeau
38*c3437056SNickeau
39*c3437056SNickeau
40*c3437056SNickeau    /**
41*c3437056SNickeau     * Add the canonical value to JSON
42*c3437056SNickeau     * to be able to report only on canonical value and not on path
43*c3437056SNickeau     * @param $event
44*c3437056SNickeau     * @noinspection SpellCheckingInspection
45*c3437056SNickeau     */
46*c3437056SNickeau    function addCanonicalToJavascript($event)
47*c3437056SNickeau    {
48*c3437056SNickeau
49*c3437056SNickeau        global $JSINFO;
50*c3437056SNickeau        $page = Page::createPageFromRequestedPage();
51*c3437056SNickeau        if ($page->getCanonical() !== null) {
52*c3437056SNickeau            $JSINFO[Canonical::PROPERTY_NAME] = $page->getCanonical();
53*c3437056SNickeau            if (isset($JSINFO["ga"]) && PluginUtility::getConfValue(self::CONF_CANONICAL_FOR_GA_PAGE_VIEW, 1)) {
54*c3437056SNickeau                //
55*c3437056SNickeau                // The path portion of a URL. This value should start with a slash (/) character.
56*c3437056SNickeau                // As said here
57*c3437056SNickeau                // https://developers.google.com/analytics/devguides/collection/analyticsjs/pages#pageview_fields
58*c3437056SNickeau                //
59*c3437056SNickeau                //
60*c3437056SNickeau                // For the modification instructions
61*c3437056SNickeau                // https://developers.google.com/analytics/devguides/collection/analyticsjs/pages#pageview_fields
62*c3437056SNickeau                $pageViewCanonical = str_replace(DokuPath::PATH_SEPARATOR, "/", $page->getCanonical());
63*c3437056SNickeau                if ($pageViewCanonical[0] != "/") {
64*c3437056SNickeau                    $pageViewCanonical = "/$pageViewCanonical";
65*c3437056SNickeau                }
66*c3437056SNickeau                $JSINFO["ga"]["pageview"] = $pageViewCanonical;
67*c3437056SNickeau            }
68*c3437056SNickeau        }
69*c3437056SNickeau    }
70*c3437056SNickeau
71*c3437056SNickeau}
72