xref: /plugin/discussion/syntax/comments.php (revision 64829c37106252c090bb45ac0286a7d85bfc0e99)
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 */
16f0fda08aSwikidesignclass syntax_plugin_discussion_comments extends DokuWiki_Syntax_Plugin {
17f0fda08aSwikidesign
18e7ac9adaSGerrit Uitslag    /**
19e7ac9adaSGerrit Uitslag     * Syntax Type
20e7ac9adaSGerrit Uitslag     *
21e7ac9adaSGerrit Uitslag     * @return string
22e7ac9adaSGerrit Uitslag     */
23*64829c37SGerrit Uitslag    public function getType() { return 'substition'; }
24e7ac9adaSGerrit Uitslag
25e7ac9adaSGerrit Uitslag    /**
26e7ac9adaSGerrit Uitslag     * Paragraph Type
27e7ac9adaSGerrit Uitslag     *
28e7ac9adaSGerrit Uitslag     * @return string
29e7ac9adaSGerrit Uitslag     */
30*64829c37SGerrit Uitslag    public function getPType() { return 'block'; }
31e7ac9adaSGerrit Uitslag
32e7ac9adaSGerrit Uitslag    /**
33e7ac9adaSGerrit Uitslag     * Sort for applying this mode
34e7ac9adaSGerrit Uitslag     *
35e7ac9adaSGerrit Uitslag     * @return int
36e7ac9adaSGerrit Uitslag     */
37*64829c37SGerrit Uitslag    public function getSort() { return 230; }
38f0fda08aSwikidesign
39f0fda08aSwikidesign    /**
40f0fda08aSwikidesign     * Connect pattern to lexer
41f0fda08aSwikidesign     */
42*64829c37SGerrit Uitslag    public function connectTo($mode) {
43f0fda08aSwikidesign        if ($mode == 'base') {
44e6a89be2Swikidesign            $this->Lexer->addSpecialPattern('~~DISCUSSION[^\r\n]*?~~', $mode, 'plugin_discussion_comments');
45f0fda08aSwikidesign        }
46f0fda08aSwikidesign    }
47f0fda08aSwikidesign
48f0fda08aSwikidesign    /**
49e7ac9adaSGerrit Uitslag     * Handler to prepare matched data for the rendering process
50e7ac9adaSGerrit Uitslag     *
51e7ac9adaSGerrit Uitslag     * @param   string       $match   The text matched by the patterns
52e7ac9adaSGerrit Uitslag     * @param   int          $state   The lexer state for the match
53e7ac9adaSGerrit Uitslag     * @param   int          $pos     The character position of the matched text
54e7ac9adaSGerrit Uitslag     * @param   Doku_Handler $handler The Doku_Handler object
55e7ac9adaSGerrit Uitslag     * @return  array Return an array with all data you want to use in render
56f0fda08aSwikidesign     */
57*64829c37SGerrit Uitslag    public function handle($match, $state, $pos, Doku_Handler $handler) {
5807c376bbSwikidesign        // strip markup
59e6a89be2Swikidesign        $match = substr($match, 12, -2);
6007c376bbSwikidesign
6107c376bbSwikidesign        // split title (if there is one)
62*64829c37SGerrit Uitslag        list($match, $title) = array_pad(explode('|', $match, 2), 2, '');
63f0fda08aSwikidesign
64f0fda08aSwikidesign        // assign discussion state
65*64829c37SGerrit Uitslag        if ($match == ':off') {
66*64829c37SGerrit Uitslag            $status = 0;
67*64829c37SGerrit Uitslag        } elseif ($match == ':closed') {
68*64829c37SGerrit Uitslag            $status = 2;
69*64829c37SGerrit Uitslag        } else {
70*64829c37SGerrit Uitslag            // comments enabled
71*64829c37SGerrit Uitslag            $status = 1;
72*64829c37SGerrit Uitslag        }
73f0fda08aSwikidesign
74*64829c37SGerrit Uitslag        return [$status, $title];
751eedfbceSMichael Hamann    }
76f0fda08aSwikidesign
77e7ac9adaSGerrit Uitslag    /**
78e7ac9adaSGerrit Uitslag     * Handles the actual output creation.
79e7ac9adaSGerrit Uitslag     *
80*64829c37SGerrit Uitslag     * @param string $format output format being rendered
81*64829c37SGerrit Uitslag     * @param Doku_Renderer $renderer the current renderer object
82*64829c37SGerrit Uitslag     * @param array $data data created by handler()
83e7ac9adaSGerrit Uitslag     * @return boolean rendered correctly?
84e7ac9adaSGerrit Uitslag     */
85*64829c37SGerrit Uitslag    public function render($format, Doku_Renderer $renderer, $data) {
86c1530f74SMichael Hamann        list($status, $title) = $data;
87*64829c37SGerrit Uitslag        if ($format == 'metadata') {
88*64829c37SGerrit Uitslag            /** @var Doku_Renderer_metadata $renderer */
89*64829c37SGerrit Uitslag            $renderer->meta['plugin_discussion'] = ['status' => $status, 'title' => $title];
90f0fda08aSwikidesign        }
91c1530f74SMichael Hamann        return true;
92f0fda08aSwikidesign    }
93f0fda08aSwikidesign}
94