bug3
[aidenligne_francais_universite.git] / fluxbb / admin_bans.php
CommitLineData
c495c100
P
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
27define('PUN_ADMIN_CONSOLE', 1);
28
29define('PUN_ROOT', './');
30require PUN_ROOT.'include/common.php';
31require PUN_ROOT.'include/common_admin.php';
32
33
34if ($pun_user['g_id'] > PUN_MOD || ($pun_user['g_id'] == PUN_MOD && $pun_config['p_mod_ban_users'] == '0'))
35 message($lang_common['No permission']);
36
37
38// Add/edit a ban (stage 1)
39if (isset($_REQUEST['add_ban']) || isset($_GET['edit_ban']))
40{
41 if (isset($_GET['add_ban']) || isset($_POST['add_ban']))
42 {
43 // If the id of the user to ban was provided through GET (a link from profile.php)
44 if (isset($_GET['add_ban']))
45 {
46 $add_ban = intval($_GET['add_ban']);
47 if ($add_ban < 2)
48 message($lang_common['Bad request']);
49
50 $user_id = $add_ban;
51
52 $result = $db->query('SELECT group_id, username, email FROM '.$db->prefix.'users WHERE id='.$user_id) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
53 if ($db->num_rows($result))
54 list($group_id, $ban_user, $ban_email) = $db->fetch_row($result);
55 else
56 message('Aucun utilisateur enregistré sous cet identifiant (ID).');
57 }
58 else // Otherwise the username is in POST
59 {
60 $ban_user = trim($_POST['new_ban_user']);
61
62 if ($ban_user != '')
63 {
64 $result = $db->query('SELECT id, group_id, username, email FROM '.$db->prefix.'users WHERE username=\''.$db->escape($ban_user).'\' AND id>1') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error());
65 if ($db->num_rows($result))
66 list($user_id, $group_id, $ban_user, $ban_email) = $db->fetch_row($result);
67 else
68 message('Aucun utilisateur enregistré sous ce nom d\'utilisateur. Si vous souhaitez ajouter un bannissement qui ne soit pas lié à un nom d\'utilisateur particulier, laissez la case vide.');
69 }
70 }
71
72 // Make sure we're not banning an admin
73 if (isset($group_id) && $group_id == PUN_ADMIN)
74 message('L\'utilisateur '.pun_htmlspecialchars($ban_user).' est un administrateur, il ne peut être bannis. Si vous souhaitez bannir un administrateur, vous devez d\'abord le rétrograder soit modérateur soit utilisateur.');
75
76 // If we have a $user_id, we can try to find the last known IP of that user
77 if (isset($user_id))
78 {
79 $result = $db->query('SELECT poster_ip FROM '.$db->prefix.'posts WHERE poster_id='.$user_id.' ORDER BY posted DESC LIMIT 1') or error('Unable to fetch post info', __FILE__, __LINE__, $db->error());
80 $ban_ip = ($db->num_rows($result)) ? $db->result($result) : '';
81 }
82
83 $mode = 'add';
84 }
85 else // We are editing a ban
86 {
87 $ban_id = intval($_GET['edit_ban']);
88 if ($ban_id < 1)
89 message($lang_common['Bad request']);
90
91 $result = $db->query('SELECT username, ip, email, message, expire FROM '.$db->prefix.'bans WHERE id='.$ban_id) or error('Unable to fetch ban info', __FILE__, __LINE__, $db->error());
92 if ($db->num_rows($result))
93 list($ban_user, $ban_ip, $ban_email, $ban_message, $ban_expire) = $db->fetch_row($result);
94 else
95 message($lang_common['Bad request']);
96
97 $ban_expire = ($ban_expire != '') ? date('Y-m-d', $ban_expire) : '';
98
99 $mode = 'edit';
100 }
101
102 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Bannissements';
103 $focus_element = array('bans2', 'ban_user');
104 require PUN_ROOT.'header.php';
105
106 generate_admin_menu('bans');
107
108
109?>
110 <div class="blockform">
111 <h2><span>Réglages de bannissement avancés</span></h2>
112 <div class="box">
113 <form id="bans2" method="post" action="admin_bans.php">
114 <div class="inform">
115 <input type="hidden" name="mode" value="<?php echo $mode ?>" />
116<?php if ($mode == 'edit'): ?> <input type="hidden" name="ban_id" value="<?php echo $ban_id ?>" />
117<?php endif; ?> <fieldset>
118 <legend>Bannissement supplémentaire avec <acronym title="Internet Protocol" lang="en">IP</acronym> est adresse e-mail</legend>
119 <div class="infldset">
120 <table class="aligntop" cellspacing="0">
121 <tr>
122 <th scope="row">Nom d'utilisateur</th>
123 <td>
124 <input type="text" name="ban_user" size="25" maxlength="25" value="<?php if (isset($ban_user)) echo pun_htmlspecialchars($ban_user); ?>" tabindex="1" />
125 <span>Le nom d'utilisateur à bannir.</span>
126 </td>
127 </tr>
128 <tr>
129 <th scope="row">Adresses <acronym title="Internet Protocol" lang="en">IP</acronym></th>
130 <td>
131 <input type="text" name="ban_ip" size="45" maxlength="255" value="<?php if (isset($ban_ip)) echo $ban_ip; ?>" tabindex="2" />
132 <span>Une adresse <acronym title="Internet Protocol" lang="en">IP</acronym> ou une plage d'adresses <acronym title="Internet Protocol" lang="en">IP</acronym> que vous souhaitez bannir (<abbr title="exemple">ex.</abbr> 150.11.110.1 ou 150.11.110). Séparez les adresses par des espaces. Si une adresse <acronym title="Internet Protocol" lang="en">IP</acronym> apparaît déjà, il s'agit de la dernière adresse IP connue de l'utilisateur dans la base de données.<?php if ($ban_user != '' && isset($user_id)) echo ' <a href="admin_users.php?ip_stats='.$user_id.'">Cliquez ici</a> pour voir les statistiques <acronym title="Internet Protocol" lang="en">IP</acronym> de cet utilisateur.' ?></span>
133 </td>
134 </tr>
135 <tr>
136 <th scope="row">E-mail/domaine</th>
137 <td>
138 <input type="text" name="ban_email" size="40" maxlength="50" value="<?php if (isset($ban_email)) echo strtolower($ban_email); ?>" tabindex="3" />
139 <span>L'adresse e-mail ou le domaine e-mail que vous souhaitez bannir (<abbr title="exemple">ex.</abbr> utilisateur@domaine.com ou domaine.com). Pour plus d'informations, voir "Autoriser les adresses e-mail bannies" à la page des Permissions.</span>
140 </td>
141 </tr>
142 </table>
143 <p class="topspace"><strong class="warntext">Vous devez êtres très vigilant lorsque vous bannissez une plage d'<acronym title="Internet Protocol" lang="en">IP</acronym> car il y a fort probablement plusieurs utilisateurs qui correspondent à la même <acronym title="Internet Protocol" lang="en">IP</acronym> partielle.</strong></p>
144 </div>
145 </fieldset>
146 </div>
147 <div class="inform">
148 <fieldset>
149 <legend>Message et échéance d'interdiction</legend>
150 <div class="infldset">
151 <table class="aligntop" cellspacing="0">
152 <tr>
153 <th scope="row">Message d'interdiction</th>
154 <td>
155 <input type="text" name="ban_message" size="50" maxlength="255" value="<?php if (isset($ban_message)) echo pun_htmlspecialchars($ban_message); ?>" tabindex="4" />
156 <span>Le message qui sera affiché à l'utilisateur banni lorsqu'il visitera les forums.</span>
157 </td>
158 </tr>
159 <tr>
160 <th scope="row">Échéance d'interdiction</th>
161 <td>
162 <input type="text" name="ban_expire" size="17" maxlength="10" value="<?php if (isset($ban_expire)) echo $ban_expire; ?>" tabindex="5" />
163 <span>La date à laquelle ce bannissement sera automatiquement supprimé (format: AAAA-MM-JJ). Pour supprimer manuellement, laissez ce champ vide.</span>
164 </td>
165 </tr>
166 </table>
167 </div>
168 </fieldset>
169 </div>
170 <p class="submitend"><input type="submit" name="add_edit_ban" value=" Enregistrer " tabindex="6" /></p>
171 </form>
172 </div>
173 </div>
174 <div class="clearer"></div>
175</div>
176<?php
177
178 require PUN_ROOT.'footer.php';
179}
180
181
182// Add/edit a ban (stage 2)
183else if (isset($_POST['add_edit_ban']))
184{
185 confirm_referrer('admin_bans.php');
186
187 $ban_user = trim($_POST['ban_user']);
188 $ban_ip = trim($_POST['ban_ip']);
189 $ban_email = strtolower(trim($_POST['ban_email']));
190 $ban_message = trim($_POST['ban_message']);
191 $ban_expire = trim($_POST['ban_expire']);
192
193 if ($ban_user == '' && $ban_ip == '' && $ban_email == '')
194 message('Vous devez saisir au moins soit un nom d\'utilisateur, soit une adresse <acronym title="Internet Protocol" lang="en">IP</acronym> ou une adresse e-mail.');
195 else if (strtolower($ban_user) == 'guest' || strtolower($ban_user) == 'invité')
196 message('Vous ne pouvez pas bannir l\'utilisateur "invité"');
197
198 // Validate IP/IP range (it's overkill, I know)
199 if ($ban_ip != '')
200 {
201 $ban_ip = preg_replace('/[\s]{2,}/', ' ', $ban_ip);
202 $addresses = explode(' ', $ban_ip);
203 $addresses = array_map('trim', $addresses);
204
205 for ($i = 0; $i < count($addresses); ++$i)
206 {
207 $octets = explode('.', $addresses[$i]);
208
209 for ($c = 0; $c < count($octets); ++$c)
210 {
211 $octets[$c] = (strlen($octets[$c]) > 1) ? ltrim($octets[$c], "0") : $octets[$c];
212
213 if ($c > 3 || preg_match('/[^0-9]/', $octets[$c]) || intval($octets[$c]) > 255)
214 message('Vous avez saisi une <acronym title="Internet Protocol" lang="en">IP</acronym>/plage d\'<acronym title="Internet Protocol" lang="en">IP</acronym> incorrecte.');
215 }
216
217 $cur_address = implode('.', $octets);
218 $addresses[$i] = $cur_address;
219 }
220
221 $ban_ip = implode(' ', $addresses);
222 }
223
224 require PUN_ROOT.'include/email.php';
225 if ($ban_email != '' && !is_valid_email($ban_email))
226 {
227 if (!preg_match('/^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/', $ban_email))
228 message('L\'adresse e-mail (<abbr title="exemple">ex.</abbr> utilisateur@domaine.com) ou le domaine d\'adresse e-mail (<abbr title="exemple">ex.</abbr> domaine.com) que vous avez saisi est incorrect.');
229 }
230
231 if ($ban_expire != '' && $ban_expire != 'Never')
232 {
233 $ban_expire = strtotime($ban_expire);
234
235 if ($ban_expire == -1 || $ban_expire <= time())
236 message('Vous avez saisi une date d\'échéance incorrecte. Le format doit être AAAA-MM-JJ et la date doit-être d\'au moins un jour dans le futur.');
237 }
238 else
239 $ban_expire = 'NULL';
240
241 $ban_user = ($ban_user != '') ? '\''.$db->escape($ban_user).'\'' : 'NULL';
242 $ban_ip = ($ban_ip != '') ? '\''.$db->escape($ban_ip).'\'' : 'NULL';
243 $ban_email = ($ban_email != '') ? '\''.$db->escape($ban_email).'\'' : 'NULL';
244 $ban_message = ($ban_message != '') ? '\''.$db->escape($ban_message).'\'' : 'NULL';
245
246 if ($_POST['mode'] == 'add')
247 $db->query('INSERT INTO '.$db->prefix.'bans (username, ip, email, message, expire) VALUES('.$ban_user.', '.$ban_ip.', '.$ban_email.', '.$ban_message.', '.$ban_expire.')') or error('Unable to add ban', __FILE__, __LINE__, $db->error());
248 else
249 $db->query('UPDATE '.$db->prefix.'bans SET username='.$ban_user.', ip='.$ban_ip.', email='.$ban_email.', message='.$ban_message.', expire='.$ban_expire.' WHERE id='.intval($_POST['ban_id'])) or error('Unable to update ban', __FILE__, __LINE__, $db->error());
250
251 // Regenerate the bans cache
252 require_once PUN_ROOT.'include/cache.php';
253 generate_bans_cache();
254
255 redirect('admin_bans.php', 'Bannissement '.(($_POST['mode'] == 'edit') ? 'modifié' : 'ajouté').'. Redirection ...');
256}
257
258
259// Remove a ban
260else if (isset($_GET['del_ban']))
261{
262 confirm_referrer('admin_bans.php');
263
264 $ban_id = intval($_GET['del_ban']);
265 if ($ban_id < 1)
266 message($lang_common['Bad request']);
267
268 $db->query('DELETE FROM '.$db->prefix.'bans WHERE id='.$ban_id) or error('Unable to delete ban', __FILE__, __LINE__, $db->error());
269
270 // Regenerate the bans cache
271 require_once PUN_ROOT.'include/cache.php';
272 generate_bans_cache();
273
274 redirect('admin_bans.php', 'Bannissement supprimé. Redirection ...');
275}
276
277
278$page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Bannissement';
279$focus_element = array('bans', 'new_ban_user');
280require PUN_ROOT.'header.php';
281
282generate_admin_menu('bans');
283
284?>
285 <div class="blockform">
286 <h2><span>Nouveau bannissement</span></h2>
287 <div class="box">
288 <form id="bans" method="post" action="admin_bans.php?action=more">
289 <div class="inform">
290 <fieldset>
291 <legend>Ajouter un bannissement</legend>
292 <div class="infldset">
293 <table class="aligntop" cellspacing="0">
294 <tr>
295 <th scope="row">Nom d'utilisateur<div><input type="submit" name="add_ban" value=" Ajouter " tabindex="2" /></div></th>
296 <td>
297 <input type="text" name="new_ban_user" size="25" maxlength="25" tabindex="1" />
298 <span>Le nom d'utilisateur à bannir (insensible à la casse). La page suivante vous permettra d'entrer une adresse <acronym title="Internet Protocol" lang="en">IP</acronym> et/ou une adresse e-mail de votre choix. Si vous souhaitez bannir une adresse <acronym title="Internet Protocol" lang="en">IP</acronym>, une plage d'adresses <acronym title="Internet Protocol" lang="en">IP</acronym> ou une adresse e-mail, laissez simplement ce champ vide.</span>
299 </td>
300 </tr>
301 </table>
302 </div>
303 </fieldset>
304 </div>
305 </form>
306 </div>
307
308 <h2 class="block2"><span>Bannissements actuels</span></h2>
309 <div class="box">
310 <div class="fakeform">
311<?php
312
313$result = $db->query('SELECT id, username, ip, email, message, expire FROM '.$db->prefix.'bans ORDER BY id') or error('Unable to fetch ban list', __FILE__, __LINE__, $db->error());
314if ($db->num_rows($result))
315{
316 while ($cur_ban = $db->fetch_assoc($result))
317 {
318 $expire = format_time($cur_ban['expire'], true);
319
320?>
321 <div class="inform">
322 <fieldset>
323 <legend>Date d'échéance&nbsp;: <?php echo $expire ?></legend>
324 <div class="infldset">
325 <table cellspacing="0">
326<?php if ($cur_ban['username'] != ''): ?> <tr>
327 <th>Nom d'utilisateur</th>
328 <td><?php echo pun_htmlspecialchars($cur_ban['username']) ?></td>
329 </tr>
330<?php endif; ?><?php if ($cur_ban['email'] != ''): ?> <tr>
331 <th>E-mail</th>
332 <td><?php echo $cur_ban['email'] ?></td>
333 </tr>
334<?php endif; ?><?php if ($cur_ban['ip'] != ''): ?> <tr>
335 <th><acronym title="Internet Protocol" lang="en">IP</acronym>/plage d'<acronym title="Internet Protocol" lang="en">IP</acronym></th>
336 <td><?php echo $cur_ban['ip'] ?></td>
337 </tr>
338<?php endif; ?><?php if ($cur_ban['message'] != ''): ?> <tr>
339 <th>Motif</th>
340 <td><?php echo pun_htmlspecialchars($cur_ban['message']) ?></td>
341 </tr>
342<?php endif; ?> </table>
343 <p class="linkactions"><a href="admin_bans.php?edit_ban=<?php echo $cur_ban['id'] ?>">Modifier</a> - <a href="admin_bans.php?del_ban=<?php echo $cur_ban['id'] ?>">Supprimer</a></p>
344 </div>
345 </fieldset>
346 </div>
347<?php
348
349 }
350}
351else
352 echo "\t\t\t\t".'<p>Aucun bannissement à lister.</p>'."\n";
353
354?>
355 </div>
356 </div>
357 </div>
358 <div class="clearer"></div>
359</div>
360<?php
361
362require PUN_ROOT.'footer.php';