1f0fda08aSwikidesign<?php 2f0fda08aSwikidesign/** 3f0fda08aSwikidesign * Discussion Plugin, threads component: displays a list of recently active discussions 4f0fda08aSwikidesign * 5f0fda08aSwikidesign * @license GPL 2 (http://www.gnu.org/licenses/gpl.html) 6f0fda08aSwikidesign * @author Esther Brunner <wikidesign@gmail.com> 7f0fda08aSwikidesign */ 8f0fda08aSwikidesign 9f0fda08aSwikidesign// must be run within Dokuwiki 10f0fda08aSwikidesignif(!defined('DOKU_INC')) die(); 11f0fda08aSwikidesign 12*5fc512fbSwikidesignif (!defined('DOKU_LF')) define('DOKU_LF', "\n"); 13*5fc512fbSwikidesignif (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); 14f0fda08aSwikidesignif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/'); 15*5fc512fbSwikidesign 16f0fda08aSwikidesignrequire_once(DOKU_PLUGIN.'syntax.php'); 17f0fda08aSwikidesign 18f0fda08aSwikidesignclass syntax_plugin_discussion_threads extends DokuWiki_Syntax_Plugin { 19f0fda08aSwikidesign 20f0fda08aSwikidesign /** 21f0fda08aSwikidesign * return some info 22f0fda08aSwikidesign */ 23f0fda08aSwikidesign function getInfo(){ 24f0fda08aSwikidesign return array( 25f0fda08aSwikidesign 'author' => 'Esther Brunner', 26f0fda08aSwikidesign 'email' => 'wikidesign@gmail.com', 27*5fc512fbSwikidesign 'date' => '2006-12-10', 28f0fda08aSwikidesign 'name' => 'Discussion Plugin (threads component)', 29f0fda08aSwikidesign 'desc' => 'Displays a list of recently active discussions', 30c084f11aSwikidesign 'url' => 'http://www.wikidesign.ch/en/plugin/discussion/start', 31f0fda08aSwikidesign ); 32f0fda08aSwikidesign } 33f0fda08aSwikidesign 34f0fda08aSwikidesign function getType(){ return 'substition'; } 35f0fda08aSwikidesign function getPType(){ return 'block'; } 36f0fda08aSwikidesign function getSort(){ return 306; } 37*5fc512fbSwikidesign 38*5fc512fbSwikidesign function connectTo($mode){ 39*5fc512fbSwikidesign $this->Lexer->addSpecialPattern('\{\{threads>.+?\}\}', $mode, 'plugin_discussion_threads'); 40*5fc512fbSwikidesign } 41f0fda08aSwikidesign 42f0fda08aSwikidesign /** 43f0fda08aSwikidesign * Handle the match 44f0fda08aSwikidesign */ 45f0fda08aSwikidesign function handle($match, $state, $pos, &$handler){ 46*5fc512fbSwikidesign return cleanID(substr($match, 10, -2)); // strip {{threads> from start and }} from end 47f0fda08aSwikidesign } 48f0fda08aSwikidesign 49f0fda08aSwikidesign /** 50f0fda08aSwikidesign * Create output 51f0fda08aSwikidesign */ 52f0fda08aSwikidesign function render($mode, &$renderer, $ns) { 53f0fda08aSwikidesign global $ID; 54f0fda08aSwikidesign global $conf; 55f0fda08aSwikidesign 56*5fc512fbSwikidesign if (($ns == '*') || ($ns == ':')) $ns = ''; 57f0fda08aSwikidesign elseif ($ns == '.') $ns = getNS($ID); 58f0fda08aSwikidesign 59*5fc512fbSwikidesign if ($my =& plugin_load('helper', 'discussion')) $pages = $my->getThreads($ns); 60*5fc512fbSwikidesign if (!$pages) return true; // nothing to display 61f0fda08aSwikidesign 62f0fda08aSwikidesign if ($mode == 'xhtml'){ 63f0fda08aSwikidesign 64f0fda08aSwikidesign // prevent caching to ensure content is always fresh 65f0fda08aSwikidesign $renderer->info['cache'] = false; 66f0fda08aSwikidesign 67cc497149Swikidesign // show form to start a new discussion thread? 68cc497149Swikidesign $perm_create = (auth_quickaclcheck($ns.':*') >= AUTH_CREATE); 69e2a53e8cSwikidesign if ($perm_create && ($this->getConf('threads_formposition') == 'top')) 70cc497149Swikidesign $renderer->doc .= $this->_newThreadForm($ns); 71cc497149Swikidesign 72*5fc512fbSwikidesign // let Pagelist Plugin do the work for us 73*5fc512fbSwikidesign if (!$pagelist =& plugin_load('helper', 'pagelist')){ 74*5fc512fbSwikidesign msg('The Pagelist Plugin must be installed for threads lists to work.', -1); 75*5fc512fbSwikidesign return false; 76*5fc512fbSwikidesign } 77*5fc512fbSwikidesign $pagelist->startList(); 78f0fda08aSwikidesign foreach ($pages as $page){ 79*5fc512fbSwikidesign $pagelist->addPage($page); 807a292a0dSwikidesign } 81*5fc512fbSwikidesign $renderer->doc .= $pagelist->finishList(); 82f0fda08aSwikidesign 83f0fda08aSwikidesign // show form to start a new discussion thread? 84e2a53e8cSwikidesign if ($perm_create && ($this->getConf('threads_formposition') == 'bottom')) 85cc497149Swikidesign $renderer->doc .= $this->_newThreadForm($ns); 86f0fda08aSwikidesign 87f0fda08aSwikidesign return true; 88f0fda08aSwikidesign 89f0fda08aSwikidesign // for metadata renderer 90f0fda08aSwikidesign } elseif ($mode == 'metadata'){ 91f0fda08aSwikidesign foreach ($pages as $page){ 92*5fc512fbSwikidesign $renderer->meta['relation']['references'][$page['id']] = true; 93f0fda08aSwikidesign } 94f0fda08aSwikidesign 95f0fda08aSwikidesign return true; 96f0fda08aSwikidesign } 97f0fda08aSwikidesign return false; 98f0fda08aSwikidesign } 99f0fda08aSwikidesign 100*5fc512fbSwikidesign/* ---------- (X)HTML Output Functions ---------- */ 101f0fda08aSwikidesign 102f0fda08aSwikidesign /** 103f0fda08aSwikidesign * Show the form to start a new discussion thread 104f0fda08aSwikidesign */ 105cc497149Swikidesign function _newThreadForm($ns){ 106f0fda08aSwikidesign global $ID; 107f0fda08aSwikidesign global $lang; 108f0fda08aSwikidesign 109*5fc512fbSwikidesign return '<div class="newthread_form">'.DOKU_LF. 110*5fc512fbSwikidesign '<form id="discussion__newthread_form" method="post" action="'.script().'" accept-charset="'.$lang['encoding'].'">'.DOKU_LF. 111*5fc512fbSwikidesign DOKU_TAB.'<fieldset>'.DOKU_LF. 112*5fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<legend>'.$this->getLang('newthread').'</legend>'.DOKU_LF. 113*5fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input type="hidden" name="id" value="'.$ID.'" />'.DOKU_LF. 114*5fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input type="hidden" name="do" value="newthread" />'.DOKU_LF. 115*5fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input type="hidden" name="ns" value="'.$ns.'" />'.DOKU_LF. 116*5fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input class="edit" type="text" name="title" id="discussion__newthread_title" size="40" tabindex="1" />'.DOKU_LF. 117*5fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input class="button" type="submit" value="'.$lang['btn_create'].'" tabindex="2" />'.DOKU_LF. 118*5fc512fbSwikidesign DOKU_TAB.'</fieldset>'.DOKU_LF. 119*5fc512fbSwikidesign '</form>'.DOKU_LF. 120*5fc512fbSwikidesign '</div>'.DOKU_LF; 121f0fda08aSwikidesign } 122f0fda08aSwikidesign 123f0fda08aSwikidesign} 124f0fda08aSwikidesign 125f0fda08aSwikidesign//Setup VIM: ex: et ts=4 enc=utf-8 : 126