3 * GForge Forums Facility
5 * Copyright 2002 GForge, LLC
14 By Tim Perdue, Sourceforge, 11/99
16 Massive rewrite by Tim Perdue 7/2000 (nested/views/save)
18 Complete OO rewrite by Tim Perdue 12/2002
20 Heavy RBAC changes 3/17/2004
23 require_once('pre.php');
24 require_once('www/forum/include/ForumHTML.class');
25 require_once('common/forum/Forum.class');
26 require_once('www/forum/admin/ForumAdmin.class');
27 require_once('common/forum/ForumFactory.class');
28 require_once('common/forum/ForumMessageFactory.class');
29 require_once('common/forum/ForumMessage.class');
30 require_once('common/include/TextSanitizer.class'); // to make the HTML input by the user safe to store
32 $group_id = getIntFromRequest('group_id');
33 $group_forum_id = getIntFromRequest('group_forum_id');
34 $deleteforum = getStringFromRequest('deleteforum');
35 $feedback = getStringFromRequest('feedback');
41 // Set up local objects
43 $g =& group_get_object($group_id);
44 if (!$g || !is_object($g) || $g->isError()) {
48 $p =& $g->getPermission( session_get_user() );
49 if (!$p || !is_object($p) || $p->isError()) {
50 exit_permission_denied();
53 if (getStringFromRequest('post_changes')) {
55 Update the DB to reflect the changes
62 $fa = new ForumAdmin($group_id);
63 $feedback .= $fa->ExecuteAction("delete_forum");
66 } else if (getStringFromRequest('add_forum')) {
67 if (!form_key_is_valid(getStringFromRequest('form_key'))) {
68 exit_form_double_submit();
70 $fa = new ForumAdmin($group_id);
71 $feedback .= $fa->ExecuteAction("add_forum");
72 } else if (getStringFromRequest('change_status')) {
73 $fa = new ForumAdmin($group_id);
74 $feedback .= $fa->ExecuteAction("change_status");
78 if (getStringFromRequest('add_forum')) {
80 Show the form for adding forums
82 forum_header(array('title'=>$Language->getText('forum_admin_addforum','title')));
86 <form method="post" action="'.getStringFromServer('PHP_SELF').'">
87 <input type="hidden" name="post_changes" value="y" />
88 <input type="hidden" name="add_forum" value="y" />
89 <input type="hidden" name="group_id" value="'.$group_id.'" />
90 <input type="hidden" name="form_key" value="' . form_generate_key() . '">
91 <strong>'.$Language->getText('forum_admin_addforum','forum_name').':</strong><br />
92 <input type="text" name="forum_name" value="" size="20" maxlength="30" /><br />
93 <strong>'.$Language->getText('forum_admin_addforum','forum_description').':</strong><br />
94 <input type="text" name="description" value="" size="40" maxlength="80" /><br />
95 <strong>'.$Language->getText('forum_admin_addforum','is_public').'</strong><br />
96 <input type="radio" name="is_public" value="1" checked="checked" />'.$Language->getText('general','yes').' <br />
97 <input type="radio" name="is_public" value="0" />'.$Language->getText('general','no').'
99 <strong>'.$Language->getText('forum_admin_addforum','allow_anonymous').'</strong><br />
100 <input type="radio" name="allow_anonymous" value="1" />'.$Language->getText('general','yes').'<br />
101 <input type="radio" name="allow_anonymous" value="0" checked="checked" />'.$Language->getText('general','no').'
103 html_build_select_box_from_assoc(array("0" => $Language->getText('forum_admin','moderate0') ,"1" => $Language->getText('forum_admin','moderate1'),"2" => $Language->getText('forum_admin','moderate2') ),"moderation_level",0) . '
104 <br>' . $Language->getText('forum_admin','moderate1') . ': ' . $Language->getText('forum_admin','explain_moderate1') . '<br>' . $Language->getText('forum_admin','moderate2') . ': ' . $Language->getText('forum_admin','explain_moderate2') . '<p>
106 <strong>'.$Language->getText('forum_admin_addforum','email_posts').'</strong><br />
107 <input type="text" name="send_all_posts_to" value="" size="30" maxlength="50" />
109 <input type="submit" name="submit" value="'.$Language->getText('forum_admin_addforum','add_forum').'" />
113 forum_footer(array());
115 } else if (getStringFromRequest('change_status')) {
120 $f = new Forum ($g,$group_forum_id);
121 if (!$f || !is_object($f)) {
122 exit_error('Error','Could Not Get Forum Object');
123 } elseif ($f->isError()) {
124 exit_error('Error',$f->getErrorMessage());
125 } elseif (!$f->userIsAdmin()) {
126 exit_permission_denied();
129 forum_header(array('title'=>$Language->getText('forum_admin_changestatus','change_status')));
130 echo '<p>'.$Language->getText('forum_admin_changestatus','intro').'</p>';
131 $fa = new ForumAdmin();
132 if ($fa->Authorized($group_id)) {
133 if ($fa->isForumAdmin($group_forum_id)) {
134 $fa->PrintAdminPendingOption($group_forum_id);
139 <form action="'.getStringFromServer('PHP_SELF').'" method="post">
140 <input type="hidden" name="post_changes" value="y" />
141 <input type="hidden" name="change_status" value="y" />
142 <input type="hidden" name="group_forum_id" value="'. $f->getID() .'" />
143 <input type="hidden" name="group_id" value="'.$group_id.'" />
145 <strong>'.$Language->getText('forum_admin_addforum','allow_anonymous').'</strong><br />
146 <input type="radio" name="allow_anonymous" value="1"'.(($f->AllowAnonymous() == 1)?' checked="checked"':'').' /> '.$Language->getText('general','yes').'<br />
147 <input type="radio" name="allow_anonymous" value="0"'.(($f->AllowAnonymous() == 0)?' checked="checked"':'').'/> '.$Language->getText('general','no').'<br />
150 <strong>'.$Language->getText('forum_admin_addforum','is_public').'</strong><br />
151 <input type="radio" name="is_public" value="1"'.(($f->isPublic() == 1)?' checked="checked"':'').' /> '.$Language->getText('general','yes').'<br />
152 <input type="radio" name="is_public" value="0"'.(($f->isPublic() == 0)?' checked="checked"':'').' /> '.$Language->getText('general','no').'<br />
153 <input type="radio" name="is_public" value="9"'.(($f->isPublic() == 9)?' checked="checked"':'').' />'.$Language->getText('general','deleted').'<br />
155 html_build_select_box_from_assoc(array("0" => $Language->getText('forum_admin','moderate0') ,"1" => $Language->getText('forum_admin','moderate1'),"2" => $Language->getText('forum_admin','moderate2') ),"moderation_level",$f->getModerationLevel()) . '
156 <br>' . $Language->getText('forum_admin','moderate1') . ': ' . $Language->getText('forum_admin','explain_moderate1') . '<br>' . $Language->getText('forum_admin','moderate2') . ': ' . $Language->getText('forum_admin','explain_moderate2') . '<p>
159 <strong>'.$Language->getText('forum_admin_addforum','forum_name').':</strong><br />
160 <input type="text" name="forum_name" value="'. $f->getName() .'" size="20" maxlength="30" />
162 <strong>'.$Language->getText('forum_admin_addforum','email_posts').'</strong><br />
163 <input type="text" name="send_all_posts_to" value="'. $f->getSendAllPostsTo() .'" size="30" maxlength="50" />
165 <strong>'.$Language->getText('forum_admin_addforum','forum_description').':</strong><br />
166 <input type="text" name="description" value="'. $f->getDescription() .'" size="40" maxlength="80" /><br />
168 <input type="submit" name="submit" value="'.$Language->getText('general','update').'" />
170 //echo '<a href="'.getStringFromServer('PHP_SELF').'?group_id='.$group_id.'&group_forum_id='.$group_forum_id.'&delete=1">'.$Language->getText('forum_admin','delete_message').'</a><br />';
171 echo '<a href="'.getStringFromServer('PHP_SELF').'?group_id='.$group_id.'&group_forum_id='.$group_forum_id.'&deleteforum=1">'.$Language->getText('forum_admin','delete_forum').'</a><br />';
172 forum_footer(array());
174 } elseif ($deleteforum && $group_forum_id) {
176 $f = new Forum ($g,$group_forum_id);
177 if (!$f || !is_object($f)) {
178 exit_error('Error','Could Not Get Forum Object');
179 } elseif ($f->isError()) {
180 exit_error('Error',$f->getErrorMessage());
181 } elseif (!$f->userIsAdmin()) {
182 exit_permission_denied();
184 forum_header(array('title'=>$Language->getText('forum_admin','delete')));
186 <strong>'.$Language->getText('forum_admin','delete_warning').'</strong><br />
187 <form method="post" action="'.getStringFromServer('PHP_SELF').'">
188 <input type="hidden" name="post_changes" value="y" />
189 <input type="hidden" name="deleteforum" value="y" />
190 <input type="hidden" name="group_id" value="'.$group_id.'" />
191 <input type="hidden" name="group_forum_id" value="'.$group_forum_id.'" />
192 <input type="checkbox" name="sure" value="1" />'.$Language->getText('forum_admin','sure').'<br />
193 <input type="checkbox" name="really_sure" value="1" />'.$Language->getText('forum_admin','really_sure').'<br />
194 <input type="submit" name="submit" value="'.$Language->getText('forum_admin','delete').'" />
196 forum_footer(array());
198 } elseif ( getStringFromRequest("deletemsg") ) {
199 // delete message handling
201 $fa = new ForumAdmin();
202 if ($fa->Authorized($group_id)) {
203 $forum_id = getStringFromRequest("forum_id");
204 $thread_id = getStringFromRequest("thread_id");
205 $msg_id = getStringFromRequest("deletemsg");
206 if ($fa->isForumAdmin($forum_id)) {
207 if (getStringFromRequest("ok")) {
208 //actually delete the message
209 $feedback .= $fa->ExecuteAction("delete");
210 forum_header(array('title'=>$Language->getText('forum_admin_delete_message','title')));
211 echo '<p><a href="/forum/forum.php?forum_id=' . $forum_id . '">Return to the forum</a>';
212 forum_footer(array());
213 } elseif (getStringFromRequest("cancel")) {
214 // the user cancelled the request, go back to forum
216 //if thread_id is 0, then we came from message.php. else, we came from forum.php
218 echo "window.location='/forum/message.php?msg_id=$msg_id';";
220 echo "window.location='/forum/forum.php?thread_id=$thread_id&forum_id=$forum_id';";
224 //print the delete message confirmation
225 forum_header(array('title'=>$Language->getText('forum_admin_delete_message','title')));
227 <form action="'.getStringFromServer('PHP_SELF').'" method="post">
228 <h3>' . $Language->getText('forum_admin_delete_message','warning') . '</h3><p>
229 <input type="submit" name="ok" value="' . $Language->getText('general','yes') . '">
230 <input type="submit" name="cancel" value="' . $Language->getText('general','no') . '">
231 <input type="hidden" name="deletemsg" value="'.$msg_id.'">
232 <input type="hidden" name="group_id" value="'.$group_id.'">
233 <input type="hidden" name="forum_id" value="'.$forum_id.'">
234 <input type="hidden" name="thread_id" value="'.$thread_id.'">
237 forum_footer(array());
240 exit_permission_denied();
244 if ($fa->isGroupIdError()) {
246 } elseif ($fa->isPermissionDeniedError()) {
247 exit_permission_denied();
250 } elseif (getStringFromRequest("editmsg")) {
251 // edit message handling
252 $forum_id = getStringFromRequest("forum_id");
253 $thread_id = getStringFromRequest("thread_id");
254 $msg_id = getStringFromRequest("editmsg");
255 $fa = new ForumAdmin();
256 if ($fa->Authorized($group_id)) {
257 if ($fa->isForumAdmin($forum_id)) {
258 if (getStringFromRequest("ok")) {
259 //actually finish editing the message and save the contents
260 $f = new Forum ($fa->GetGroupObject(),$forum_id);
261 if (!$f || !is_object($f)) {
262 exit_error('Error','Could Not Get Forum Object');
263 } elseif ($f->isError()) {
264 exit_error('Error',$f->getErrorMessage());
266 $fm=new ForumMessage($f,$msg_id,false,false);
267 if (!$fm || !is_object($fm)) {
268 exit_error($Language->getText('general','error'),$Language->getText('general','error_getting_new_forummessage'));
269 } elseif ($fm->isError()) {
270 exit_error($Language->getText('general','error'),$fm->getErrorMessage());
272 $subject = getStringFromRequest('subject');
273 $body = getStringFromRequest('body');
275 $sanitizer = new TextSanitizer();
276 $body = $sanitizer->SanitizeHtml($body);
278 $is_followup_to = getStringFromRequest('is_followup_to');
279 $form_key = getStringFromRequest('form_key');
280 $posted_by = getStringFromRequest('posted_by');
281 $post_date = getStringFromRequest('post_date');
282 $is_followup_to = getStringFromRequest('is_followup_to');
283 $has_followups = getStringFromRequest('has_followups');
284 $most_recent_date = getStringFromRequest('most_recent_date');
285 if ($fm->updatemsg($forum_id,$posted_by,$subject,$body,$post_date,$is_followup_to,$thread_id,$has_followups,$most_recent_date)) {
286 $feedback .= $Language->getText('forum_admin_edit_message','message_edited');
288 $feedback .= $fm->getErrorMessage();
290 forum_header(array('title'=>$Language->getText('forum_admin_edit_message','title')));
291 echo '<p><a href="/forum/forum.php?forum_id=' . $forum_id . '">Return to the forum</a>';
292 forum_footer(array());
293 } elseif (getStringFromRequest("cancel")) {
294 // the user cancelled the request, go back to forum
296 echo "window.location='/forum/message.php?msg_id=$msg_id';";
299 //print the edit message confirmation
301 $f = new Forum ($fa->GetGroupObject(),$forum_id);
302 if (!$f || !is_object($f)) {
303 exit_error('Error','Could Not Get Forum Object');
304 } elseif ($f->isError()) {
305 exit_error('Error',$f->getErrorMessage());
308 $fm=new ForumMessage($f,$msg_id,false,false);
309 if (!$fm || !is_object($fm)) {
310 exit_error($Language->getText('general','error'),$Language->getText('general','error_getting_new_forummessage'));
311 } elseif ($fm->isError()) {
312 exit_error($Language->getText('general','error'),$fm->getErrorMessage());
315 $fh = new ForumHTML($f);
316 if (!$fh || !is_object($fh)) {
317 exit_error($Language->getText('general','error'),$Language->getText('general','error_getting_newforumhtml'));
318 } elseif ($fh->isError()) {
319 exit_error($Language->getText('general','error'),$fh->getErrorMessage());
322 forum_header(array('title'=>$Language->getText('forum_admin_edit_message','title')));
323 $fh->showEditForm($fm);
324 forum_footer(array());
327 exit_permission_denied();
331 if ($fa->isGroupIdError()) {
333 } elseif ($fa->isPermissionDeniedError()) {
334 exit_permission_denied();
339 Show main page for choosing
340 either moderator or delete
342 forum_header(array('title'=>$Language->getText('forum_admin','title')));
347 if ($p->isForumAdmin()) {
348 $fa = new ForumAdmin();
349 $fa->PrintAdminOptions();
352 // Get existing forums
354 $ff=new ForumFactory($g);
355 if (!$ff || !is_object($ff) || $ff->isError()) {
356 exit_error($Language->getText('general','error'),$ff->getErrorMessage());
359 $farr =& $ff->getForums();
361 if ($ff->isError()) {
362 echo '<h1>'.$Language->getText('forum','error_no_forums_found', array($g->getPublicName())) .'</h1>';
363 echo $ff->getErrorMessage();
364 forum_footer(array());
369 List the existing forums so they can be edited.
372 for ($j = 0; $j < count($farr); $j++) {
373 if (!is_object($farr[$j])) {
374 //just skip it - this object should never have been placed here
375 } elseif ($farr[$j]->isError()) {
376 echo $farr[$j]->getErrorMessage();
378 echo '<a href="'.getStringFromServer('PHP_SELF').'?group_id='.$group_id.'&change_status=1&group_forum_id='. $farr[$j]->getID() .'">'.
379 $farr[$j]->getName() .'</a><br />'.$farr[$j]->getDescription().'<br /><a href="monitor.php?group_id='.$group_id.'&group_forum_id='. $farr[$j]->getID() .'">Monitoring Users</a><p>';
383 forum_footer(array());
388 Not logged in or insufficient privileges
393 exit_permission_denied();