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