xref: /template/strap/action/metadescription.php (revision c3437056399326d621a01da73b649707fbb0ae69)
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