1*14a1f0a4SSzymon Olewniczak<?php 2*14a1f0a4SSzymon Olewniczak 3*14a1f0a4SSzymon Olewniczakuse \dokuwiki\plugin\bez\mdl\Model; 4*14a1f0a4SSzymon Olewniczakuse \dokuwiki\plugin\bez\struct\BezSearch; 5*14a1f0a4SSzymon Olewniczak 6*14a1f0a4SSzymon Olewniczakuse dokuwiki\plugin\struct\meta\ConfigParser; 7*14a1f0a4SSzymon Olewniczakuse dokuwiki\plugin\struct\meta\AggregationTable; 8*14a1f0a4SSzymon Olewniczakuse dokuwiki\plugin\struct\meta\StructException; 9*14a1f0a4SSzymon Olewniczak 10*14a1f0a4SSzymon Olewniczak// must be run within Dokuwiki 11*14a1f0a4SSzymon Olewniczakif(!defined('DOKU_INC')) die(); 12*14a1f0a4SSzymon Olewniczak 13*14a1f0a4SSzymon Olewniczakclass syntax_plugin_bez_struct extends DokuWiki_Syntax_Plugin { 14*14a1f0a4SSzymon Olewniczak 15*14a1f0a4SSzymon Olewniczak /** 16*14a1f0a4SSzymon Olewniczak * @return string Syntax mode type 17*14a1f0a4SSzymon Olewniczak */ 18*14a1f0a4SSzymon Olewniczak public function getType() { 19*14a1f0a4SSzymon Olewniczak return 'substition'; 20*14a1f0a4SSzymon Olewniczak } 21*14a1f0a4SSzymon Olewniczak 22*14a1f0a4SSzymon Olewniczak /** 23*14a1f0a4SSzymon Olewniczak * @return string Paragraph type 24*14a1f0a4SSzymon Olewniczak */ 25*14a1f0a4SSzymon Olewniczak public function getPType() { 26*14a1f0a4SSzymon Olewniczak return 'block'; 27*14a1f0a4SSzymon Olewniczak } 28*14a1f0a4SSzymon Olewniczak 29*14a1f0a4SSzymon Olewniczak /** 30*14a1f0a4SSzymon Olewniczak * @return int Sort order - Low numbers go before high numbers 31*14a1f0a4SSzymon Olewniczak */ 32*14a1f0a4SSzymon Olewniczak public function getSort() { 33*14a1f0a4SSzymon Olewniczak return 155; 34*14a1f0a4SSzymon Olewniczak } 35*14a1f0a4SSzymon Olewniczak 36*14a1f0a4SSzymon Olewniczak /** 37*14a1f0a4SSzymon Olewniczak * Connect lookup pattern to lexer. 38*14a1f0a4SSzymon Olewniczak * 39*14a1f0a4SSzymon Olewniczak * @param string $mode Parser mode 40*14a1f0a4SSzymon Olewniczak */ 41*14a1f0a4SSzymon Olewniczak public function connectTo($mode) { 42*14a1f0a4SSzymon Olewniczak $this->Lexer->addSpecialPattern('----+ *struct bez *-+\n.*?\n----+', $mode, 'plugin_bez_struct'); 43*14a1f0a4SSzymon Olewniczak } 44*14a1f0a4SSzymon Olewniczak 45*14a1f0a4SSzymon Olewniczak /** 46*14a1f0a4SSzymon Olewniczak * Handle matches of the struct syntax 47*14a1f0a4SSzymon Olewniczak * 48*14a1f0a4SSzymon Olewniczak * @param string $match The match of the syntax 49*14a1f0a4SSzymon Olewniczak * @param int $state The state of the handler 50*14a1f0a4SSzymon Olewniczak * @param int $pos The position in the document 51*14a1f0a4SSzymon Olewniczak * @param Doku_Handler $handler The handler 52*14a1f0a4SSzymon Olewniczak * @return array Data for the renderer 53*14a1f0a4SSzymon Olewniczak */ 54*14a1f0a4SSzymon Olewniczak public function handle($match, $state, $pos, Doku_Handler $handler) { 55*14a1f0a4SSzymon Olewniczak global $conf; 56*14a1f0a4SSzymon Olewniczak 57*14a1f0a4SSzymon Olewniczak $lines = explode("\n", $match); 58*14a1f0a4SSzymon Olewniczak array_shift($lines); 59*14a1f0a4SSzymon Olewniczak array_pop($lines); 60*14a1f0a4SSzymon Olewniczak 61*14a1f0a4SSzymon Olewniczak try { 62*14a1f0a4SSzymon Olewniczak $parser = new ConfigParser($lines); 63*14a1f0a4SSzymon Olewniczak $config = $parser->getConfig(); 64*14a1f0a4SSzymon Olewniczak return $config; 65*14a1f0a4SSzymon Olewniczak } catch(StructException $e) { 66*14a1f0a4SSzymon Olewniczak msg($e->getMessage(), -1, $e->getLine(), $e->getFile()); 67*14a1f0a4SSzymon Olewniczak if($conf['allowdebug']) msg('<pre>' . hsc($e->getTraceAsString()) . '</pre>', -1); 68*14a1f0a4SSzymon Olewniczak return null; 69*14a1f0a4SSzymon Olewniczak } 70*14a1f0a4SSzymon Olewniczak } 71*14a1f0a4SSzymon Olewniczak 72*14a1f0a4SSzymon Olewniczak /** 73*14a1f0a4SSzymon Olewniczak * Render xhtml output or metadata 74*14a1f0a4SSzymon Olewniczak * 75*14a1f0a4SSzymon Olewniczak * @param string $mode Renderer mode (supported modes: xhtml) 76*14a1f0a4SSzymon Olewniczak * @param Doku_Renderer $renderer The renderer 77*14a1f0a4SSzymon Olewniczak * @param array $data The data from the handler() function 78*14a1f0a4SSzymon Olewniczak * @return bool If rendering was successful. 79*14a1f0a4SSzymon Olewniczak */ 80*14a1f0a4SSzymon Olewniczak public function render($mode, Doku_Renderer $renderer, $data) { 81*14a1f0a4SSzymon Olewniczak if($mode != 'xhtml') return true; 82*14a1f0a4SSzymon Olewniczak if(!$data) return false; 83*14a1f0a4SSzymon Olewniczak global $INFO; 84*14a1f0a4SSzymon Olewniczak global $conf; 85*14a1f0a4SSzymon Olewniczak global $auth; 86*14a1f0a4SSzymon Olewniczak 87*14a1f0a4SSzymon Olewniczak return true; 88*14a1f0a4SSzymon Olewniczak 89*14a1f0a4SSzymon Olewniczak try { 90*14a1f0a4SSzymon Olewniczak $schema = $data['schemas'][0][0]; 91*14a1f0a4SSzymon Olewniczak /** @var Model $model */ 92*14a1f0a4SSzymon Olewniczak $model = new Model($auth, $INFO['client'], $this, $conf); 93*14a1f0a4SSzymon Olewniczak 94*14a1f0a4SSzymon Olewniczak $factory = $model->factory($schema); 95*14a1f0a4SSzymon Olewniczak $search = new BezSearch($data, $factory); 96*14a1f0a4SSzymon Olewniczak 97*14a1f0a4SSzymon Olewniczak /** @var AggregationTable $table */ 98*14a1f0a4SSzymon Olewniczak $table = new AggregationTable($INFO['id'], $mode, $renderer, $search); 99*14a1f0a4SSzymon Olewniczak $table->render(); 100*14a1f0a4SSzymon Olewniczak 101*14a1f0a4SSzymon Olewniczak } catch(Exception $e) { 102*14a1f0a4SSzymon Olewniczak msg($e->getMessage(), -1, $e->getLine(), $e->getFile()); 103*14a1f0a4SSzymon Olewniczak if($conf['allowdebug']) msg('<pre>' . hsc($e->getTraceAsString()) . '</pre>', -1); 104*14a1f0a4SSzymon Olewniczak } 105*14a1f0a4SSzymon Olewniczak 106*14a1f0a4SSzymon Olewniczak return true; 107*14a1f0a4SSzymon Olewniczak } 108*14a1f0a4SSzymon Olewniczak} 109