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