1*f0fda08aSwikidesign<?php 2*f0fda08aSwikidesign/** 3*f0fda08aSwikidesign * Discussion Plugin 4*f0fda08aSwikidesign * 5*f0fda08aSwikidesign * Enables/disables discussion features based on config settings. 6*f0fda08aSwikidesign * 7*f0fda08aSwikidesign * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 8*f0fda08aSwikidesign * @author Esther Brunner <wikidesign@gmail.com> 9*f0fda08aSwikidesign * @author Dave Lawson <dlawson@masterytech.com> 10*f0fda08aSwikidesign */ 11*f0fda08aSwikidesign 12*f0fda08aSwikidesign// must be run within Dokuwiki 13*f0fda08aSwikidesignif(!defined('DOKU_INC')) die(); 14*f0fda08aSwikidesign 15*f0fda08aSwikidesignif(!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN',DOKU_INC.'lib/plugins/'); 16*f0fda08aSwikidesignrequire_once(DOKU_PLUGIN.'syntax.php'); 17*f0fda08aSwikidesign 18*f0fda08aSwikidesign/** 19*f0fda08aSwikidesign * All DokuWiki plugins to extend the parser/rendering mechanism 20*f0fda08aSwikidesign * need to inherit from this class 21*f0fda08aSwikidesign */ 22*f0fda08aSwikidesignclass syntax_plugin_discussion_comments extends DokuWiki_Syntax_Plugin { 23*f0fda08aSwikidesign 24*f0fda08aSwikidesign /** 25*f0fda08aSwikidesign * return some info 26*f0fda08aSwikidesign */ 27*f0fda08aSwikidesign function getInfo(){ 28*f0fda08aSwikidesign return array( 29*f0fda08aSwikidesign 'author' => 'Esther Brunner', 30*f0fda08aSwikidesign 'email' => 'wikidesign@gmail.com', 31*f0fda08aSwikidesign 'date' => '2006-10-05', 32*f0fda08aSwikidesign 'name' => 'Discussion Plugin (comments component)', 33*f0fda08aSwikidesign 'desc' => 'Enables discussion features', 34*f0fda08aSwikidesign 'url' => 'http://wiki.splitbrain.org/plugin:discussion', 35*f0fda08aSwikidesign ); 36*f0fda08aSwikidesign } 37*f0fda08aSwikidesign 38*f0fda08aSwikidesign function getType(){ return 'substition'; } 39*f0fda08aSwikidesign function getPType(){ return 'block'; } 40*f0fda08aSwikidesign function getSort(){ return 230; } 41*f0fda08aSwikidesign 42*f0fda08aSwikidesign /** 43*f0fda08aSwikidesign * Connect pattern to lexer 44*f0fda08aSwikidesign */ 45*f0fda08aSwikidesign function connectTo($mode){ 46*f0fda08aSwikidesign if ($mode == 'base'){ 47*f0fda08aSwikidesign $this->Lexer->addSpecialPattern('~~DISCUSSION(?:|:off|:closed)~~', $mode, 'plugin_discussion_comments'); 48*f0fda08aSwikidesign } 49*f0fda08aSwikidesign } 50*f0fda08aSwikidesign 51*f0fda08aSwikidesign /** 52*f0fda08aSwikidesign * Handle the match 53*f0fda08aSwikidesign */ 54*f0fda08aSwikidesign function handle($match, $state, $pos, &$handler){ 55*f0fda08aSwikidesign global $ID; 56*f0fda08aSwikidesign global $ACT; 57*f0fda08aSwikidesign 58*f0fda08aSwikidesign // don't show discussion section on blog mainpages 59*f0fda08aSwikidesign if (defined('IS_BLOG_MAINPAGE')) return false; 60*f0fda08aSwikidesign 61*f0fda08aSwikidesign // assign discussion state 62*f0fda08aSwikidesign if ($match == '~~DISCUSSION:off~~') $status = 0; 63*f0fda08aSwikidesign else if ($match == '~~DISCUSSION:closed~~') $status = 2; 64*f0fda08aSwikidesign else $status = 1; 65*f0fda08aSwikidesign 66*f0fda08aSwikidesign // get discussion meta file name 67*f0fda08aSwikidesign $file = metaFN($ID, '.comments'); 68*f0fda08aSwikidesign 69*f0fda08aSwikidesign $data = array(); 70*f0fda08aSwikidesign if (@file_exists($file)) $data = unserialize(io_readFile($file, false)); 71*f0fda08aSwikidesign if ($data['status'] != $status){ 72*f0fda08aSwikidesign $data['status'] = $status; 73*f0fda08aSwikidesign io_saveFile($file, serialize($data)); 74*f0fda08aSwikidesign } 75*f0fda08aSwikidesign 76*f0fda08aSwikidesign return $status; 77*f0fda08aSwikidesign } 78*f0fda08aSwikidesign 79*f0fda08aSwikidesign /** 80*f0fda08aSwikidesign * Add discussion TOC item 81*f0fda08aSwikidesign */ 82*f0fda08aSwikidesign function render($mode, &$renderer, $status){ 83*f0fda08aSwikidesign if ($status){ 84*f0fda08aSwikidesign global $conf; 85*f0fda08aSwikidesign 86*f0fda08aSwikidesign $title = $this->getLang('discussion'); 87*f0fda08aSwikidesign $hid = $renderer->_headerToLink($title, 'true'); 88*f0fda08aSwikidesign $renderer->toc[] = array( 89*f0fda08aSwikidesign 'hid' => $hid, 90*f0fda08aSwikidesign 'title' => $title, 91*f0fda08aSwikidesign 'type' => 'ul', 92*f0fda08aSwikidesign 'level' => 3 - $conf['toptoclevel'] 93*f0fda08aSwikidesign ); 94*f0fda08aSwikidesign return true; 95*f0fda08aSwikidesign } 96*f0fda08aSwikidesign return false; 97*f0fda08aSwikidesign } 98*f0fda08aSwikidesign 99*f0fda08aSwikidesign} 100*f0fda08aSwikidesign 101*f0fda08aSwikidesign//Setup VIM: ex: et ts=4 enc=utf-8 :