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