4 * Copyright 2004 $ThePhpWikiProgrammingTeam
6 * This file is part of PhpWiki.
8 * PhpWiki is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2 of the License, or
11 * (at your option) any later version.
13 * PhpWiki is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
18 * You should have received a copy of the GNU General Public License
19 * along with PhpWiki; if not, write to the Free Software
20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 * This plugin handles a threaded list of comments/news associated with a
25 * particular page (one page per topic) and provides an input form for
26 * adding a new message.
28 * <?plugin WikiForum ?>
30 * To provide information for the MainForum page (CategoryForum)
31 * summary output mode is possible.
33 * <?plugin WikiForum page=SubTopic1 mode=summary info=title,numposts,ctime,author ?>
34 * <?plugin WikiForum page=SubTopic2 mode=summary info=title,numposts,ctime,author ?>
36 * TODO: For admin user, put checkboxes beside comments to allow for bulk removal.
37 * threaded identation for level of reply
38 * (probably no date, just index as pagetitle)
39 * reply link from within message (?mode=add)
41 * pagetype: header: link to parent, no redirects,
43 * @author: Reini Urban
46 include_once("lib/plugin/WikiBlog.php");
48 class WikiPlugin_WikiForum
49 extends WikiPlugin_WikiBlog
52 return _("WikiForum");
55 function getDescription () {
56 return _("Handles threaded topics with comments/news and provide a input form");
59 function getVersion() {
60 return preg_replace("/[Revision: $]/", '',
64 function getDefaultArguments() {
65 return array('pagename' => '[pagename]',
66 'order' => 'normal', // oldest first
67 'mode' => 'show,add', // 'summary',
73 function run($dbi, $argstr, &$request, $basepage) {
74 $args = $this->getArgs($argstr, $request);
75 if (!$args['pagename'])
76 return $this->error(_("No pagename specified"));
79 $forum = $request->getArg('forum');
80 $request->setArg('forum', false);
82 if ($request->isPost() and !empty($forum['add'])) {
83 return $this->add($request, $forum, 'wikiforum');
86 // Now we display previous comments and/or provide entry box
89 foreach (explode(',', $args['mode']) as $show) {
90 if (!empty($seen[$show]))
95 case 'summary': // main page: list of all titles
96 $html->pushContent($this->showTopics($request, $args));
98 case 'show': // list of all contents
99 $html->pushContent($this->showAll($request, $args, 'wikiforum'));
101 case 'add': // add to or create a new thread
102 $html->pushContent($this->showForm($request, $args, 'forumadd'));
105 return $this->error(sprintf("Bad mode ('%s')", $show));
108 // FIXME: on empty showTopics() and mode!=add and mode!=summary provide a showForm() here.
112 // Table of titles(subpages) without content
113 // TODO: use $args['info']
114 function showTopics($request, $args) {
117 $dbi = $request->getDbh();
118 $topics = $this->findBlogs($dbi, $args['pagename'], 'wikiforum');
119 $html = HTML::table(array('border'=>0));
120 $row = HTML::tr(HTML::th('title'),
121 HTML::th('last post'),
123 $html->pushContent($row);
124 foreach ($topics as $rev) {
125 //TODO: get numposts, number of replies
126 $meta = $rev->get('wikiforum');
127 // format as list, not as wikiforum content
128 $page = new WikiPageName($rev,$args['pagename']);
129 $row = HTML::tr(HTML::td(WikiLink($page,'if_known',$rev->get('summary'))),
130 HTML::td($WikiTheme->formatDateTime($meta['ctime'])),
131 HTML::td(WikiLink($meta['creator'],'if_known')));
132 $html->pushContent($row);
143 // c-hanging-comment-ender-p: nil
144 // indent-tabs-mode: nil