1*ce9be9e9SSzymon Olewniczak<?php 2*ce9be9e9SSzymon Olewniczak// must be run within DokuWiki 3*ce9be9e9SSzymon Olewniczakif (!defined('DOKU_INC')) die(); 4*ce9be9e9SSzymon Olewniczak 5*ce9be9e9SSzymon Olewniczak/** 6*ce9be9e9SSzymon Olewniczak * All DokuWiki plugins to extend the parser/rendering mechanism 7*ce9be9e9SSzymon Olewniczak * need to inherit from this class 8*ce9be9e9SSzymon Olewniczak */ 9*ce9be9e9SSzymon Olewniczakclass syntax_plugin_ireadit_ireadit extends DokuWiki_Syntax_Plugin 10*ce9be9e9SSzymon Olewniczak{ 11*ce9be9e9SSzymon Olewniczak function getPType() 12*ce9be9e9SSzymon Olewniczak { 13*ce9be9e9SSzymon Olewniczak return 'block'; 14*ce9be9e9SSzymon Olewniczak } 15*ce9be9e9SSzymon Olewniczak 16*ce9be9e9SSzymon Olewniczak function getType() 17*ce9be9e9SSzymon Olewniczak { 18*ce9be9e9SSzymon Olewniczak return 'substition'; 19*ce9be9e9SSzymon Olewniczak } 20*ce9be9e9SSzymon Olewniczak 21*ce9be9e9SSzymon Olewniczak function getSort() 22*ce9be9e9SSzymon Olewniczak { 23*ce9be9e9SSzymon Olewniczak return 99; 24*ce9be9e9SSzymon Olewniczak } 25*ce9be9e9SSzymon Olewniczak 26*ce9be9e9SSzymon Olewniczak function connectTo($mode) 27*ce9be9e9SSzymon Olewniczak { 28*ce9be9e9SSzymon Olewniczak $this->Lexer->addSpecialPattern('~~IREADIT.*?~~', $mode, 'plugin_ireadit_ireadit'); 29*ce9be9e9SSzymon Olewniczak } 30*ce9be9e9SSzymon Olewniczak 31*ce9be9e9SSzymon Olewniczak function handle($match, $state, $pos, Doku_Handler $handler) 32*ce9be9e9SSzymon Olewniczak { 33*ce9be9e9SSzymon Olewniczak $match = trim(substr($match, strlen('~~IREADIT'), -2)); 34*ce9be9e9SSzymon Olewniczak $splits = preg_split('/[\s:]+/', $match, -1, PREG_SPLIT_NO_EMPTY); 35*ce9be9e9SSzymon Olewniczak 36*ce9be9e9SSzymon Olewniczak $users = []; 37*ce9be9e9SSzymon Olewniczak $groups = []; 38*ce9be9e9SSzymon Olewniczak foreach ($splits as $split) { 39*ce9be9e9SSzymon Olewniczak if ($split[0] == '@') { 40*ce9be9e9SSzymon Olewniczak $group = substr($split, 1); 41*ce9be9e9SSzymon Olewniczak $groups[] = $group; 42*ce9be9e9SSzymon Olewniczak } else { 43*ce9be9e9SSzymon Olewniczak $users[] = $split; 44*ce9be9e9SSzymon Olewniczak } 45*ce9be9e9SSzymon Olewniczak } 46*ce9be9e9SSzymon Olewniczak 47*ce9be9e9SSzymon Olewniczak return ['users' => $users, 'groups' => $groups]; 48*ce9be9e9SSzymon Olewniczak } 49*ce9be9e9SSzymon Olewniczak 50*ce9be9e9SSzymon Olewniczak /** 51*ce9be9e9SSzymon Olewniczak * Render xhtml output or metadata 52*ce9be9e9SSzymon Olewniczak * 53*ce9be9e9SSzymon Olewniczak * @param string $mode Renderer mode (supported modes: xhtml) 54*ce9be9e9SSzymon Olewniczak * @param Doku_Renderer $renderer The renderer 55*ce9be9e9SSzymon Olewniczak * @param array $data The data from the handler() function 56*ce9be9e9SSzymon Olewniczak * 57*ce9be9e9SSzymon Olewniczak * @return bool If rendering was successful. 58*ce9be9e9SSzymon Olewniczak */ 59*ce9be9e9SSzymon Olewniczak 60*ce9be9e9SSzymon Olewniczak public function render($mode, Doku_Renderer $renderer, $data) 61*ce9be9e9SSzymon Olewniczak { 62*ce9be9e9SSzymon Olewniczak if (!$data) { 63*ce9be9e9SSzymon Olewniczak return false; 64*ce9be9e9SSzymon Olewniczak } 65*ce9be9e9SSzymon Olewniczak 66*ce9be9e9SSzymon Olewniczak $method = "render_$mode"; 67*ce9be9e9SSzymon Olewniczak if (method_exists($this, $method)) { 68*ce9be9e9SSzymon Olewniczak call_user_func([$this, $method], $renderer, $data); 69*ce9be9e9SSzymon Olewniczak return true; 70*ce9be9e9SSzymon Olewniczak } 71*ce9be9e9SSzymon Olewniczak return false; 72*ce9be9e9SSzymon Olewniczak } 73*ce9be9e9SSzymon Olewniczak 74*ce9be9e9SSzymon Olewniczak /** 75*ce9be9e9SSzymon Olewniczak * Render metadata 76*ce9be9e9SSzymon Olewniczak * 77*ce9be9e9SSzymon Olewniczak * @param Doku_Renderer $renderer The renderer 78*ce9be9e9SSzymon Olewniczak * @param array $data The data from the handler() function 79*ce9be9e9SSzymon Olewniczak */ 80*ce9be9e9SSzymon Olewniczak public function render_metadata(Doku_Renderer $renderer, $data) 81*ce9be9e9SSzymon Olewniczak { 82*ce9be9e9SSzymon Olewniczak $plugin_name = $this->getPluginName(); 83*ce9be9e9SSzymon Olewniczak $renderer->meta['plugin'][$plugin_name] = $data; 84*ce9be9e9SSzymon Olewniczak } 85*ce9be9e9SSzymon Olewniczak} 86