xref: /plugin/struct/syntax/filter.php (revision 7974a360890f5606a350a90f5abc47c2ef0d5c27)
1<?php
2
3/**
4 * DokuWiki Plugin struct (Filter Syntax Component)
5 *
6 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
7 * @author  Andreas Gohr, Anna Dabrowska <dokuwiki@cosmocode.de>
8 */
9
10use dokuwiki\plugin\struct\meta\Filter;
11use dokuwiki\plugin\struct\meta\SearchConfig;
12use dokuwiki\plugin\struct\meta\StructException;
13
14class syntax_plugin_struct_filter extends syntax_plugin_struct_table
15{
16    /**
17     * Connect lookup pattern to lexer.
18     *
19     * @param string $mode Parser mode
20     */
21    public function connectTo($mode)
22    {
23        $this->Lexer->addSpecialPattern('----+ *struct filter *-+\n.*?\n----+', $mode, 'plugin_struct_filter');
24    }
25
26    /**
27     * @inheritDoc
28     */
29    public function render($format, Doku_Renderer $renderer, $config)
30    {
31        if ($format != 'xhtml') return false;
32        if (!$config) return false;
33
34        global $conf;
35
36        try {
37            $search = new SearchConfig($config);
38            $filter = new Filter(null, $format, $renderer, $search);
39
40            $filter->render();
41
42            if ($format === 'metadata') {
43                /** @var Doku_Renderer_metadata $renderer */
44                $renderer->meta['plugin']['struct']['hasaggregation'] = $search->getCacheFlag();
45            }
46        } catch (StructException $e) {
47            msg($e->getMessage(), -1, $e->getLine(), $e->getFile());
48            if ($conf['allowdebug']) msg('<pre>' . hsc($e->getTraceAsString()) . '</pre>', -1);
49        }
50
51        return true;
52    }
53}
54