1007225e5Sgerardnico<?php 2007225e5Sgerardnico 3007225e5Sgerardnicouse ComboStrap\LogUtility; 4*c3437056SNickeauuse ComboStrap\Metadata; 55f891b7eSNickeauuse ComboStrap\Page; 6007225e5Sgerardnico 7007225e5Sgerardnico 8007225e5Sgerardnico/** 9007225e5Sgerardnico * Take the metadata description 10007225e5Sgerardnico * 11*c3437056SNickeau * To known more about description and [[docs:seo:seo|search engine optimization]], see: 12*c3437056SNickeau * [[https://developer.mozilla.org/en-US/docs/Learn/HTML/Introduction_to_HTML/The_head_metadata_in_HTML#Active_learning_The_descriptions_use_in_search_engines|Active learning: The description's use in search engines]]. 13*c3437056SNickeau * [[https://developers.google.com/search/docs/beginner/seo-starter-guide#use-the-description-meta-tag|Description section of the Google SEO Starter guide]] 14007225e5Sgerardnico */ 15007225e5Sgerardnicoclass action_plugin_combo_metadescription extends DokuWiki_Action_Plugin 16007225e5Sgerardnico{ 17007225e5Sgerardnico 18007225e5Sgerardnico const DESCRIPTION_META_KEY = 'description'; 19*c3437056SNickeau const FACEBOOK_DESCRIPTION_PROPERTY = 'og:description'; 20007225e5Sgerardnico 21007225e5Sgerardnico public function register(Doku_Event_Handler $controller) 22007225e5Sgerardnico { 23007225e5Sgerardnico $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'description_modification', array()); 24007225e5Sgerardnico } 25007225e5Sgerardnico 26007225e5Sgerardnico /** 27007225e5Sgerardnico * Add a meta-data description 285f891b7eSNickeau * @param $event 295f891b7eSNickeau * @param $param 30007225e5Sgerardnico */ 31007225e5Sgerardnico function description_modification(&$event, $param) 32007225e5Sgerardnico { 33007225e5Sgerardnico 34007225e5Sgerardnico global $ID; 355f891b7eSNickeau if (empty($ID)) { 365f891b7eSNickeau return; // Admin call for instance 375f891b7eSNickeau } 38007225e5Sgerardnico 39007225e5Sgerardnico /** 40007225e5Sgerardnico * Description 41007225e5Sgerardnico * https://www.dokuwiki.org/devel:metadata 42007225e5Sgerardnico */ 4385e82846SNickeau $page = Page::createPageFromId($ID); 44007225e5Sgerardnico 455f891b7eSNickeau $description = $page->getDescriptionOrElseDokuWiki(); 46007225e5Sgerardnico if (empty($description)) { 47007225e5Sgerardnico $this->sendDestInfo($ID); 48007225e5Sgerardnico return; 49007225e5Sgerardnico } 50007225e5Sgerardnico 51007225e5Sgerardnico // Add it to the meta 52*c3437056SNickeau Metadata::upsertMetaOnUniqueAttribute( 53*c3437056SNickeau $event->data['meta'], 54*c3437056SNickeau "name", 55*c3437056SNickeau [ 56*c3437056SNickeau "name" => self::DESCRIPTION_META_KEY, 57*c3437056SNickeau "content" => $description 58*c3437056SNickeau ] 59*c3437056SNickeau ); 60*c3437056SNickeau Metadata::upsertMetaOnUniqueAttribute( 61*c3437056SNickeau $event->data['meta'], 62*c3437056SNickeau "property", 63*c3437056SNickeau [ 64*c3437056SNickeau "property" => self::FACEBOOK_DESCRIPTION_PROPERTY, 65*c3437056SNickeau "content" => $description 66*c3437056SNickeau ] 67*c3437056SNickeau ); 68*c3437056SNickeau 69007225e5Sgerardnico 70007225e5Sgerardnico 71007225e5Sgerardnico } 72007225e5Sgerardnico 73007225e5Sgerardnico /** 74007225e5Sgerardnico * Just send a test info 75007225e5Sgerardnico * @param $ID 76007225e5Sgerardnico */ 77007225e5Sgerardnico public function sendDestInfo($ID) 78007225e5Sgerardnico { 79007225e5Sgerardnico if (defined('DOKU_UNITTEST')) { 80007225e5Sgerardnico // When you make a admin test call, the page ID = start and there is no meta 81007225e5Sgerardnico // When there is only an icon, there is also no meta 82007225e5Sgerardnico global $INPUT; 83007225e5Sgerardnico $showActions = ["show", ""]; // Empty for the test 84007225e5Sgerardnico if (in_array($INPUT->str("do"), $showActions)) { 85007225e5Sgerardnico LogUtility::msg("Page ($ID): The description should never be null when rendering the page", LogUtility::LVL_MSG_INFO); 86007225e5Sgerardnico } 87007225e5Sgerardnico } 88007225e5Sgerardnico } 89007225e5Sgerardnico 90007225e5Sgerardnico 91007225e5Sgerardnico} 92