1f0fda08aSwikidesign<?php 2f0fda08aSwikidesign/** 3f0fda08aSwikidesign * Discussion Plugin 4f0fda08aSwikidesign * 5f0fda08aSwikidesign * Enables/disables discussion features based on config settings. 6f0fda08aSwikidesign * 7f0fda08aSwikidesign * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 8f0fda08aSwikidesign * @author Esther Brunner <wikidesign@gmail.com> 9f0fda08aSwikidesign * @author Dave Lawson <dlawson@masterytech.com> 10f0fda08aSwikidesign */ 11f0fda08aSwikidesign 12f0fda08aSwikidesign/** 13f0fda08aSwikidesign * All DokuWiki plugins to extend the parser/rendering mechanism 14f0fda08aSwikidesign * need to inherit from this class 15f0fda08aSwikidesign */ 16f0fda08aSwikidesignclass syntax_plugin_discussion_comments extends DokuWiki_Syntax_Plugin { 17f0fda08aSwikidesign 18e7ac9adaSGerrit Uitslag /** 19e7ac9adaSGerrit Uitslag * Syntax Type 20e7ac9adaSGerrit Uitslag * 21e7ac9adaSGerrit Uitslag * @return string 22e7ac9adaSGerrit Uitslag */ 23*64829c37SGerrit Uitslag public function getType() { return 'substition'; } 24e7ac9adaSGerrit Uitslag 25e7ac9adaSGerrit Uitslag /** 26e7ac9adaSGerrit Uitslag * Paragraph Type 27e7ac9adaSGerrit Uitslag * 28e7ac9adaSGerrit Uitslag * @return string 29e7ac9adaSGerrit Uitslag */ 30*64829c37SGerrit Uitslag public function getPType() { return 'block'; } 31e7ac9adaSGerrit Uitslag 32e7ac9adaSGerrit Uitslag /** 33e7ac9adaSGerrit Uitslag * Sort for applying this mode 34e7ac9adaSGerrit Uitslag * 35e7ac9adaSGerrit Uitslag * @return int 36e7ac9adaSGerrit Uitslag */ 37*64829c37SGerrit Uitslag public function getSort() { return 230; } 38f0fda08aSwikidesign 39f0fda08aSwikidesign /** 40f0fda08aSwikidesign * Connect pattern to lexer 41f0fda08aSwikidesign */ 42*64829c37SGerrit Uitslag public function connectTo($mode) { 43f0fda08aSwikidesign if ($mode == 'base') { 44e6a89be2Swikidesign $this->Lexer->addSpecialPattern('~~DISCUSSION[^\r\n]*?~~', $mode, 'plugin_discussion_comments'); 45f0fda08aSwikidesign } 46f0fda08aSwikidesign } 47f0fda08aSwikidesign 48f0fda08aSwikidesign /** 49e7ac9adaSGerrit Uitslag * Handler to prepare matched data for the rendering process 50e7ac9adaSGerrit Uitslag * 51e7ac9adaSGerrit Uitslag * @param string $match The text matched by the patterns 52e7ac9adaSGerrit Uitslag * @param int $state The lexer state for the match 53e7ac9adaSGerrit Uitslag * @param int $pos The character position of the matched text 54e7ac9adaSGerrit Uitslag * @param Doku_Handler $handler The Doku_Handler object 55e7ac9adaSGerrit Uitslag * @return array Return an array with all data you want to use in render 56f0fda08aSwikidesign */ 57*64829c37SGerrit Uitslag public function handle($match, $state, $pos, Doku_Handler $handler) { 5807c376bbSwikidesign // strip markup 59e6a89be2Swikidesign $match = substr($match, 12, -2); 6007c376bbSwikidesign 6107c376bbSwikidesign // split title (if there is one) 62*64829c37SGerrit Uitslag list($match, $title) = array_pad(explode('|', $match, 2), 2, ''); 63f0fda08aSwikidesign 64f0fda08aSwikidesign // assign discussion state 65*64829c37SGerrit Uitslag if ($match == ':off') { 66*64829c37SGerrit Uitslag $status = 0; 67*64829c37SGerrit Uitslag } elseif ($match == ':closed') { 68*64829c37SGerrit Uitslag $status = 2; 69*64829c37SGerrit Uitslag } else { 70*64829c37SGerrit Uitslag // comments enabled 71*64829c37SGerrit Uitslag $status = 1; 72*64829c37SGerrit Uitslag } 73f0fda08aSwikidesign 74*64829c37SGerrit Uitslag return [$status, $title]; 751eedfbceSMichael Hamann } 76f0fda08aSwikidesign 77e7ac9adaSGerrit Uitslag /** 78e7ac9adaSGerrit Uitslag * Handles the actual output creation. 79e7ac9adaSGerrit Uitslag * 80*64829c37SGerrit Uitslag * @param string $format output format being rendered 81*64829c37SGerrit Uitslag * @param Doku_Renderer $renderer the current renderer object 82*64829c37SGerrit Uitslag * @param array $data data created by handler() 83e7ac9adaSGerrit Uitslag * @return boolean rendered correctly? 84e7ac9adaSGerrit Uitslag */ 85*64829c37SGerrit Uitslag public function render($format, Doku_Renderer $renderer, $data) { 86c1530f74SMichael Hamann list($status, $title) = $data; 87*64829c37SGerrit Uitslag if ($format == 'metadata') { 88*64829c37SGerrit Uitslag /** @var Doku_Renderer_metadata $renderer */ 89*64829c37SGerrit Uitslag $renderer->meta['plugin_discussion'] = ['status' => $status, 'title' => $title]; 90f0fda08aSwikidesign } 91c1530f74SMichael Hamann return true; 92f0fda08aSwikidesign } 93f0fda08aSwikidesign} 94