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// must be run within Dokuwiki 13f0fda08aSwikidesignif(!defined('DOKU_INC')) die(); 14f0fda08aSwikidesign 15f0fda08aSwikidesign/** 16f0fda08aSwikidesign * All DokuWiki plugins to extend the parser/rendering mechanism 17f0fda08aSwikidesign * need to inherit from this class 18f0fda08aSwikidesign */ 19f0fda08aSwikidesignclass syntax_plugin_discussion_comments extends DokuWiki_Syntax_Plugin { 20f0fda08aSwikidesign 21*e7ac9adaSGerrit Uitslag /** 22*e7ac9adaSGerrit Uitslag * Syntax Type 23*e7ac9adaSGerrit Uitslag * 24*e7ac9adaSGerrit Uitslag * @return string 25*e7ac9adaSGerrit Uitslag */ 26f0fda08aSwikidesign function getType() { return 'substition'; } 27*e7ac9adaSGerrit Uitslag 28*e7ac9adaSGerrit Uitslag /** 29*e7ac9adaSGerrit Uitslag * Paragraph Type 30*e7ac9adaSGerrit Uitslag * 31*e7ac9adaSGerrit Uitslag * @return string 32*e7ac9adaSGerrit Uitslag */ 33f0fda08aSwikidesign function getPType() { return 'block'; } 34*e7ac9adaSGerrit Uitslag 35*e7ac9adaSGerrit Uitslag /** 36*e7ac9adaSGerrit Uitslag * Sort for applying this mode 37*e7ac9adaSGerrit Uitslag * 38*e7ac9adaSGerrit Uitslag * @return int 39*e7ac9adaSGerrit Uitslag */ 40f0fda08aSwikidesign function getSort() { return 230; } 41f0fda08aSwikidesign 42f0fda08aSwikidesign /** 43f0fda08aSwikidesign * Connect pattern to lexer 44f0fda08aSwikidesign */ 45f0fda08aSwikidesign function connectTo($mode) { 46f0fda08aSwikidesign if ($mode == 'base') { 47e6a89be2Swikidesign $this->Lexer->addSpecialPattern('~~DISCUSSION[^\r\n]*?~~', $mode, 'plugin_discussion_comments'); 48f0fda08aSwikidesign } 49f0fda08aSwikidesign } 50f0fda08aSwikidesign 51f0fda08aSwikidesign /** 52*e7ac9adaSGerrit Uitslag * Handler to prepare matched data for the rendering process 53*e7ac9adaSGerrit Uitslag * 54*e7ac9adaSGerrit Uitslag * @param string $match The text matched by the patterns 55*e7ac9adaSGerrit Uitslag * @param int $state The lexer state for the match 56*e7ac9adaSGerrit Uitslag * @param int $pos The character position of the matched text 57*e7ac9adaSGerrit Uitslag * @param Doku_Handler $handler The Doku_Handler object 58*e7ac9adaSGerrit Uitslag * @return array Return an array with all data you want to use in render 59f0fda08aSwikidesign */ 60f0fda08aSwikidesign function handle($match, $state, $pos, &$handler) { 61f0fda08aSwikidesign 6207c376bbSwikidesign // strip markup 63e6a89be2Swikidesign $match = substr($match, 12, -2); 6407c376bbSwikidesign 6507c376bbSwikidesign // split title (if there is one) 6607c376bbSwikidesign list($match, $title) = explode('|', $match, 2); 67f0fda08aSwikidesign 68f0fda08aSwikidesign // assign discussion state 6907c376bbSwikidesign if ($match == ':off') $status = 0; 7007c376bbSwikidesign else if ($match == ':closed') $status = 2; 71f0fda08aSwikidesign else $status = 1; 72f0fda08aSwikidesign 73c1530f74SMichael Hamann return array($status, $title); 741eedfbceSMichael Hamann } 75f0fda08aSwikidesign 76*e7ac9adaSGerrit Uitslag /** 77*e7ac9adaSGerrit Uitslag * Handles the actual output creation. 78*e7ac9adaSGerrit Uitslag * 79*e7ac9adaSGerrit Uitslag * @param $mode string output format being rendered 80*e7ac9adaSGerrit Uitslag * @param $renderer Doku_Renderer the current renderer object 81*e7ac9adaSGerrit Uitslag * @param $data array data created by handler() 82*e7ac9adaSGerrit Uitslag * @return boolean rendered correctly? 83*e7ac9adaSGerrit Uitslag */ 84*e7ac9adaSGerrit Uitslag function render($mode, Doku_Renderer $renderer, $data) { 85c1530f74SMichael Hamann list($status, $title) = $data; 86c1530f74SMichael Hamann if ($mode == 'metadata') { 87c1530f74SMichael Hamann /** @var $renderer Doku_Renderer_metadata */ 88c1530f74SMichael Hamann $renderer->meta['plugin_discussion'] = array('status' => $status, 'title' => $title); 89f0fda08aSwikidesign } 90c1530f74SMichael Hamann return true; 91f0fda08aSwikidesign } 92f0fda08aSwikidesign} 93530693fbSMichael Klier// vim:ts=4:sw=4:et:enc=utf-8: 94