xref: /plugin/struct/syntax/list.php (revision d90aa848684950ae06490f12279278db183f4fa5)
1549a0837SAndreas Gohr<?php
2d6d97f60SAnna Dabrowska
3549a0837SAndreas Gohr/**
4549a0837SAndreas Gohr * DokuWiki Plugin struct (Syntax Component)
5549a0837SAndreas Gohr *
6549a0837SAndreas Gohr * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7549a0837SAndreas Gohr * @author  Andreas Gohr, Michael Große <dokuwiki@cosmocode.de>
8549a0837SAndreas Gohr */
9549a0837SAndreas Gohr
10ea5ad12aSMichael Grosseuse dokuwiki\plugin\struct\meta\AggregationList;
11ea5ad12aSMichael Grosseuse dokuwiki\plugin\struct\meta\ConfigParser;
12ea5ad12aSMichael Grosseuse dokuwiki\plugin\struct\meta\SearchConfig;
13ea5ad12aSMichael Grosseuse dokuwiki\plugin\struct\meta\StructException;
14ea5ad12aSMichael Grosse
15*d90aa848SAndreas Gohrclass syntax_plugin_struct_list extends syntax_plugin_struct_table
16d6d97f60SAnna Dabrowska{
17*d90aa848SAndreas Gohr    /** @inheritdoc */
18ea5ad12aSMichael Grosse    protected $tableclass = AggregationList::class;
19ea5ad12aSMichael Grosse
20*d90aa848SAndreas Gohr    /** @inheritdoc */
21*d90aa848SAndreas Gohr    protected $illegalOptions = ['dynfilters', 'summarize', 'rownumbers', 'widths', 'summary'];
22549a0837SAndreas Gohr
23549a0837SAndreas Gohr    /**
24549a0837SAndreas Gohr     * Connect lookup pattern to lexer.
25549a0837SAndreas Gohr     *
26549a0837SAndreas Gohr     * @param string $mode Parser mode
27549a0837SAndreas Gohr     */
28d6d97f60SAnna Dabrowska    public function connectTo($mode)
29d6d97f60SAnna Dabrowska    {
30ea5ad12aSMichael Grosse        $this->Lexer->addSpecialPattern('----+ *struct list *-+\n.*?\n----+', $mode, 'plugin_struct_list');
31549a0837SAndreas Gohr    }
32549a0837SAndreas Gohr
33549a0837SAndreas Gohr    /**
34549a0837SAndreas Gohr     * Render xhtml output or metadata
35549a0837SAndreas Gohr     *
36549a0837SAndreas Gohr     * @param string $mode Renderer mode (supported modes: xhtml)
37549a0837SAndreas Gohr     * @param Doku_Renderer $renderer The renderer
38549a0837SAndreas Gohr     * @param array $data The data from the handler() function
39549a0837SAndreas Gohr     * @return bool If rendering was successful.
40549a0837SAndreas Gohr     */
41*d90aa848SAndreas Gohr    public function Xrender($mode, Doku_Renderer $renderer, $data)
42d6d97f60SAnna Dabrowska    {
43549a0837SAndreas Gohr        if ($mode != 'xhtml') return false;
44ea5ad12aSMichael Grosse        if (!$data) return false;
45ea5ad12aSMichael Grosse        global $INFO;
46ea5ad12aSMichael Grosse        global $conf;
47ea5ad12aSMichael Grosse
48ea5ad12aSMichael Grosse        try {
49ea5ad12aSMichael Grosse            $search = new SearchConfig($data);
50ea5ad12aSMichael Grosse
51ea5ad12aSMichael Grosse            /** @var AggregationList $list */
52ea5ad12aSMichael Grosse            $list = new $this->tableclass($INFO['id'], $mode, $renderer, $search);
53ea5ad12aSMichael Grosse            $list->render();
54ea5ad12aSMichael Grosse
55ea5ad12aSMichael Grosse            if ($mode == 'metadata') {
56ea5ad12aSMichael Grosse                /** @var Doku_Renderer_metadata $renderer */
57ea5ad12aSMichael Grosse                $renderer->meta['plugin']['struct']['hasaggregation'] = $search->getCacheFlag();
58ea5ad12aSMichael Grosse            }
59ea5ad12aSMichael Grosse        } catch (StructException $e) {
60ea5ad12aSMichael Grosse            msg($e->getMessage(), -1, $e->getLine(), $e->getFile());
61ea5ad12aSMichael Grosse            if ($conf['allowdebug']) msg('<pre>' . hsc($e->getTraceAsString()) . '</pre>', -1);
62ea5ad12aSMichael Grosse        }
63549a0837SAndreas Gohr
64549a0837SAndreas Gohr        return true;
65549a0837SAndreas Gohr    }
66549a0837SAndreas Gohr}
67