bug3
[aidenligne_francais_universite.git] / fluxbb / admin_forums.php
1 <?php
2 /***********************************************************************
3
4 Copyright (C) 2002-2005 Rickard Andersson (rickard@punbb.org)
5
6 This file is part of PunBB.
7
8 PunBB is free software; you can redistribute it and/or modify it
9 under the terms of the GNU General Public License as published
10 by the Free Software Foundation; either version 2 of the License,
11 or (at your option) any later version.
12
13 PunBB is distributed in the hope that it will be useful, but
14 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.
17
18 You should have received a copy of the GNU General Public License
19 along with this program; if not, write to the Free Software
20 Foundation, Inc., 59 Temple Place, Suite 330, Boston,
21 MA 02111-1307 USA
22
23 ************************************************************************/
24
25
26 // Tell header.php to use the admin template
27 define('PUN_ADMIN_CONSOLE', 1);
28
29 define('PUN_ROOT', './');
30 require PUN_ROOT.'include/common.php';
31 require PUN_ROOT.'include/common_admin.php';
32
33
34 if ($pun_user['g_id'] > PUN_ADMIN)
35 message($lang_common['No permission']);
36
37
38 // Add a "default" forum
39 if (isset($_POST['add_forum']))
40 {
41 confirm_referrer('admin_forums.php');
42
43 $add_to_cat = intval($_POST['add_to_cat']);
44 if ($add_to_cat < 1)
45 message($lang_common['Bad request']);
46
47 $db->query('INSERT INTO '.$db->prefix.'forums (cat_id) VALUES('.$add_to_cat.')') or error('Unable to create forum', __FILE__, __LINE__, $db->error());
48
49 // Regenerate the quickjump cache
50 require_once PUN_ROOT.'include/cache.php';
51 generate_quickjump_cache();
52
53 redirect('admin_forums.php', 'Forum ajouté. Redirection ...');
54 }
55
56
57 // Delete a forum
58 else if (isset($_GET['del_forum']))
59 {
60 confirm_referrer('admin_forums.php');
61
62 $forum_id = intval($_GET['del_forum']);
63 if ($forum_id < 1)
64 message($lang_common['Bad request']);
65
66 if (isset($_POST['del_forum_comply'])) // Delete a forum with all posts
67 {
68 @set_time_limit(0);
69
70 // Prune all posts and topics
71 prune($forum_id, 1, -1);
72
73 // Locate any "orphaned redirect topics" and delete them
74 $result = $db->query('SELECT t1.id FROM '.$db->prefix.'topics AS t1 LEFT JOIN '.$db->prefix.'topics AS t2 ON t1.moved_to=t2.id WHERE t2.id IS NULL AND t1.moved_to IS NOT NULL') or error('Unable to fetch redirect topics', __FILE__, __LINE__, $db->error());
75 $num_orphans = $db->num_rows($result);
76
77 if ($num_orphans)
78 {
79 for ($i = 0; $i < $num_orphans; ++$i)
80 $orphans[] = $db->result($result, $i);
81
82 $db->query('DELETE FROM '.$db->prefix.'topics WHERE id IN('.implode(',', $orphans).')') or error('Unable to delete redirect topics', __FILE__, __LINE__, $db->error());
83 }
84
85 // Delete the forum and any forum specific group permissions
86 $db->query('DELETE FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to delete forum', __FILE__, __LINE__, $db->error());
87 $db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
88
89 // Regenerate the quickjump cache
90 require_once PUN_ROOT.'include/cache.php';
91 generate_quickjump_cache();
92
93 redirect('admin_forums.php', 'Forum supprimé. Redirection ...');
94 }
95 else // If the user hasn't confirmed the delete
96 {
97 $result = $db->query('SELECT forum_name FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
98 $forum_name = pun_htmlspecialchars($db->result($result));
99
100
101 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Forums';
102 require PUN_ROOT.'header.php';
103
104 generate_admin_menu('forums');
105
106 ?>
107 <div class="blockform">
108 <h2><span>Confirmez la suppresion du forum</span></h2>
109 <div class="box">
110 <form method="post" action="admin_forums.php?del_forum=<?php echo $forum_id ?>">
111 <div class="inform">
112 <fieldset>
113 <legend>Important ! Lire attentivement avant de procéder à la suppression.</legend>
114 <div class="infldset">
115 <p>Êtes vous sûr de vouloir supprimer le forum "<?php echo $forum_name ?>"&nbsp;?</p>
116 <p>ATTENTION ! Supprimer un forum effacera tous les messages (s'il y en a) présent dans ce forum&nbsp;!</p>
117 </div>
118 </fieldset>
119 </div>
120 <p><input type="submit" name="del_forum_comply" value=" Supprimer " /><a href="javascript:history.go(-1)">Retour</a></p>
121 </form>
122 </div>
123 </div>
124 <div class="clearer"></div>
125 </div>
126 <?php
127
128 require PUN_ROOT.'footer.php';
129 }
130 }
131
132
133 // Update forum positions
134 else if (isset($_POST['update_positions']))
135 {
136 confirm_referrer('admin_forums.php');
137
138 while (list($forum_id, $disp_position) = @each($_POST['position']))
139 {
140 if (!@preg_match('#^\d+$#', $disp_position))
141 message('La position doit être un nombre entier.');
142
143 $db->query('UPDATE '.$db->prefix.'forums SET disp_position='.$disp_position.' WHERE id='.intval($forum_id)) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
144 }
145
146 // Regenerate the quickjump cache
147 require_once PUN_ROOT.'include/cache.php';
148 generate_quickjump_cache();
149
150 redirect('admin_forums.php', 'Forums modifiés. Redirection ...');
151 }
152
153
154 else if (isset($_GET['edit_forum']))
155 {
156 $forum_id = intval($_GET['edit_forum']);
157 if ($forum_id < 1)
158 message($lang_common['Bad request']);
159
160 // Update group permissions for $forum_id
161 if (isset($_POST['save']))
162 {
163 confirm_referrer('admin_forums.php');
164
165 // Start with the forum details
166 $forum_name = trim($_POST['forum_name']);
167 $forum_desc = pun_linebreaks(trim($_POST['forum_desc']));
168 $cat_id = intval($_POST['cat_id']);
169 $sort_by = intval($_POST['sort_by']);
170 $redirect_url = isset($_POST['redirect_url']) ? trim($_POST['redirect_url']) : null;
171
172 if ($forum_name == '')
173 message('Vous devez saisir un nom de forum.');
174
175 if ($cat_id < 1)
176 message($lang_common['Bad request']);
177
178 $forum_desc = ($forum_desc != '') ? '\''.$db->escape($forum_desc).'\'' : 'NULL';
179 $redirect_url = ($redirect_url != '') ? '\''.$db->escape($redirect_url).'\'' : 'NULL';
180
181 $db->query('UPDATE '.$db->prefix.'forums SET forum_name=\''.$db->escape($forum_name).'\', forum_desc='.$forum_desc.', redirect_url='.$redirect_url.', sort_by='.$sort_by.', cat_id='.$cat_id.' WHERE id='.$forum_id) or error('Unable to update forum', __FILE__, __LINE__, $db->error());
182
183 // Now let's deal with the permissions
184 if (isset($_POST['read_forum_old']))
185 {
186 $result = $db->query('SELECT g_id, g_read_board, g_post_replies, g_post_topics FROM '.$db->prefix.'groups WHERE g_id!='.PUN_ADMIN) or error('Unable to fetch user group list', __FILE__, __LINE__, $db->error());
187 while ($cur_group = $db->fetch_assoc($result))
188 {
189 $read_forum_new = ($cur_group['g_read_board'] == '1') ? isset($_POST['read_forum_new'][$cur_group['g_id']]) ? '1' : '0' : intval($_POST['read_forum_old'][$cur_group['g_id']]);
190 $post_replies_new = isset($_POST['post_replies_new'][$cur_group['g_id']]) ? '1' : '0';
191 $post_topics_new = isset($_POST['post_topics_new'][$cur_group['g_id']]) ? '1' : '0';
192
193 // Check if the new settings differ from the old
194 if ($read_forum_new != $_POST['read_forum_old'][$cur_group['g_id']] || $post_replies_new != $_POST['post_replies_old'][$cur_group['g_id']] || $post_topics_new != $_POST['post_topics_old'][$cur_group['g_id']])
195 {
196 // If the new settings are identical to the default settings for this group, delete it's row in forum_perms
197 if ($read_forum_new == '1' && $post_replies_new == $cur_group['g_post_replies'] && $post_topics_new == $cur_group['g_post_topics'])
198 $db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE group_id='.$cur_group['g_id'].' AND forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
199 else
200 {
201 // Run an UPDATE and see if it affected a row, if not, INSERT
202 $db->query('UPDATE '.$db->prefix.'forum_perms SET read_forum='.$read_forum_new.', post_replies='.$post_replies_new.', post_topics='.$post_topics_new.' WHERE group_id='.$cur_group['g_id'].' AND forum_id='.$forum_id) or error('Unable to insert group forum permissions', __FILE__, __LINE__, $db->error());
203 if (!$db->affected_rows())
204 $db->query('INSERT INTO '.$db->prefix.'forum_perms (group_id, forum_id, read_forum, post_replies, post_topics) VALUES('.$cur_group['g_id'].', '.$forum_id.', '.$read_forum_new.', '.$post_replies_new.', '.$post_topics_new.')') or error('Unable to insert group forum permissions', __FILE__, __LINE__, $db->error());
205 }
206 }
207 }
208 }
209
210 // Regenerate the quickjump cache
211 require_once PUN_ROOT.'include/cache.php';
212 generate_quickjump_cache();
213
214 redirect('admin_forums.php', 'Forum modifié. Redirection ...');
215 }
216 else if (isset($_POST['revert_perms']))
217 {
218 confirm_referrer('admin_forums.php');
219
220 $db->query('DELETE FROM '.$db->prefix.'forum_perms WHERE forum_id='.$forum_id) or error('Unable to delete group forum permissions', __FILE__, __LINE__, $db->error());
221
222 // Regenerate the quickjump cache
223 require_once PUN_ROOT.'include/cache.php';
224 generate_quickjump_cache();
225
226 redirect('admin_forums.php?edit_forum='.$forum_id, 'Permissions remises à leurs valeurs par défaut. Redirection ...');
227 }
228
229
230 // Fetch forum info
231 $result = $db->query('SELECT id, forum_name, forum_desc, redirect_url, num_topics, sort_by, cat_id FROM '.$db->prefix.'forums WHERE id='.$forum_id) or error('Unable to fetch forum info', __FILE__, __LINE__, $db->error());
232 if (!$db->num_rows($result))
233 message($lang_common['Bad request']);
234
235 $cur_forum = $db->fetch_assoc($result);
236
237
238 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Forums';
239 require PUN_ROOT.'header.php';
240
241 generate_admin_menu('forums');
242
243 ?>
244 <div class="blockform">
245 <h2><span>Modifier forum</span></h2>
246 <div class="box">
247 <form id="edit_forum" method="post" action="admin_forums.php?edit_forum=<?php echo $forum_id ?>">
248 <p class="submittop"><input type="submit" name="save" value=" Enregistrer modifications " tabindex="6" /></p>
249 <div class="inform">
250 <fieldset>
251 <legend>Modifier les détails du forum</legend>
252 <div class="infldset">
253 <table class="aligntop" cellspacing="0">
254 <tr>
255 <th scope="row">Nom du forum</th>
256 <td><input type="text" name="forum_name" size="35" maxlength="80" value="<?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?>" tabindex="1" /></td>
257 </tr>
258 <tr>
259 <th scope="row">Description (<acronym title="HyperText Markup Language" lang="en">HTML</acronym>)</th>
260 <td><textarea name="forum_desc" rows="3" cols="50" tabindex="2"><?php echo pun_htmlspecialchars($cur_forum['forum_desc']) ?></textarea></td>
261 </tr>
262 <tr>
263 <th scope="row">Catégorie</th>
264 <td>
265 <select name="cat_id" tabindex="3">
266 <?php
267
268 $result = $db->query('SELECT id, cat_name FROM '.$db->prefix.'categories ORDER BY disp_position') or error('Unable to fetch category list', __FILE__, __LINE__, $db->error());
269 while ($cur_cat = $db->fetch_assoc($result))
270 {
271 $selected = ($cur_cat['id'] == $cur_forum['cat_id']) ? ' selected="selected"' : '';
272 echo "\t\t\t\t\t\t\t\t\t\t\t".'<option value="'.$cur_cat['id'].'"'.$selected.'>'.pun_htmlspecialchars($cur_cat['cat_name']).'</option>'."\n";
273 }
274
275 ?>
276 </select>
277 </td>
278 </tr>
279 <tr>
280 <th scope="row">Trier les discussions par</th>
281 <td>
282 <select name="sort_by" tabindex="4">
283 <option value="0"<?php if ($cur_forum['sort_by'] == '0') echo ' selected="selected"' ?>>Derniers messages</option>
284 <option value="1"<?php if ($cur_forum['sort_by'] == '1') echo ' selected="selected"' ?>>Dates des discussions</option>
285 </select>
286 </td>
287 </tr>
288 <tr>
289 <th scope="row"><acronym title="Uniform Resource Locator" lang="en">URL</acronym> de redirection</th>
290 <td><?php echo ($cur_forum['num_topics']) ? 'Disponible uniquement pour les forums vides' : '<input type="text" name="redirect_url" size="45" maxlength="100" value="'.pun_htmlspecialchars($cur_forum['redirect_url']).'" tabindex="5" />'; ?></td>
291 </tr>
292 </table>
293 </div>
294 </fieldset>
295 </div>
296 <div class="inform">
297 <fieldset>
298 <legend>Modifier les permissions de groupes de ce forum</legend>
299 <div class="infldset">
300 <p>Avec ce formulaire vous pouvez régler les permissions de ce forum spécifiques aux différents groupes d'utilisateurs. Si vous n'avez effectué aucune modification à ces permissions de groupes, ce que vous voyez ci-dessous sont les permissions par défaut basées sur les paramètres des <a href="admin_groups.php">Groupes d'utilisateurs</a>. Les administrateurs ont toujours toutes les permissions et sont donc écartés. Les paramètres de permission qui diffèrent des permissions par défaut pour le groupe d'utilisateur sont signalés en rouge. La permission «&nbsp;Lire&nbsp;» pourra être désactivée si le groupe en question ne possède pas la permission globale «&nbsp;Lire forums&nbsp;». Pour les forums de redirection seule la permission «&nbsp;Lire&nbsp;» est modifiable.</p>
301 <table id="forumperms" cellspacing="0">
302 <thead>
303 <tr>
304 <th class="atcl">&nbsp;</th>
305 <th>Lire le forum</th>
306 <th>Écrire des réponses</th>
307 <th>Lancer des discussions</th>
308 </tr>
309 </thead>
310 <tbody>
311 <?php
312
313 $result = $db->query('SELECT g.g_id, g.g_title, g.g_read_board, g.g_post_replies, g.g_post_topics, fp.read_forum, fp.post_replies, fp.post_topics FROM '.$db->prefix.'groups AS g LEFT JOIN '.$db->prefix.'forum_perms AS fp ON (g.g_id=fp.group_id AND fp.forum_id='.$forum_id.') WHERE g.g_id!='.PUN_ADMIN.' ORDER BY g.g_id') or error('Unable to fetch group forum permission list', __FILE__, __LINE__, $db->error());
314
315 while ($cur_perm = $db->fetch_assoc($result))
316 {
317 $read_forum = ($cur_perm['read_forum'] != '0') ? true : false;
318 $post_replies = (($cur_perm['g_post_replies'] == '0' && $cur_perm['post_replies'] == '1') || ($cur_perm['g_post_replies'] == '1' && $cur_perm['post_replies'] != '0')) ? true : false;
319 $post_topics = (($cur_perm['g_post_topics'] == '0' && $cur_perm['post_topics'] == '1') || ($cur_perm['g_post_topics'] == '1' && $cur_perm['post_topics'] != '0')) ? true : false;
320
321 // Determine if the current sittings differ from the default or not
322 $read_forum_def = ($cur_perm['read_forum'] == '0') ? false : true;
323 $post_replies_def = (($post_replies && $cur_perm['g_post_replies'] == '0') || (!$post_replies && ($cur_perm['g_post_replies'] == '' || $cur_perm['g_post_replies'] == '1'))) ? false : true;
324 $post_topics_def = (($post_topics && $cur_perm['g_post_topics'] == '0') || (!$post_topics && ($cur_perm['g_post_topics'] == '' || $cur_perm['g_post_topics'] == '1'))) ? false : true;
325
326 ?>
327 <tr>
328 <th class="atcl"><?php echo pun_htmlspecialchars($cur_perm['g_title']) ?></th>
329 <td<?php if (!$read_forum_def) echo ' class="nodefault"'; ?>>
330 <input type="hidden" name="read_forum_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($read_forum) ? '1' : '0'; ?>" />
331 <input type="checkbox" name="read_forum_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($read_forum) ? ' checked="checked"' : ''; ?><?php echo ($cur_perm['g_read_board'] == '0') ? ' disabled="disabled"' : ''; ?> />
332 </td>
333 <td<?php if (!$post_replies_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>
334 <input type="hidden" name="post_replies_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_replies) ? '1' : '0'; ?>" />
335 <input type="checkbox" name="post_replies_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_replies) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> />
336 </td>
337 <td<?php if (!$post_topics_def && $cur_forum['redirect_url'] == '') echo ' class="nodefault"'; ?>>
338 <input type="hidden" name="post_topics_old[<?php echo $cur_perm['g_id'] ?>]" value="<?php echo ($post_topics) ? '1' : '0'; ?>" />
339 <input type="checkbox" name="post_topics_new[<?php echo $cur_perm['g_id'] ?>]" value="1"<?php echo ($post_topics) ? ' checked="checked"' : ''; ?><?php echo ($cur_forum['redirect_url'] != '') ? ' disabled="disabled"' : ''; ?> />
340 </td>
341 </tr>
342 <?php
343
344 }
345
346 ?>
347 </tbody>
348 </table>
349 <div class="fsetsubmit"><input type="submit" name="revert_perms" value=" Rétablir les permissions par défaut " /></div>
350 </div>
351 </fieldset>
352 </div>
353 <p class="submitend"><input type="submit" name="save" value=" Enregistrer modifications " /></p>
354 </form>
355 </div>
356 </div>
357 <div class="clearer"></div>
358 </div>
359
360 <?php
361
362 require PUN_ROOT.'footer.php';
363 }
364
365
366 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Forums';
367 require PUN_ROOT.'header.php';
368
369 generate_admin_menu('forums');
370
371 ?>
372 <div class="blockform">
373 <h2><span>Ajouter forum</span></h2>
374 <div class="box">
375 <form method="post" action="admin_forums.php?action=adddel">
376 <div class="inform">
377 <fieldset>
378 <legend>Créer un forum</legend>
379 <div class="infldset">
380 <table class="aligntop" cellspacing="0">
381 <tr>
382 <th scope="row">Ajouter un forum à la catégorie<div><input type="submit" name="add_forum" value=" Ajouter " tabindex="2" /></div></th>
383 <td>
384 <select name="add_to_cat" tabindex="1">
385 <?php
386
387 $result = $db->query('SELECT id, cat_name FROM '.$db->prefix.'categories ORDER BY disp_position') or error('Unable to fetch category list', __FILE__, __LINE__, $db->error());
388 if ($db->num_rows($result) > 0)
389 {
390 while ($cur_cat = $db->fetch_assoc($result))
391 echo "\t\t\t\t\t\t\t\t\t".'<option value="'.$cur_cat['id'].'">'.pun_htmlspecialchars($cur_cat['cat_name']).'</option>'."\n";
392 }
393 else
394 echo "\t\t\t\t\t\t\t\t\t".'<option value="0" disabled="disabled">No categories exist</option>'."\n";
395
396 ?>
397 </select>
398 <span>Choisissez la catégorie dans laquelle vous souhaitez ajouter un nouveau forum.</span>
399 </td>
400 </tr>
401 </table>
402 </div>
403 </fieldset>
404 </div>
405 </form>
406 </div>
407 <?php
408
409 // Display all the categories and forums
410 $result = $db->query('SELECT c.id AS cid, c.cat_name, f.id AS fid, f.forum_name, f.disp_position FROM '.$db->prefix.'categories AS c INNER JOIN '.$db->prefix.'forums AS f ON c.id=f.cat_id ORDER BY c.disp_position, c.id, f.disp_position') or error('Unable to fetch category/forum list', __FILE__, __LINE__, $db->error());
411
412 if ($db->num_rows($result) > 0)
413 {
414
415 ?>
416 <h2 class="block2"><span>Modifier les forums</span></h2>
417 <div class="box">
418 <form id="edforum" method="post" action="admin_forums.php?action=edit">
419 <p class="submittop"><input type="submit" name="update_positions" value=" Modifier positions " tabindex="3" /></p>
420 <?php
421
422 $tabindex_count = 4;
423
424 $cur_category = 0;
425 while ($cur_forum = $db->fetch_assoc($result))
426 {
427 if ($cur_forum['cid'] != $cur_category) // A new category since last iteration?
428 {
429 if ($cur_category != 0)
430 echo "\t\t\t\t\t\t\t".'</table>'."\n\t\t\t\t\t\t".'</div>'."\n\t\t\t\t\t".'</fieldset>'."\n\t\t\t\t".'</div>'."\n";
431
432 ?>
433 <div class="inform">
434 <fieldset>
435 <legend>Catégorie&nbsp;: <?php echo pun_htmlspecialchars($cur_forum['cat_name']) ?></legend>
436 <div class="infldset">
437 <table cellspacing="0">
438 <?php
439
440 $cur_category = $cur_forum['cid'];
441 }
442
443 ?>
444 <tr>
445 <th><a href="admin_forums.php?edit_forum=<?php echo $cur_forum['fid'] ?>">Modifier</a> - <a href="admin_forums.php?del_forum=<?php echo $cur_forum['fid'] ?>">Supprimer</a></th>
446 <td>Position&nbsp;&nbsp;<input type="text" name="position[<?php echo $cur_forum['fid'] ?>]" size="3" maxlength="3" value="<?php echo $cur_forum['disp_position'] ?>" tabindex="<?php echo $tabindex_count ?>" />
447 &nbsp;&nbsp;<strong><?php echo pun_htmlspecialchars($cur_forum['forum_name']) ?></strong></td>
448 </tr>
449 <?php
450
451 $tabindex_count += 2;
452 }
453
454 ?>
455 </table>
456 </div>
457 </fieldset>
458 </div>
459 <p class="submitend"><input type="submit" name="update_positions" value=" Modifier positions " tabindex="<?php echo $tabindex_count ?>" /></p>
460 </form>
461 </div>
462 <?php
463
464 }
465
466 ?>
467 </div>
468 <div class="clearer"></div>
469 </div>
470 <?php
471
472 require PUN_ROOT.'footer.php';