15f891b7eSNickeau<?php 25f891b7eSNickeau 3*04fd306cSNickeauuse ComboStrap\ExceptionNotFound; 4*04fd306cSNickeauuse ComboStrap\ExecutionContext; 5*04fd306cSNickeauuse ComboStrap\FileSystems; 6c3437056SNickeauuse ComboStrap\LdJson; 7*04fd306cSNickeauuse ComboStrap\LogUtility; 8*04fd306cSNickeauuse ComboStrap\MarkupPath; 94cadd4f8SNickeauuse ComboStrap\PluginUtility; 105f891b7eSNickeau 115f891b7eSNickeau 12c3437056SNickeaurequire_once(__DIR__ . '/../ComboStrap/PluginUtility.php'); 135f891b7eSNickeau 14c3437056SNickeau 155f891b7eSNickeauclass action_plugin_combo_metagoogle extends DokuWiki_Action_Plugin 165f891b7eSNickeau{ 175f891b7eSNickeau 185f891b7eSNickeau 195f891b7eSNickeau const CANONICAL = "google"; 205f891b7eSNickeau const PUBLISHER = "publisher"; 215f891b7eSNickeau 225f891b7eSNickeau function __construct() 235f891b7eSNickeau { 245f891b7eSNickeau // enable direct access to language strings 255f891b7eSNickeau // ie $this->lang 265f891b7eSNickeau $this->setupLocale(); 275f891b7eSNickeau } 285f891b7eSNickeau 295f891b7eSNickeau public function register(Doku_Event_Handler $controller) 305f891b7eSNickeau { 315f891b7eSNickeau $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'metaGoogleProcessing', array()); 325f891b7eSNickeau } 335f891b7eSNickeau 345f891b7eSNickeau /** 355f891b7eSNickeau * 365f891b7eSNickeau * @param $event 375f891b7eSNickeau */ 385f891b7eSNickeau function metaGoogleProcessing($event) 395f891b7eSNickeau { 405f891b7eSNickeau 415f891b7eSNickeau 42*04fd306cSNickeau try { 43*04fd306cSNickeau $templateForWebPage = ExecutionContext::getActualOrCreateFromEnv()->getExecutingPageTemplate(); 44*04fd306cSNickeau } catch (ExceptionNotFound $e) { 45dd39a644Sgerardnico return; 46dd39a644Sgerardnico } 4721913ab3SNickeau 48*04fd306cSNickeau if (!$templateForWebPage->isSocial()) { 49*04fd306cSNickeau return; 50*04fd306cSNickeau } 51*04fd306cSNickeau 52*04fd306cSNickeau 53*04fd306cSNickeau try { 54*04fd306cSNickeau $requestedPath = $templateForWebPage->getRequestedContextPath(); 55*04fd306cSNickeau } catch (ExceptionNotFound $e) { 56*04fd306cSNickeau LogUtility::internalError("Because the template is social, it should be at minima a path request"); 57*04fd306cSNickeau return; 58*04fd306cSNickeau } 59*04fd306cSNickeau 60*04fd306cSNickeau 61*04fd306cSNickeau $page = MarkupPath::createPageFromPathObject($requestedPath); 62c3437056SNickeau $ldJson = LdJson::createForPage($page) 63c3437056SNickeau ->getLdJsonMergedWithDefault(); 645f891b7eSNickeau 655f891b7eSNickeau /** 665f891b7eSNickeau * Publish 675f891b7eSNickeau */ 685f891b7eSNickeau if (!empty($ldJson)) { 695f891b7eSNickeau $event->data["script"][] = array( 705f891b7eSNickeau "type" => "application/ld+json", 71c3437056SNickeau "_data" => $ldJson, 725f891b7eSNickeau ); 735f891b7eSNickeau } 745f891b7eSNickeau } 755f891b7eSNickeau 765f891b7eSNickeau 775f891b7eSNickeau} 78