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