xref: /plugin/discussion/syntax/comments.php (revision f0fda08aecb1d731a5aee9fa543fdbf11bd942b9)
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 :