xref: /plugin/discussion/syntax/comments.php (revision dfc5d08b5eea7cef6dcb63789032dcac586bcb87)
1f0fda08aSwikidesign<?php
2f0fda08aSwikidesign/**
3f0fda08aSwikidesign * Discussion Plugin
4f0fda08aSwikidesign *
5f0fda08aSwikidesign * Enables/disables discussion features based on config settings.
6f0fda08aSwikidesign *
7f0fda08aSwikidesign * @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
8f0fda08aSwikidesign * @author  Esther Brunner <wikidesign@gmail.com>
9f0fda08aSwikidesign * @author  Dave Lawson <dlawson@masterytech.com>
10f0fda08aSwikidesign */
11f0fda08aSwikidesign
12f0fda08aSwikidesign/**
13f0fda08aSwikidesign * All DokuWiki plugins to extend the parser/rendering mechanism
14f0fda08aSwikidesign * need to inherit from this class
15f0fda08aSwikidesign */
16*dfc5d08bSGerrit Uitslagclass syntax_plugin_discussion_comments extends DokuWiki_Syntax_Plugin
17*dfc5d08bSGerrit Uitslag{
18f0fda08aSwikidesign
19e7ac9adaSGerrit Uitslag    /**
20e7ac9adaSGerrit Uitslag     * Syntax Type
21e7ac9adaSGerrit Uitslag     *
22e7ac9adaSGerrit Uitslag     * @return string
23e7ac9adaSGerrit Uitslag     */
24*dfc5d08bSGerrit Uitslag    public function getType()
25*dfc5d08bSGerrit Uitslag    {
26*dfc5d08bSGerrit Uitslag        return 'substition';
27*dfc5d08bSGerrit Uitslag    }
28e7ac9adaSGerrit Uitslag
29e7ac9adaSGerrit Uitslag    /**
30e7ac9adaSGerrit Uitslag     * Paragraph Type
31e7ac9adaSGerrit Uitslag     *
32e7ac9adaSGerrit Uitslag     * @return string
33e7ac9adaSGerrit Uitslag     */
34*dfc5d08bSGerrit Uitslag    public function getPType()
35*dfc5d08bSGerrit Uitslag    {
36*dfc5d08bSGerrit Uitslag        return 'block';
37*dfc5d08bSGerrit Uitslag    }
38e7ac9adaSGerrit Uitslag
39e7ac9adaSGerrit Uitslag    /**
40e7ac9adaSGerrit Uitslag     * Sort for applying this mode
41e7ac9adaSGerrit Uitslag     *
42e7ac9adaSGerrit Uitslag     * @return int
43e7ac9adaSGerrit Uitslag     */
44*dfc5d08bSGerrit Uitslag    public function getSort()
45*dfc5d08bSGerrit Uitslag    {
46*dfc5d08bSGerrit Uitslag        return 230;
47*dfc5d08bSGerrit Uitslag    }
48f0fda08aSwikidesign
49f0fda08aSwikidesign    /**
50f0fda08aSwikidesign     * Connect pattern to lexer
51f0fda08aSwikidesign     */
52*dfc5d08bSGerrit Uitslag    public function connectTo($mode)
53*dfc5d08bSGerrit Uitslag    {
54f0fda08aSwikidesign        if ($mode == 'base') {
55e6a89be2Swikidesign            $this->Lexer->addSpecialPattern('~~DISCUSSION[^\r\n]*?~~', $mode, 'plugin_discussion_comments');
56f0fda08aSwikidesign        }
57f0fda08aSwikidesign    }
58f0fda08aSwikidesign
59f0fda08aSwikidesign    /**
60e7ac9adaSGerrit Uitslag     * Handler to prepare matched data for the rendering process
61e7ac9adaSGerrit Uitslag     *
62e7ac9adaSGerrit Uitslag     * @param string $match The text matched by the patterns
63e7ac9adaSGerrit Uitslag     * @param int $state The lexer state for the match
64e7ac9adaSGerrit Uitslag     * @param int $pos The character position of the matched text
65e7ac9adaSGerrit Uitslag     * @param Doku_Handler $handler The Doku_Handler object
66e7ac9adaSGerrit Uitslag     * @return  array Return an array with all data you want to use in render
67f0fda08aSwikidesign     */
68*dfc5d08bSGerrit Uitslag    public function handle($match, $state, $pos, Doku_Handler $handler)
69*dfc5d08bSGerrit Uitslag    {
7007c376bbSwikidesign        // strip markup
71e6a89be2Swikidesign        $match = substr($match, 12, -2);
7207c376bbSwikidesign
7307c376bbSwikidesign        // split title (if there is one)
7464829c37SGerrit Uitslag        list($match, $title) = array_pad(explode('|', $match, 2), 2, '');
75f0fda08aSwikidesign
76f0fda08aSwikidesign        // assign discussion state
7764829c37SGerrit Uitslag        if ($match == ':off') {
7864829c37SGerrit Uitslag            $status = 0;
7964829c37SGerrit Uitslag        } elseif ($match == ':closed') {
8064829c37SGerrit Uitslag            $status = 2;
8164829c37SGerrit Uitslag        } else {
8264829c37SGerrit Uitslag            // comments enabled
8364829c37SGerrit Uitslag            $status = 1;
8464829c37SGerrit Uitslag        }
85f0fda08aSwikidesign
8664829c37SGerrit Uitslag        return [$status, $title];
871eedfbceSMichael Hamann    }
88f0fda08aSwikidesign
89e7ac9adaSGerrit Uitslag    /**
90e7ac9adaSGerrit Uitslag     * Handles the actual output creation.
91e7ac9adaSGerrit Uitslag     *
9264829c37SGerrit Uitslag     * @param string $format output format being rendered
9364829c37SGerrit Uitslag     * @param Doku_Renderer $renderer the current renderer object
9464829c37SGerrit Uitslag     * @param array $data data created by handler()
95e7ac9adaSGerrit Uitslag     * @return boolean rendered correctly?
96e7ac9adaSGerrit Uitslag     */
97*dfc5d08bSGerrit Uitslag    public function render($format, Doku_Renderer $renderer, $data)
98*dfc5d08bSGerrit Uitslag    {
99c1530f74SMichael Hamann        list($status, $title) = $data;
10064829c37SGerrit Uitslag        if ($format == 'metadata') {
10164829c37SGerrit Uitslag            /** @var Doku_Renderer_metadata $renderer */
10264829c37SGerrit Uitslag            $renderer->meta['plugin_discussion'] = ['status' => $status, 'title' => $title];
103f0fda08aSwikidesign        }
104c1530f74SMichael Hamann        return true;
105f0fda08aSwikidesign    }
106f0fda08aSwikidesign}
107