xref: /plugin/description/action.php (revision 09eadb0e29ebc967a2c5419f38284ed710a0110f)
15bbfd4a0SIkuo Obataya<?php
2d409808bSgithub-actions[bot]
3e689d293SMark Prins/**
4e689d293SMark Prins *  Description action plugin.
5e689d293SMark Prins *
6e689d293SMark Prins * @license      GPL 2 (http://www.gnu.org/licenses/gpl.html)
7e689d293SMark Prins * @author       Ikuo Obataya <I.Obataya@gmail.com>
8e689d293SMark Prins * @author       Matthias Schulte <dokuwiki@lupo49.de>.
9e689d293SMark Prins * @author       Mark C. Prins <mprins@users.sf.net>
10e689d293SMark Prins *
11ab9621a8SMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
12ab9621a8SMark Prins * @noinspection AutoloadingIssuesInspection
13e689d293SMark Prins */
14e874628fSMatthias Schulte
15e689d293SMark Prinsuse dokuwiki\Extension\ActionPlugin;
16e689d293SMark Prinsuse dokuwiki\Extension\Event;
17e689d293SMark Prinsuse dokuwiki\Extension\EventHandler;
185bbfd4a0SIkuo Obataya
19e689d293SMark Prinsconst KEYWORD_SOURCE_ABSTRACT = 'abstract';
20e689d293SMark Prinsconst KEYWORD_SOURCE_GLOBAL = 'global';
21e689d293SMark Prinsconst KEYWORD_SOURCE_SYNTAX = 'syntax';
22e874628fSMatthias Schulte
23e689d293SMark Prinsclass action_plugin_description extends ActionPlugin
24e689d293SMark Prins{
25e689d293SMark Prins    final public function register(EventHandler $controller): void
26e689d293SMark Prins    {
27d409808bSgithub-actions[bot]        $controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'description', []);
285bbfd4a0SIkuo Obataya    }
29e874628fSMatthias Schulte
305bbfd4a0SIkuo Obataya    /**
31b78c60d0Slupo49     * Add an abstract, global value or a specified string to meta header
325bbfd4a0SIkuo Obataya     */
33ab9621a8SMark Prins    final public function description(Event $event): void
34e689d293SMark Prins    {
35e689d293SMark Prins        if (empty($event->data) || empty($event->data['meta'])) {
36e689d293SMark Prins            return;
37e689d293SMark Prins        }
385bbfd4a0SIkuo Obataya
395bbfd4a0SIkuo Obataya        global $ID;
40e874628fSMatthias Schulte        $source = $this->getConf('keyword_source');
41e689d293SMark Prins        if (empty($source)) {
42e689d293SMark Prins            $source = 'abstract';
43e689d293SMark Prins        }
44e874628fSMatthias Schulte
45ab9621a8SMark Prins        $metaContent = '';
46ab9621a8SMark Prins        switch ($source) {
47ab9621a8SMark Prins            case KEYWORD_SOURCE_ABSTRACT:
48cca55c74SMark Prins                if (auth_quickaclcheck($ID) < AUTH_READ) {
49cca55c74SMark Prins                    // don't add meta header when user has no read permissions
50cca55c74SMark Prins                    return;
51cca55c74SMark Prins                }
525bbfd4a0SIkuo Obataya                $d = p_get_metadata($ID, 'description');
53e689d293SMark Prins                if (empty($d)) {
54e689d293SMark Prins                    return;
55e689d293SMark Prins                }
56ab9621a8SMark Prins                $metaContent = str_replace("\n", " ", $d['abstract']);
57ab9621a8SMark Prins                if (empty($metaContent)) {
58e689d293SMark Prins                    return;
59e689d293SMark Prins                }
60ab9621a8SMark Prins                break;
61ab9621a8SMark Prins            case KEYWORD_SOURCE_GLOBAL:
62ab9621a8SMark Prins                $metaContent = $this->getConf('global_description');
63ab9621a8SMark Prins                if (empty($metaContent)) {
64e689d293SMark Prins                    return;
65e689d293SMark Prins                }
66ab9621a8SMark Prins                break;
67ab9621a8SMark Prins            case KEYWORD_SOURCE_SYNTAX:
68cca55c74SMark Prins                if (auth_quickaclcheck($ID) < AUTH_READ) {
69cca55c74SMark Prins                    // don't add meta header when user has no read permissions
70cca55c74SMark Prins                    return;
71cca55c74SMark Prins                }
72e874628fSMatthias Schulte                $metadata = p_get_metadata($ID);
73*09eadb0eSCopilot
74*09eadb0eSCopilot                // Normalize to an array
75*09eadb0eSCopilot                if (!is_array($metadata)) {
76*09eadb0eSCopilot                    $metadata = [];
77*09eadb0eSCopilot                }
78*09eadb0eSCopilot
79*09eadb0eSCopilot                // Safely read keywords if the structure is present and an array
80*09eadb0eSCopilot                if (isset($metadata['plugin_description']) && is_array($metadata['plugin_description'])) {
81*09eadb0eSCopilot                    $metaContent = $metadata['plugin_description']['keywords'] ?? '';
82*09eadb0eSCopilot                }
83*09eadb0eSCopilot
84ab9621a8SMark Prins                if (empty($metaContent)) {
85e689d293SMark Prins                    return;
86e689d293SMark Prins                }
87ab9621a8SMark Prins                break;
88e874628fSMatthias Schulte        }
895bbfd4a0SIkuo Obataya
90ab9621a8SMark Prins        $event->data['meta'][] = ["name" => "description", "content" => $metaContent];
915bbfd4a0SIkuo Obataya    }
925bbfd4a0SIkuo Obataya}
93