xref: /plugin/struct/syntax/filter.php (revision 0ebf30450f171bb580dc29056fb0a85fd8509c27)
14fc1424aSAnna Dabrowska<?php
24fc1424aSAnna Dabrowska
34fc1424aSAnna Dabrowska/**
495088304SAnna Dabrowska * DokuWiki Plugin struct (Filter Syntax Component)
54fc1424aSAnna Dabrowska *
64fc1424aSAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html
795088304SAnna Dabrowska * @author  Andreas Gohr, Anna Dabrowska <dokuwiki@cosmocode.de>
84fc1424aSAnna Dabrowska */
94fc1424aSAnna Dabrowska
10f1812f0bSAndreas Gohruse dokuwiki\plugin\struct\meta\AggregationFilter;
114fc1424aSAnna Dabrowskause dokuwiki\plugin\struct\meta\SearchConfig;
124fc1424aSAnna Dabrowskause dokuwiki\plugin\struct\meta\StructException;
134fc1424aSAnna Dabrowska
1495088304SAnna Dabrowskaclass syntax_plugin_struct_filter extends syntax_plugin_struct_table
154fc1424aSAnna Dabrowska{
164fc1424aSAnna Dabrowska    /**
174fc1424aSAnna Dabrowska     * Connect lookup pattern to lexer.
184fc1424aSAnna Dabrowska     *
194fc1424aSAnna Dabrowska     * @param string $mode Parser mode
204fc1424aSAnna Dabrowska     */
214fc1424aSAnna Dabrowska    public function connectTo($mode)
224fc1424aSAnna Dabrowska    {
234fc1424aSAnna Dabrowska        $this->Lexer->addSpecialPattern('----+ *struct filter *-+\n.*?\n----+', $mode, 'plugin_struct_filter');
244fc1424aSAnna Dabrowska    }
254fc1424aSAnna Dabrowska
264fc1424aSAnna Dabrowska    /**
2795088304SAnna Dabrowska     * @inheritDoc
284fc1424aSAnna Dabrowska     */
2995088304SAnna Dabrowska    public function render($format, Doku_Renderer $renderer, $config)
304fc1424aSAnna Dabrowska    {
3195088304SAnna Dabrowska        if ($format != 'xhtml') return false;
3295088304SAnna Dabrowska        if (!$config) return false;
334fc1424aSAnna Dabrowska
344fc1424aSAnna Dabrowska        global $conf;
35bea7239dSAndreas Gohr        global $INFO;
364fc1424aSAnna Dabrowska
374fc1424aSAnna Dabrowska        try {
38*0ebf3045SAndreas Gohr            $search = new SearchConfig($config, false);
39bea7239dSAndreas Gohr            $filter = new AggregationFilter($INFO['id'], $format, $renderer, $search);
404fc1424aSAnna Dabrowska
41f4dbd3b0SAndreas Gohr            $filter->startScope();
4295088304SAnna Dabrowska            $filter->render();
43f4dbd3b0SAndreas Gohr            $filter->finishScope();
444fc1424aSAnna Dabrowska
4595088304SAnna Dabrowska            if ($format === 'metadata') {
464fc1424aSAnna Dabrowska                /** @var Doku_Renderer_metadata $renderer */
474fc1424aSAnna Dabrowska                $renderer->meta['plugin']['struct']['hasaggregation'] = $search->getCacheFlag();
484fc1424aSAnna Dabrowska            }
494fc1424aSAnna Dabrowska        } catch (StructException $e) {
504fc1424aSAnna Dabrowska            msg($e->getMessage(), -1, $e->getLine(), $e->getFile());
514fc1424aSAnna Dabrowska            if ($conf['allowdebug']) msg('<pre>' . hsc($e->getTraceAsString()) . '</pre>', -1);
524fc1424aSAnna Dabrowska        }
534fc1424aSAnna Dabrowska
544fc1424aSAnna Dabrowska        return true;
554fc1424aSAnna Dabrowska    }
564fc1424aSAnna Dabrowska}
57