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