1007225e5Sgerardnico<?php 2007225e5Sgerardnico 3c3437056SNickeau 471f916b9Sgerardnicouse ComboStrap\Page; 5007225e5Sgerardnico 6007225e5Sgerardnico/** 7c3437056SNickeau * Class action_plugin_combo_metacanonical 8c3437056SNickeau * Add all canonical HTML meta 9007225e5Sgerardnico */ 10c3437056SNickeauclass action_plugin_combo_metacanonical 11007225e5Sgerardnico{ 12007225e5Sgerardnico 13007225e5Sgerardnico 14007225e5Sgerardnico public function register(Doku_Event_Handler $controller) 15007225e5Sgerardnico { 1685e82846SNickeau /** 1785e82846SNickeau * https://www.dokuwiki.org/devel:event:tpl_metaheader_output 1885e82846SNickeau */ 19007225e5Sgerardnico $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'metaCanonicalProcessing', array()); 20c3437056SNickeau 21c3437056SNickeau 22007225e5Sgerardnico } 23007225e5Sgerardnico 24007225e5Sgerardnico /** 25007225e5Sgerardnico * Dokuwiki has already a canonical methodology 26007225e5Sgerardnico * https://www.dokuwiki.org/canonical 27007225e5Sgerardnico * 28007225e5Sgerardnico * @param $event 29007225e5Sgerardnico */ 30007225e5Sgerardnico function metaCanonicalProcessing($event) 31007225e5Sgerardnico { 32007225e5Sgerardnico 335f891b7eSNickeau global $ID; 345f891b7eSNickeau if (empty($ID)) { 355f891b7eSNickeau // $_SERVER['SCRIPT_NAME']== "/lib/exe/mediamanager.php" 369da76789Sgerardnico // $ID is null 379da76789Sgerardnico return; 389da76789Sgerardnico } 399da76789Sgerardnico 4085e82846SNickeau $page = Page::createPageFromId($ID); 419da76789Sgerardnico 42007225e5Sgerardnico /** 43531e725cSNickeau * No canonical for slot page 44007225e5Sgerardnico */ 45*4cadd4f8SNickeau if ($page->isSecondarySlot()) { 46007225e5Sgerardnico return; 47007225e5Sgerardnico } 48007225e5Sgerardnico 49007225e5Sgerardnico /** 50007225e5Sgerardnico * Where do we pick the canonical URL 51007225e5Sgerardnico */ 52007225e5Sgerardnico /** 53007225e5Sgerardnico * Canonical from meta 54007225e5Sgerardnico * 55007225e5Sgerardnico * FYI: The creation of the link was extracted from 56007225e5Sgerardnico * {@link wl()} that call {@link idfilter()} that performs just a replacement 57007225e5Sgerardnico * Calling the wl function will not work because 58007225e5Sgerardnico * {@link wl()} use the constant DOKU_URL that is set before any test via getBaseURL(true) 59007225e5Sgerardnico */ 60c3437056SNickeau $canonicalUrl = $page->getAbsoluteCanonicalUrl(); 61007225e5Sgerardnico 62007225e5Sgerardnico /** 63007225e5Sgerardnico * Replace the meta entry 64007225e5Sgerardnico * 65007225e5Sgerardnico * First search the key of the meta array 66007225e5Sgerardnico */ 67007225e5Sgerardnico $canonicalKey = ""; 68007225e5Sgerardnico $canonicalRelArray = array("rel" => "canonical", "href" => $canonicalUrl); 69007225e5Sgerardnico foreach ($event->data['link'] as $key => $link) { 70007225e5Sgerardnico if ($link["rel"] == "canonical") { 71007225e5Sgerardnico $canonicalKey = $key; 72007225e5Sgerardnico } 73007225e5Sgerardnico } 74007225e5Sgerardnico if ($canonicalKey != "") { 75007225e5Sgerardnico // Update 76007225e5Sgerardnico $event->data['link'][$canonicalKey] = $canonicalRelArray; 77007225e5Sgerardnico } else { 78007225e5Sgerardnico // Add 79007225e5Sgerardnico $event->data['link'][] = $canonicalRelArray; 80007225e5Sgerardnico } 81007225e5Sgerardnico 82007225e5Sgerardnico /** 83007225e5Sgerardnico * Add the Og canonical meta 84007225e5Sgerardnico * https://developers.facebook.com/docs/sharing/webmasters/getting-started/versioned-link/ 85007225e5Sgerardnico */ 86007225e5Sgerardnico $canonicalOgKeyKey = ""; 87007225e5Sgerardnico $canonicalPropertyKey = "og:url"; 88007225e5Sgerardnico $canonicalOgArray = array("property" => $canonicalPropertyKey, "content" => $canonicalUrl); 89ebdc69ceSgerardnico // Search if the canonical property is already present 90007225e5Sgerardnico foreach ($event->data['meta'] as $key => $meta) { 91ebdc69ceSgerardnico if (array_key_exists("property", $meta)) { 92ebdc69ceSgerardnico /** 93ebdc69ceSgerardnico * We may have several properties 94ebdc69ceSgerardnico */ 95007225e5Sgerardnico if ($meta["property"] == $canonicalPropertyKey) { 96007225e5Sgerardnico $canonicalOgKeyKey = $key; 97007225e5Sgerardnico } 98007225e5Sgerardnico } 99ebdc69ceSgerardnico } 100007225e5Sgerardnico if ($canonicalOgKeyKey != "") { 101007225e5Sgerardnico // Update 102007225e5Sgerardnico $event->data['meta'][$canonicalOgKeyKey] = $canonicalOgArray; 103007225e5Sgerardnico } else { 104007225e5Sgerardnico // Add 105007225e5Sgerardnico $event->data['meta'][] = $canonicalOgArray; 106007225e5Sgerardnico } 107007225e5Sgerardnico 108007225e5Sgerardnico } 109007225e5Sgerardnico 110007225e5Sgerardnico} 111