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 /** 25f0fda08aSwikidesign * return some info 26f0fda08aSwikidesign */ 27f0fda08aSwikidesign function getInfo(){ 28f0fda08aSwikidesign return array( 29f0fda08aSwikidesign 'author' => 'Esther Brunner', 30f0fda08aSwikidesign 'email' => 'wikidesign@gmail.com', 315e4bbbbdSwikidesign 'date' => '2006-12-02', 32f0fda08aSwikidesign 'name' => 'Discussion Plugin (comments component)', 33f0fda08aSwikidesign 'desc' => 'Enables discussion features', 34a566f076Swikidesign 'url' => 'http://www.wikidesign.ch/en/plugin/discussion/start', 35f0fda08aSwikidesign ); 36f0fda08aSwikidesign } 37f0fda08aSwikidesign 38f0fda08aSwikidesign function getType(){ return 'substition'; } 39f0fda08aSwikidesign function getPType(){ return 'block'; } 40f0fda08aSwikidesign function getSort(){ return 230; } 41f0fda08aSwikidesign 42f0fda08aSwikidesign /** 43f0fda08aSwikidesign * Connect pattern to lexer 44f0fda08aSwikidesign */ 45f0fda08aSwikidesign function connectTo($mode){ 46f0fda08aSwikidesign if ($mode == 'base'){ 47f0fda08aSwikidesign $this->Lexer->addSpecialPattern('~~DISCUSSION(?:|:off|:closed)~~', $mode, 'plugin_discussion_comments'); 48f0fda08aSwikidesign } 49f0fda08aSwikidesign } 50f0fda08aSwikidesign 51f0fda08aSwikidesign /** 52f0fda08aSwikidesign * Handle the match 53f0fda08aSwikidesign */ 54f0fda08aSwikidesign function handle($match, $state, $pos, &$handler){ 55f0fda08aSwikidesign global $ID; 56f0fda08aSwikidesign global $ACT; 57f0fda08aSwikidesign 58f0fda08aSwikidesign // don't show discussion section on blog mainpages 59f0fda08aSwikidesign if (defined('IS_BLOG_MAINPAGE')) return false; 60f0fda08aSwikidesign 61f0fda08aSwikidesign // assign discussion state 62f0fda08aSwikidesign if ($match == '~~DISCUSSION:off~~') $status = 0; 63f0fda08aSwikidesign else if ($match == '~~DISCUSSION:closed~~') $status = 2; 64f0fda08aSwikidesign else $status = 1; 65f0fda08aSwikidesign 66f0fda08aSwikidesign // get discussion meta file name 67f0fda08aSwikidesign $file = metaFN($ID, '.comments'); 68f0fda08aSwikidesign 69f0fda08aSwikidesign $data = array(); 70f0fda08aSwikidesign if (@file_exists($file)) $data = unserialize(io_readFile($file, false)); 71f0fda08aSwikidesign if ($data['status'] != $status){ 72f0fda08aSwikidesign $data['status'] = $status; 73f0fda08aSwikidesign io_saveFile($file, serialize($data)); 74f0fda08aSwikidesign } 75f0fda08aSwikidesign 76f0fda08aSwikidesign return $status; 77f0fda08aSwikidesign } 78f0fda08aSwikidesign 79f0fda08aSwikidesign function render($mode, &$renderer, $status){ 80*479dd10fSwikidesign return true; // do nothing -> everything is handled in action component 81f0fda08aSwikidesign } 82f0fda08aSwikidesign 83f0fda08aSwikidesign} 84f0fda08aSwikidesign 85f0fda08aSwikidesign//Setup VIM: ex: et ts=4 enc=utf-8 :