xref: /template/strap/action/canonical.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1c3437056SNickeau<?php
2c3437056SNickeau
3c3437056SNickeauuse ComboStrap\Canonical;
4*04fd306cSNickeauuse ComboStrap\Site;
5*04fd306cSNickeauuse ComboStrap\SiteConfig;
6*04fd306cSNickeauuse ComboStrap\WikiPath;
7*04fd306cSNickeauuse ComboStrap\ExceptionNotFound;
8*04fd306cSNickeauuse ComboStrap\MarkupPath;
9c3437056SNickeauuse ComboStrap\PluginUtility;
10c3437056SNickeau
11c3437056SNickeauif (!defined('DOKU_INC')) die();
12c3437056SNickeau
13c3437056SNickeau/**
14c3437056SNickeau *
15c3437056SNickeau *
16c3437056SNickeau */
17c3437056SNickeauclass action_plugin_combo_canonical extends DokuWiki_Action_Plugin
18c3437056SNickeau{
19c3437056SNickeau
20c3437056SNickeau    const CONF_CANONICAL_FOR_GA_PAGE_VIEW = "useCanonicalValueForGoogleAnalyticsPageView";
21c3437056SNickeau    const CANONICAL = Canonical::PROPERTY_NAME;
22c3437056SNickeau
23c3437056SNickeau
24c3437056SNickeau    function __construct()
25c3437056SNickeau    {
26c3437056SNickeau        // enable direct access to language strings
27c3437056SNickeau        // ie $this->lang
28c3437056SNickeau        $this->setupLocale();
29c3437056SNickeau    }
30c3437056SNickeau
31c3437056SNickeau    public function register(Doku_Event_Handler $controller)
32c3437056SNickeau    {
33c3437056SNickeau
34c3437056SNickeau        /**
35c3437056SNickeau         * Add canonical to javascript
36*04fd306cSNickeau         * The {@link jsinfo()} is called in the {@link tpl_metaheaders()}
37*04fd306cSNickeau         * 'TPL_METAHEADER_OUTPUT' event has already the script with the JSINFO
38*04fd306cSNickeau         * 'TPL_ACT_RENDER' is triggered just before
39c3437056SNickeau         */
40*04fd306cSNickeau        $controller->register_hook('TPL_ACT_RENDER', 'AFTER', $this, 'addCanonicalToJavascript', array());
41c3437056SNickeau
42c3437056SNickeau    }
43c3437056SNickeau
44c3437056SNickeau
45c3437056SNickeau    /**
46c3437056SNickeau     * Add the canonical value to JSON
47c3437056SNickeau     * to be able to report only on canonical value and not on path
48c3437056SNickeau     * @param $event
49c3437056SNickeau     * @noinspection SpellCheckingInspection
50c3437056SNickeau     */
51c3437056SNickeau    function addCanonicalToJavascript($event)
52c3437056SNickeau    {
53c3437056SNickeau
54*04fd306cSNickeau        try {
55*04fd306cSNickeau            $page = MarkupPath::createFromRequestedPage();
56*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
57*04fd306cSNickeau            return;
58*04fd306cSNickeau        }
59c3437056SNickeau        global $JSINFO;
60*04fd306cSNickeau        try {
61*04fd306cSNickeau            $canonical = $page->getCanonical()->toAbsoluteId();
62*04fd306cSNickeau            $JSINFO[Canonical::PROPERTY_NAME] = $canonical;
63*04fd306cSNickeau        } catch (ExceptionNotFound $e) {
64*04fd306cSNickeau            return;
65*04fd306cSNickeau        }
66*04fd306cSNickeau
67*04fd306cSNickeau        if (isset($JSINFO["ga"]) && SiteConfig::getConfValue(self::CONF_CANONICAL_FOR_GA_PAGE_VIEW, 1)) {
68c3437056SNickeau            //
69c3437056SNickeau            // The path portion of a URL. This value should start with a slash (/) character.
70c3437056SNickeau            // As said here
71c3437056SNickeau            // https://developers.google.com/analytics/devguides/collection/analyticsjs/pages#pageview_fields
72c3437056SNickeau            //
73c3437056SNickeau            //
74c3437056SNickeau            // For the modification instructions
75c3437056SNickeau            // https://developers.google.com/analytics/devguides/collection/analyticsjs/pages#pageview_fields
76*04fd306cSNickeau            $pageViewCanonical = str_replace(WikiPath::NAMESPACE_SEPARATOR_DOUBLE_POINT, "/", $canonical);
77c3437056SNickeau            if ($pageViewCanonical[0] != "/") {
78c3437056SNickeau                $pageViewCanonical = "/$pageViewCanonical";
79c3437056SNickeau            }
80c3437056SNickeau            $JSINFO["ga"]["pageview"] = $pageViewCanonical;
81c3437056SNickeau        }
82*04fd306cSNickeau
83c3437056SNickeau    }
84c3437056SNickeau
85c3437056SNickeau}
86