1*007225e5Sgerardnico<?php 2*007225e5Sgerardnico 3*007225e5Sgerardnicouse ComboStrap\LogUtility; 4*007225e5Sgerardnico 5*007225e5Sgerardnico 6*007225e5Sgerardnico 7*007225e5Sgerardnico/** 8*007225e5Sgerardnico * Take the metadata description 9*007225e5Sgerardnico * 10*007225e5Sgerardnico */ 11*007225e5Sgerardnico 12*007225e5Sgerardnico 13*007225e5Sgerardnicoclass action_plugin_combo_metadescription extends DokuWiki_Action_Plugin 14*007225e5Sgerardnico{ 15*007225e5Sgerardnico 16*007225e5Sgerardnico const DESCRIPTION_META_KEY = 'description'; 17*007225e5Sgerardnico const DESCRIPTION_PROPERTY = 'og:description'; 18*007225e5Sgerardnico 19*007225e5Sgerardnico public function register(Doku_Event_Handler $controller) 20*007225e5Sgerardnico { 21*007225e5Sgerardnico $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'description_modification', array()); 22*007225e5Sgerardnico } 23*007225e5Sgerardnico 24*007225e5Sgerardnico /** 25*007225e5Sgerardnico * Add a meta-data description 26*007225e5Sgerardnico */ 27*007225e5Sgerardnico function description_modification(&$event, $param) 28*007225e5Sgerardnico { 29*007225e5Sgerardnico 30*007225e5Sgerardnico // if (empty($event->data) || empty($event->data['meta'])) return; 31*007225e5Sgerardnico 32*007225e5Sgerardnico global $ID; 33*007225e5Sgerardnico 34*007225e5Sgerardnico /** 35*007225e5Sgerardnico * Description 36*007225e5Sgerardnico * https://www.dokuwiki.org/devel:metadata 37*007225e5Sgerardnico */ 38*007225e5Sgerardnico if (defined('DOKU_UNITTEST')) { 39*007225e5Sgerardnico if ($ID == null || $ID == "") { 40*007225e5Sgerardnico return; // Admin call for instance in test 41*007225e5Sgerardnico } 42*007225e5Sgerardnico $dokuWikiDescription = p_get_metadata($ID, self::DESCRIPTION_META_KEY); 43*007225e5Sgerardnico } else { 44*007225e5Sgerardnico $render = METADATA_RENDER_USING_CACHE; 45*007225e5Sgerardnico $dokuWikiDescription = p_get_metadata($ID, self::DESCRIPTION_META_KEY, $render); 46*007225e5Sgerardnico } 47*007225e5Sgerardnico 48*007225e5Sgerardnico if (empty($dokuWikiDescription) || $dokuWikiDescription == "") { 49*007225e5Sgerardnico $this->sendDestInfo($ID); 50*007225e5Sgerardnico return; 51*007225e5Sgerardnico } 52*007225e5Sgerardnico 53*007225e5Sgerardnico // Get the abstract and suppress the carriage return 54*007225e5Sgerardnico $description = str_replace("\n", " ", $dokuWikiDescription['abstract']); 55*007225e5Sgerardnico if (empty($description)) { 56*007225e5Sgerardnico $this->sendDestInfo($ID); 57*007225e5Sgerardnico return; 58*007225e5Sgerardnico } 59*007225e5Sgerardnico 60*007225e5Sgerardnico // Suppress the title 61*007225e5Sgerardnico $title = p_get_metadata($ID, 'title'); 62*007225e5Sgerardnico $description = str_replace($title, "", $description); 63*007225e5Sgerardnico // Suppress the star, the tab, About 64*007225e5Sgerardnico $description = preg_replace('/(\*|\t|About)/im', "", $description); 65*007225e5Sgerardnico // Suppress all double space and trim 66*007225e5Sgerardnico $description = trim(preg_replace('/ /m', " ", $description)); 67*007225e5Sgerardnico 68*007225e5Sgerardnico // Add it to the meta 69*007225e5Sgerardnico $event->data['meta'][] = array("name" => self::DESCRIPTION_META_KEY, "content" => $description); 70*007225e5Sgerardnico $event->data['meta'][] = array("property" => self::DESCRIPTION_PROPERTY, "content" => $description); 71*007225e5Sgerardnico 72*007225e5Sgerardnico 73*007225e5Sgerardnico } 74*007225e5Sgerardnico 75*007225e5Sgerardnico /** 76*007225e5Sgerardnico * Just send a test info 77*007225e5Sgerardnico * @param $ID 78*007225e5Sgerardnico */ 79*007225e5Sgerardnico public function sendDestInfo($ID) 80*007225e5Sgerardnico { 81*007225e5Sgerardnico if (defined('DOKU_UNITTEST')) { 82*007225e5Sgerardnico // When you make a admin test call, the page ID = start and there is no meta 83*007225e5Sgerardnico // When there is only an icon, there is also no meta 84*007225e5Sgerardnico global $INPUT; 85*007225e5Sgerardnico $showActions = ["show", ""]; // Empty for the test 86*007225e5Sgerardnico if (in_array($INPUT->str("do"), $showActions)) { 87*007225e5Sgerardnico LogUtility::msg("Page ($ID): The description should never be null when rendering the page", LogUtility::LVL_MSG_INFO); 88*007225e5Sgerardnico } 89*007225e5Sgerardnico } 90*007225e5Sgerardnico } 91*007225e5Sgerardnico 92*007225e5Sgerardnico 93*007225e5Sgerardnico} 94