1<?php
2
3/**
4 * DokuWiki Plugin doxycode (Taglist Syntax Component)
5 *
6 * @license     GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7 * @author      Lukas Probsthain <lukas.probsthain@gmail.com>
8 */
9
10use dokuwiki\Extension\SyntaxPlugin;
11
12/**
13 * Class syntax_plugin_doxycode_taglist
14 *
15 * This syntax plugin renders a table with all available tag files.
16 * It can be used to inform users which tag files can be used by which names in the snippet syntax.
17 */
18class syntax_plugin_doxycode_taglist extends SyntaxPlugin
19{
20    public function getType()
21    {
22        return 'substition';
23    }
24
25    public function getSort()
26    {
27        // TODO: which sort number?
28        return 159;
29    }
30
31    public function connectTo($mode)
32    {
33        $this->Lexer->addSpecialPattern('<listtagfiles.*?/>', $mode, 'plugin_doxycode_taglist');
34    }
35
36    public function handle($match, $state, $pos, Doku_Handler $handler)
37    {
38        static $args;
39        switch ($state) {
40            case DOKU_LEXER_SPECIAL:
41                // TODO: do we expect parameters here?
42                // add columns like reload period, file state?
43                // TODO: implement option for only displaying enabled configurations!
44
45                // Parse the attributes and content here
46                // $args = $this->_parseAttributes($match);
47                return [$state, ];
48        }
49        return [];
50    }
51
52    /**
53     *
54     */
55    public function render($mode, Doku_Renderer $renderer, $data)
56    {
57        if ($mode != 'xhtml') return;
58
59
60        /** @var helper_plugin_doxycode_tagmanager $tagmanager */
61        $tagmanager = plugin_load('helper', 'doxycode_tagmanager');
62
63        $config = $tagmanager->loadTagFileConfig();
64
65        $renderer->doc .= '<div class="table">';
66        $renderer->doc .= '<table class="inline">';
67
68        $renderer->doc .= '<thead>';
69        $renderer->doc .= '<tr>';
70        $renderer->doc .= '<th>' . $this->getLang('tag_conf_enabled') . '</th>';
71        $renderer->doc .= '<th>' . $this->getLang('tag_conf_local_name') . '</th>';
72        $renderer->doc .= '<th>' . $this->getLang('tag_conf_docu_url') . '</th>';
73        $renderer->doc .= '<th>' . $this->getLang('tag_conf_remote_url') . '</th>';
74        $renderer->doc .= '</tr>';
75        $renderer->doc .= '</thead>';
76
77        $renderer->doc .= '<tbody>';
78        foreach ($config as $key => $conf) {
79            $renderer->doc .= '<tr>';
80            // TODO: display enabled state as locked checkbox
81            $renderer->doc .= '<td>' . $conf['enabled'] . '</td>';
82            $renderer->doc .= '<td>' . $key . '</td>';
83            $renderer->doc .= '<td><a href="' . $conf['docu_url'] . '">' . $conf['docu_url'] . '</a></td>';
84            $renderer->doc .= '<td><a href="' . $conf['remote_url'] . '">' . $conf['remote_url'] . '</a></td>';
85            // TODO: should we enable more information? last updated, reason for disabled state, ...?
86            $renderer->doc .= '</tr>';
87        }
88        $renderer->doc .= '</tbody>';
89
90        $renderer->doc .= '</table>';
91        $renderer->doc .= '</div>';
92    }
93}
94