xref: /plugin/struct/syntax/list.php (revision 1ee0a2dc290e607b00cb9d6d919f4f60a00fcd2d)
1<?php
2
3/**
4 * DokuWiki Plugin struct (Syntax Component)
5 *
6 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7 * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
8 */
9
10use dokuwiki\plugin\struct\meta\AggregationList;
11use dokuwiki\plugin\struct\meta\ConfigParser;
12use dokuwiki\plugin\struct\meta\SearchConfig;
13use dokuwiki\plugin\struct\meta\StructException;
14
15class syntax_plugin_struct_list extends syntax_plugin_struct_table
16{
17    /** @inheritdoc */
18    protected $tableclass = AggregationList::class;
19
20    /** @inheritdoc */
21    protected $illegalOptions = ['dynfilters', 'summarize', 'rownumbers', 'widths', 'summary'];
22
23    /**
24     * Connect lookup pattern to lexer.
25     *
26     * @param string $mode Parser mode
27     */
28    public function connectTo($mode)
29    {
30        $this->Lexer->addSpecialPattern('----+ *struct list *-+\n.*?\n----+', $mode, 'plugin_struct_list');
31    }
32
33    /**
34     * Render xhtml output or metadata
35     *
36     * @param string $mode Renderer mode (supported modes: xhtml)
37     * @param Doku_Renderer $renderer The renderer
38     * @param array $data The data from the handler() function
39     * @return bool If rendering was successful.
40     */
41    public function Xrender($mode, Doku_Renderer $renderer, $data)
42    {
43        if ($mode != 'xhtml') return false;
44        if (!$data) return false;
45        global $INFO;
46        global $conf;
47
48        try {
49            $search = new SearchConfig($data);
50
51            /** @var AggregationList $list */
52            $list = new $this->tableclass($INFO['id'], $mode, $renderer, $search);
53            $list->render();
54
55            if ($mode == 'metadata') {
56                /** @var Doku_Renderer_metadata $renderer */
57                $renderer->meta['plugin']['struct']['hasaggregation'] = $search->getCacheFlag();
58            }
59        } catch (StructException $e) {
60            msg($e->getMessage(), -1, $e->getLine(), $e->getFile());
61            if ($conf['allowdebug']) msg('<pre>' . hsc($e->getTraceAsString()) . '</pre>', -1);
62        }
63
64        return true;
65    }
66}
67