xref: /plugin/combo/action/metagoogle.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
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