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 15f0fda08aSwikidesignif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 16f0fda08aSwikidesignrequire_once(DOKU_PLUGIN.'syntax.php'); 17f0fda08aSwikidesign 18f0fda08aSwikidesign/** 19f0fda08aSwikidesign * All DokuWiki plugins to extend the parser/rendering mechanism 20f0fda08aSwikidesign * need to inherit from this class 21f0fda08aSwikidesign */ 22f0fda08aSwikidesignclass syntax_plugin_discussion_comments extends DokuWiki_Syntax_Plugin { 23f0fda08aSwikidesign 24f0fda08aSwikidesign function getType() { return 'substition'; } 25f0fda08aSwikidesign function getPType() { return 'block'; } 26f0fda08aSwikidesign function getSort() { return 230; } 27f0fda08aSwikidesign 28f0fda08aSwikidesign /** 29f0fda08aSwikidesign * Connect pattern to lexer 30f0fda08aSwikidesign */ 31f0fda08aSwikidesign function connectTo($mode) { 32f0fda08aSwikidesign if ($mode == 'base') { 33e6a89be2Swikidesign $this->Lexer->addSpecialPattern('~~DISCUSSION[^\r\n]*?~~', $mode, 'plugin_discussion_comments'); 34f0fda08aSwikidesign } 35f0fda08aSwikidesign } 36f0fda08aSwikidesign 37f0fda08aSwikidesign /** 38f0fda08aSwikidesign * Handle the match 39f0fda08aSwikidesign */ 40f0fda08aSwikidesign function handle($match, $state, $pos, &$handler) { 4166ac0bd6SMichael Hamann global $ID, $ACT, $REV; 42f0fda08aSwikidesign 4307c376bbSwikidesign // strip markup 44e6a89be2Swikidesign $match = substr($match, 12, -2); 4507c376bbSwikidesign 4607c376bbSwikidesign // split title (if there is one) 4707c376bbSwikidesign list($match, $title) = explode('|', $match, 2); 48f0fda08aSwikidesign 49f0fda08aSwikidesign // assign discussion state 5007c376bbSwikidesign if ($match == ':off') $status = 0; 5107c376bbSwikidesign else if ($match == ':closed') $status = 2; 52f0fda08aSwikidesign else $status = 1; 53f0fda08aSwikidesign 54*c1530f74SMichael Hamann return array($status, $title); 551eedfbceSMichael Hamann } 56f0fda08aSwikidesign 57*c1530f74SMichael Hamann function render($mode, &$renderer, $data) { 58*c1530f74SMichael Hamann list($status, $title) = $data; 59*c1530f74SMichael Hamann if ($mode == 'metadata') { 60*c1530f74SMichael Hamann /** @var $renderer Doku_Renderer_metadata */ 61*c1530f74SMichael Hamann $renderer->meta['plugin_discussion'] = array('status' => $status, 'title' => $title); 62f0fda08aSwikidesign } 63*c1530f74SMichael Hamann return true; 64f0fda08aSwikidesign } 65f0fda08aSwikidesign} 66530693fbSMichael Klier// vim:ts=4:sw=4:et:enc=utf-8: 67