1<?php 2 3/** 4 * DokuWiki Plugin struct (Syntax Component) 5 * 6 * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 7 * @author Andreas Gohr, Michael Große <dokuwiki@cosmocode.de> 8 */ 9 10use dokuwiki\plugin\struct\meta\AggregationList; 11use dokuwiki\plugin\struct\meta\ConfigParser; 12use dokuwiki\plugin\struct\meta\SearchConfig; 13use dokuwiki\plugin\struct\meta\StructException; 14 15class syntax_plugin_struct_list extends syntax_plugin_struct_table 16{ 17 /** @inheritdoc */ 18 protected $tableclass = AggregationList::class; 19 20 /** @inheritdoc */ 21 protected $illegalOptions = ['dynfilters', 'summarize', 'rownumbers', 'widths', 'summary']; 22 23 /** 24 * Connect lookup pattern to lexer. 25 * 26 * @param string $mode Parser mode 27 */ 28 public function connectTo($mode) 29 { 30 $this->Lexer->addSpecialPattern('----+ *struct list *-+\n.*?\n----+', $mode, 'plugin_struct_list'); 31 } 32 33 /** 34 * Render xhtml output or metadata 35 * 36 * @param string $mode Renderer mode (supported modes: xhtml) 37 * @param Doku_Renderer $renderer The renderer 38 * @param array $data The data from the handler() function 39 * @return bool If rendering was successful. 40 */ 41 public function Xrender($mode, Doku_Renderer $renderer, $data) 42 { 43 if ($mode != 'xhtml') return false; 44 if (!$data) return false; 45 global $INFO; 46 global $conf; 47 48 try { 49 $search = new SearchConfig($data); 50 51 /** @var AggregationList $list */ 52 $list = new $this->tableclass($INFO['id'], $mode, $renderer, $search); 53 $list->render(); 54 55 if ($mode == 'metadata') { 56 /** @var Doku_Renderer_metadata $renderer */ 57 $renderer->meta['plugin']['struct']['hasaggregation'] = $search->getCacheFlag(); 58 } 59 } catch (StructException $e) { 60 msg($e->getMessage(), -1, $e->getLine(), $e->getFile()); 61 if ($conf['allowdebug']) msg('<pre>' . hsc($e->getTraceAsString()) . '</pre>', -1); 62 } 63 64 return true; 65 } 66} 67