1*b9d35ff2SAnna Dabrowska<?php 2*b9d35ff2SAnna Dabrowska/** 3*b9d35ff2SAnna Dabrowska * DokuWiki Plugin struct (Syntax Component) 4*b9d35ff2SAnna Dabrowska * 5*b9d35ff2SAnna Dabrowska * @license GPL 2 http://www.gnu.org/licenses/gpl-2.0.html 6*b9d35ff2SAnna Dabrowska * @author Andreas Gohr, Michael Große, Anna Dabrowska <dokuwiki@cosmocode.de> 7*b9d35ff2SAnna Dabrowska */ 8*b9d35ff2SAnna Dabrowska 9*b9d35ff2SAnna Dabrowskause dokuwiki\plugin\struct\meta\AccessTableData; 10*b9d35ff2SAnna Dabrowskause dokuwiki\plugin\struct\meta\SerialTable; 11*b9d35ff2SAnna Dabrowska 12*b9d35ff2SAnna Dabrowskaclass syntax_plugin_struct_serial extends syntax_plugin_struct_table { 13*b9d35ff2SAnna Dabrowska 14*b9d35ff2SAnna Dabrowska /** @var string which class to use for output */ 15*b9d35ff2SAnna Dabrowska protected $tableclass = SerialTable::class; 16*b9d35ff2SAnna Dabrowska 17*b9d35ff2SAnna Dabrowska /** 18*b9d35ff2SAnna Dabrowska * Connect serial pattern to lexer. 19*b9d35ff2SAnna Dabrowska * 20*b9d35ff2SAnna Dabrowska * @param string $mode Parser mode 21*b9d35ff2SAnna Dabrowska */ 22*b9d35ff2SAnna Dabrowska public function connectTo($mode) { 23*b9d35ff2SAnna Dabrowska $this->Lexer->addSpecialPattern('----+ *struct serial *-+\n.*?\n----+', $mode, 'plugin_struct_serial'); 24*b9d35ff2SAnna Dabrowska } 25*b9d35ff2SAnna Dabrowska 26*b9d35ff2SAnna Dabrowska /** 27*b9d35ff2SAnna Dabrowska * Handle matches of the struct syntax 28*b9d35ff2SAnna Dabrowska * 29*b9d35ff2SAnna Dabrowska * @param string $match The match of the syntax 30*b9d35ff2SAnna Dabrowska * @param int $state The state of the handler 31*b9d35ff2SAnna Dabrowska * @param int $pos The position in the document 32*b9d35ff2SAnna Dabrowska * @param Doku_Handler $handler The handler 33*b9d35ff2SAnna Dabrowska * @return array Data for the renderer 34*b9d35ff2SAnna Dabrowska */ 35*b9d35ff2SAnna Dabrowska public function handle($match, $state, $pos, Doku_Handler $handler) { 36*b9d35ff2SAnna Dabrowska // usual parsing 37*b9d35ff2SAnna Dabrowska $config = parent::handle($match, $state, $pos, $handler); 38*b9d35ff2SAnna Dabrowska if(is_null($config)) return null; 39*b9d35ff2SAnna Dabrowska 40*b9d35ff2SAnna Dabrowska $config = $this->addTypeFilter($config); 41*b9d35ff2SAnna Dabrowska 42*b9d35ff2SAnna Dabrowska // adjust some things for the serial editor 43*b9d35ff2SAnna Dabrowska $config['cols'] = array('*'); // always select all columns 44*b9d35ff2SAnna Dabrowska if(isset($config['rownumbers'])) unset($config['rownumbers']); // this annoying to update dynamically 45*b9d35ff2SAnna Dabrowska 46*b9d35ff2SAnna Dabrowska return $config; 47*b9d35ff2SAnna Dabrowska } 48*b9d35ff2SAnna Dabrowska 49*b9d35ff2SAnna Dabrowska /** 50*b9d35ff2SAnna Dabrowska * Filter based on primary key columns 51*b9d35ff2SAnna Dabrowska * 52*b9d35ff2SAnna Dabrowska * @param array $config 53*b9d35ff2SAnna Dabrowska * @return array 54*b9d35ff2SAnna Dabrowska */ 55*b9d35ff2SAnna Dabrowska protected function addTypeFilter($config) 56*b9d35ff2SAnna Dabrowska { 57*b9d35ff2SAnna Dabrowska $config['filter'][] = ['%rowid%', '!=', (string)AccessTableData::DEFAULT_PAGE_RID, 'AND']; 58*b9d35ff2SAnna Dabrowska $config['filter'][] = ['%pageid%', '!=', '', 'AND']; 59*b9d35ff2SAnna Dabrowska return $config; 60*b9d35ff2SAnna Dabrowska } 61*b9d35ff2SAnna Dabrowska} 62