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 125fc512fbSwikidesignif (!defined('DOKU_LF')) define('DOKU_LF', "\n"); 135fc512fbSwikidesignif (!defined('DOKU_TAB')) define('DOKU_TAB', "\t"); 14f0fda08aSwikidesignif (!defined('DOKU_PLUGIN')) define('DOKU_PLUGIN', DOKU_INC.'lib/plugins/'); 155fc512fbSwikidesign 16f0fda08aSwikidesignrequire_once(DOKU_PLUGIN.'syntax.php'); 17f0fda08aSwikidesign 18f0fda08aSwikidesignclass syntax_plugin_discussion_threads extends DokuWiki_Syntax_Plugin { 19f0fda08aSwikidesign 20f0fda08aSwikidesign function getInfo(){ 21f0fda08aSwikidesign return array( 22*4c4d91c6SGina Haeussge 'author' => 'Gina Häußge, Michael Klier, Esther Brunner', 23*4c4d91c6SGina Haeussge 'email' => 'dokuwiki@chimeric.de', 24e2c227dfSwikidesign 'date' => '2007-01-16', 25f0fda08aSwikidesign 'name' => 'Discussion Plugin (threads component)', 26f0fda08aSwikidesign 'desc' => 'Displays a list of recently active discussions', 27*4c4d91c6SGina Haeussge 'url' => 'http://wiki.splitbrain.org/plugin:discussion', 28f0fda08aSwikidesign ); 29f0fda08aSwikidesign } 30f0fda08aSwikidesign 31f0fda08aSwikidesign function getType(){ return 'substition'; } 32f0fda08aSwikidesign function getPType(){ return 'block'; } 33f0fda08aSwikidesign function getSort(){ return 306; } 345fc512fbSwikidesign 355fc512fbSwikidesign function connectTo($mode){ 365fc512fbSwikidesign $this->Lexer->addSpecialPattern('\{\{threads>.+?\}\}', $mode, 'plugin_discussion_threads'); 375fc512fbSwikidesign } 38f0fda08aSwikidesign 39f0fda08aSwikidesign function handle($match, $state, $pos, &$handler){ 40f0fda08aSwikidesign global $ID; 41f5b180ccSwikidesign 420e0effa1Swikidesign $match = substr($match, 10, -2); // strip {{threads> from start and }} from end 43e2c227dfSwikidesign list($match, $flags) = explode('&', $match, 2); 440e0effa1Swikidesign $flags = explode('&', $flags); 45e2c227dfSwikidesign list($ns, $refine) = explode(' ', $match, 2); 46f0fda08aSwikidesign 475fc512fbSwikidesign if (($ns == '*') || ($ns == ':')) $ns = ''; 48f0fda08aSwikidesign elseif ($ns == '.') $ns = getNS($ID); 49f5b180ccSwikidesign else $ns = cleanID($ns); 50f0fda08aSwikidesign 51e2c227dfSwikidesign return array($ns, $flags, $refine); 52f5b180ccSwikidesign } 53f5b180ccSwikidesign 540e0effa1Swikidesign function render($mode, &$renderer, $data){ 55e2c227dfSwikidesign list($ns, $flags, $refine) = $data; 560e0effa1Swikidesign 575fc512fbSwikidesign if ($my =& plugin_load('helper', 'discussion')) $pages = $my->getThreads($ns); 58e2c227dfSwikidesign 59e2c227dfSwikidesign // use tag refinements? 60e2c227dfSwikidesign if ($refine){ 61e2c227dfSwikidesign if (plugin_isdisabled('tag') || (!$tag = plugin_load('helper', 'tag'))){ 62e2c227dfSwikidesign msg('The Tag Plugin must be installed to use tag refinements.', -1); 63e2c227dfSwikidesign } else { 64e2c227dfSwikidesign $pages = $tag->tagRefine($pages, $refine); 65e2c227dfSwikidesign } 66e2c227dfSwikidesign } 67e2c227dfSwikidesign 6881cc6d2cSwikidesign if (!$pages){ 6977f39d56Swikidesign if ((auth_quickaclcheck($ns.':*') >= AUTH_CREATE) && ($mode == 'xhtml')){ 7077f39d56Swikidesign $renderer->info['cache'] = false; 7181cc6d2cSwikidesign $renderer->doc .= $this->_newThreadForm($ns); 7277f39d56Swikidesign } 7381cc6d2cSwikidesign return true; // nothing to display 7481cc6d2cSwikidesign } 75f0fda08aSwikidesign 76f0fda08aSwikidesign if ($mode == 'xhtml'){ 77f0fda08aSwikidesign 78f0fda08aSwikidesign // prevent caching to ensure content is always fresh 79f0fda08aSwikidesign $renderer->info['cache'] = false; 80f0fda08aSwikidesign 81cc497149Swikidesign // show form to start a new discussion thread? 82cc497149Swikidesign $perm_create = (auth_quickaclcheck($ns.':*') >= AUTH_CREATE); 83e2a53e8cSwikidesign if ($perm_create && ($this->getConf('threads_formposition') == 'top')) 84cc497149Swikidesign $renderer->doc .= $this->_newThreadForm($ns); 85cc497149Swikidesign 865fc512fbSwikidesign // let Pagelist Plugin do the work for us 87fa4ae107Swikidesign if (plugin_isdisabled('pagelist') 88fa4ae107Swikidesign || (!$pagelist =& plugin_load('helper', 'pagelist'))){ 895fc512fbSwikidesign msg('The Pagelist Plugin must be installed for threads lists to work.', -1); 905fc512fbSwikidesign return false; 915fc512fbSwikidesign } 92fbb94835Swikidesign $pagelist->column['comments'] = true; 930e0effa1Swikidesign $pagelist->setFlags($flags); 945fc512fbSwikidesign $pagelist->startList(); 95f0fda08aSwikidesign foreach ($pages as $page){ 965fc512fbSwikidesign $pagelist->addPage($page); 977a292a0dSwikidesign } 985fc512fbSwikidesign $renderer->doc .= $pagelist->finishList(); 99f0fda08aSwikidesign 100f0fda08aSwikidesign // show form to start a new discussion thread? 101e2a53e8cSwikidesign if ($perm_create && ($this->getConf('threads_formposition') == 'bottom')) 102cc497149Swikidesign $renderer->doc .= $this->_newThreadForm($ns); 103f0fda08aSwikidesign 104f0fda08aSwikidesign return true; 105f0fda08aSwikidesign 106f0fda08aSwikidesign // for metadata renderer 107f0fda08aSwikidesign } elseif ($mode == 'metadata'){ 108f0fda08aSwikidesign foreach ($pages as $page){ 1095fc512fbSwikidesign $renderer->meta['relation']['references'][$page['id']] = true; 110f0fda08aSwikidesign } 111f0fda08aSwikidesign 112f0fda08aSwikidesign return true; 113f0fda08aSwikidesign } 114f0fda08aSwikidesign return false; 115f0fda08aSwikidesign } 116f0fda08aSwikidesign 1175fc512fbSwikidesign/* ---------- (X)HTML Output Functions ---------- */ 118f0fda08aSwikidesign 119f0fda08aSwikidesign /** 120f0fda08aSwikidesign * Show the form to start a new discussion thread 121f0fda08aSwikidesign */ 122cc497149Swikidesign function _newThreadForm($ns){ 123f0fda08aSwikidesign global $ID; 124f0fda08aSwikidesign global $lang; 125f0fda08aSwikidesign 1265fc512fbSwikidesign return '<div class="newthread_form">'.DOKU_LF. 1275fc512fbSwikidesign '<form id="discussion__newthread_form" method="post" action="'.script().'" accept-charset="'.$lang['encoding'].'">'.DOKU_LF. 1285fc512fbSwikidesign DOKU_TAB.'<fieldset>'.DOKU_LF. 12981cc6d2cSwikidesign DOKU_TAB.DOKU_TAB.'<legend> '.$this->getLang('newthread').': </legend>'.DOKU_LF. 1305fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input type="hidden" name="id" value="'.$ID.'" />'.DOKU_LF. 1315fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input type="hidden" name="do" value="newthread" />'.DOKU_LF. 1325fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input type="hidden" name="ns" value="'.$ns.'" />'.DOKU_LF. 1335fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input class="edit" type="text" name="title" id="discussion__newthread_title" size="40" tabindex="1" />'.DOKU_LF. 1345fc512fbSwikidesign DOKU_TAB.DOKU_TAB.'<input class="button" type="submit" value="'.$lang['btn_create'].'" tabindex="2" />'.DOKU_LF. 1355fc512fbSwikidesign DOKU_TAB.'</fieldset>'.DOKU_LF. 1365fc512fbSwikidesign '</form>'.DOKU_LF. 1375fc512fbSwikidesign '</div>'.DOKU_LF; 138f0fda08aSwikidesign } 139f0fda08aSwikidesign 140f0fda08aSwikidesign} 141f0fda08aSwikidesign 142f0fda08aSwikidesign//Setup VIM: ex: et ts=4 enc=utf-8 : 143