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 */ 16*dfc5d08bSGerrit Uitslagclass syntax_plugin_discussion_comments extends DokuWiki_Syntax_Plugin 17*dfc5d08bSGerrit Uitslag{ 18f0fda08aSwikidesign 19e7ac9adaSGerrit Uitslag /** 20e7ac9adaSGerrit Uitslag * Syntax Type 21e7ac9adaSGerrit Uitslag * 22e7ac9adaSGerrit Uitslag * @return string 23e7ac9adaSGerrit Uitslag */ 24*dfc5d08bSGerrit Uitslag public function getType() 25*dfc5d08bSGerrit Uitslag { 26*dfc5d08bSGerrit Uitslag return 'substition'; 27*dfc5d08bSGerrit Uitslag } 28e7ac9adaSGerrit Uitslag 29e7ac9adaSGerrit Uitslag /** 30e7ac9adaSGerrit Uitslag * Paragraph Type 31e7ac9adaSGerrit Uitslag * 32e7ac9adaSGerrit Uitslag * @return string 33e7ac9adaSGerrit Uitslag */ 34*dfc5d08bSGerrit Uitslag public function getPType() 35*dfc5d08bSGerrit Uitslag { 36*dfc5d08bSGerrit Uitslag return 'block'; 37*dfc5d08bSGerrit Uitslag } 38e7ac9adaSGerrit Uitslag 39e7ac9adaSGerrit Uitslag /** 40e7ac9adaSGerrit Uitslag * Sort for applying this mode 41e7ac9adaSGerrit Uitslag * 42e7ac9adaSGerrit Uitslag * @return int 43e7ac9adaSGerrit Uitslag */ 44*dfc5d08bSGerrit Uitslag public function getSort() 45*dfc5d08bSGerrit Uitslag { 46*dfc5d08bSGerrit Uitslag return 230; 47*dfc5d08bSGerrit Uitslag } 48f0fda08aSwikidesign 49f0fda08aSwikidesign /** 50f0fda08aSwikidesign * Connect pattern to lexer 51f0fda08aSwikidesign */ 52*dfc5d08bSGerrit Uitslag public function connectTo($mode) 53*dfc5d08bSGerrit Uitslag { 54f0fda08aSwikidesign if ($mode == 'base') { 55e6a89be2Swikidesign $this->Lexer->addSpecialPattern('~~DISCUSSION[^\r\n]*?~~', $mode, 'plugin_discussion_comments'); 56f0fda08aSwikidesign } 57f0fda08aSwikidesign } 58f0fda08aSwikidesign 59f0fda08aSwikidesign /** 60e7ac9adaSGerrit Uitslag * Handler to prepare matched data for the rendering process 61e7ac9adaSGerrit Uitslag * 62e7ac9adaSGerrit Uitslag * @param string $match The text matched by the patterns 63e7ac9adaSGerrit Uitslag * @param int $state The lexer state for the match 64e7ac9adaSGerrit Uitslag * @param int $pos The character position of the matched text 65e7ac9adaSGerrit Uitslag * @param Doku_Handler $handler The Doku_Handler object 66e7ac9adaSGerrit Uitslag * @return array Return an array with all data you want to use in render 67f0fda08aSwikidesign */ 68*dfc5d08bSGerrit Uitslag public function handle($match, $state, $pos, Doku_Handler $handler) 69*dfc5d08bSGerrit Uitslag { 7007c376bbSwikidesign // strip markup 71e6a89be2Swikidesign $match = substr($match, 12, -2); 7207c376bbSwikidesign 7307c376bbSwikidesign // split title (if there is one) 7464829c37SGerrit Uitslag list($match, $title) = array_pad(explode('|', $match, 2), 2, ''); 75f0fda08aSwikidesign 76f0fda08aSwikidesign // assign discussion state 7764829c37SGerrit Uitslag if ($match == ':off') { 7864829c37SGerrit Uitslag $status = 0; 7964829c37SGerrit Uitslag } elseif ($match == ':closed') { 8064829c37SGerrit Uitslag $status = 2; 8164829c37SGerrit Uitslag } else { 8264829c37SGerrit Uitslag // comments enabled 8364829c37SGerrit Uitslag $status = 1; 8464829c37SGerrit Uitslag } 85f0fda08aSwikidesign 8664829c37SGerrit Uitslag return [$status, $title]; 871eedfbceSMichael Hamann } 88f0fda08aSwikidesign 89e7ac9adaSGerrit Uitslag /** 90e7ac9adaSGerrit Uitslag * Handles the actual output creation. 91e7ac9adaSGerrit Uitslag * 9264829c37SGerrit Uitslag * @param string $format output format being rendered 9364829c37SGerrit Uitslag * @param Doku_Renderer $renderer the current renderer object 9464829c37SGerrit Uitslag * @param array $data data created by handler() 95e7ac9adaSGerrit Uitslag * @return boolean rendered correctly? 96e7ac9adaSGerrit Uitslag */ 97*dfc5d08bSGerrit Uitslag public function render($format, Doku_Renderer $renderer, $data) 98*dfc5d08bSGerrit Uitslag { 99c1530f74SMichael Hamann list($status, $title) = $data; 10064829c37SGerrit Uitslag if ($format == 'metadata') { 10164829c37SGerrit Uitslag /** @var Doku_Renderer_metadata $renderer */ 10264829c37SGerrit Uitslag $renderer->meta['plugin_discussion'] = ['status' => $status, 'title' => $title]; 103f0fda08aSwikidesign } 104c1530f74SMichael Hamann return true; 105f0fda08aSwikidesign } 106f0fda08aSwikidesign} 107