xref: /plugin/description/action.php (revision ab9621a8fb1013390a63f541aa535baaaab10a16)
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 *
11*ab9621a8SMark Prins * @phpcs:disable Squiz.Classes.ValidClassName.NotCamelCaps
12*ab9621a8SMark 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     */
33*ab9621a8SMark 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
45*ab9621a8SMark Prins        $metaContent = '';
46*ab9621a8SMark Prins        switch ($source) {
47*ab9621a8SMark 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                }
56*ab9621a8SMark Prins                $metaContent = str_replace("\n", " ", $d['abstract']);
57*ab9621a8SMark Prins                if (empty($metaContent)) {
58e689d293SMark Prins                    return;
59e689d293SMark Prins                }
60*ab9621a8SMark Prins                break;
61*ab9621a8SMark Prins            case KEYWORD_SOURCE_GLOBAL:
62*ab9621a8SMark Prins                $metaContent = $this->getConf('global_description');
63*ab9621a8SMark Prins                if (empty($metaContent)) {
64e689d293SMark Prins                    return;
65e689d293SMark Prins                }
66*ab9621a8SMark Prins                break;
67*ab9621a8SMark 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*ab9621a8SMark Prins                $metaContent = $metadata['plugin_description']['keywords'];
74*ab9621a8SMark Prins                if (empty($metaContent)) {
75e689d293SMark Prins                    return;
76e689d293SMark Prins                }
77*ab9621a8SMark Prins                break;
78*ab9621a8SMark Prins
79e874628fSMatthias Schulte        }
805bbfd4a0SIkuo Obataya
81*ab9621a8SMark Prins        $event->data['meta'][] = ["name" => "description", "content" => $metaContent];
825bbfd4a0SIkuo Obataya    }
835bbfd4a0SIkuo Obataya}
84