[1] | 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_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) |
---|
| 39 | if (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('Impossible de retrouver les informations utilisateur', __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('Impossible de retrouver les informations utilisateur', __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('Impossible de retrouver les informations des messages', __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('Impossible de retrouver les informations de bannissement', __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) |
---|
| 183 | else 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 | |
---|
| 196 | // Validate IP/IP range (it's overkill, I know) |
---|
| 197 | if ($ban_ip != '') |
---|
| 198 | { |
---|
| 199 | $ban_ip = preg_replace('/[\s]{2,}/', ' ', $ban_ip); |
---|
| 200 | $addresses = explode(' ', $ban_ip); |
---|
| 201 | $addresses = array_map('trim', $addresses); |
---|
| 202 | |
---|
| 203 | for ($i = 0; $i < count($addresses); ++$i) |
---|
| 204 | { |
---|
| 205 | $octets = explode('.', $addresses[$i]); |
---|
| 206 | |
---|
| 207 | for ($c = 0; $c < count($octets); ++$c) |
---|
| 208 | { |
---|
| 209 | $octets[$c] = (strlen($octets[$c]) > 1) ? ltrim($octets[$c], "0") : $octets[$c]; |
---|
| 210 | |
---|
| 211 | if ($c > 3 || preg_match('/[^0-9]/', $octets[$c]) || intval($octets[$c]) > 255) |
---|
| 212 | message('Vous avez saisi une <acronym title="Internet Protocol" lang="en">IP</acronym>/plage d\'<acronym title="Internet Protocol" lang="en">IP</acronym> incorrecte.'); |
---|
| 213 | } |
---|
| 214 | |
---|
| 215 | $cur_address = implode('.', $octets); |
---|
| 216 | $addresses[$i] = $cur_address; |
---|
| 217 | } |
---|
| 218 | |
---|
| 219 | $ban_ip = implode(' ', $addresses); |
---|
| 220 | } |
---|
| 221 | |
---|
| 222 | require PUN_ROOT.'include/email.php'; |
---|
| 223 | if ($ban_email != '' && !is_valid_email($ban_email)) |
---|
| 224 | { |
---|
| 225 | if (!preg_match('/^[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,4})$/', $ban_email)) |
---|
| 226 | 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.'); |
---|
| 227 | } |
---|
| 228 | |
---|
| 229 | if ($ban_expire != '' && $ban_expire != 'Never') |
---|
| 230 | { |
---|
| 231 | $ban_expire = strtotime($ban_expire); |
---|
| 232 | |
---|
| 233 | if ($ban_expire == -1 || $ban_expire <= time()) |
---|
| 234 | 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.'); |
---|
| 235 | } |
---|
| 236 | else |
---|
| 237 | $ban_expire = 'NULL'; |
---|
| 238 | |
---|
| 239 | $ban_user = ($ban_user != '') ? '\''.$db->escape($ban_user).'\'' : 'NULL'; |
---|
| 240 | $ban_ip = ($ban_ip != '') ? '\''.$db->escape($ban_ip).'\'' : 'NULL'; |
---|
| 241 | $ban_email = ($ban_email != '') ? '\''.$db->escape($ban_email).'\'' : 'NULL'; |
---|
| 242 | $ban_message = ($ban_message != '') ? '\''.$db->escape($ban_message).'\'' : 'NULL'; |
---|
| 243 | |
---|
| 244 | if ($_POST['mode'] == 'add') |
---|
| 245 | $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('Impossible d\'ajouter le bannissement', __FILE__, __LINE__, $db->error()); |
---|
| 246 | else |
---|
| 247 | $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('Impossible de modifier le bannissement', __FILE__, __LINE__, $db->error()); |
---|
| 248 | |
---|
| 249 | // Regenerate the bans cache |
---|
| 250 | require_once PUN_ROOT.'include/cache.php'; |
---|
| 251 | generate_bans_cache(); |
---|
| 252 | |
---|
| 253 | redirect('admin_bans.php', 'Bannissement '.(($_POST['mode'] == 'edit') ? 'modifié' : 'ajouté').'. Redirection ...'); |
---|
| 254 | } |
---|
| 255 | |
---|
| 256 | |
---|
| 257 | // Remove a ban |
---|
| 258 | else if (isset($_GET['del_ban'])) |
---|
| 259 | { |
---|
| 260 | confirm_referrer('admin_bans.php'); |
---|
| 261 | |
---|
| 262 | $ban_id = intval($_GET['del_ban']); |
---|
| 263 | if ($ban_id < 1) |
---|
| 264 | message($lang_common['Bad request']); |
---|
| 265 | |
---|
| 266 | $db->query('DELETE FROM '.$db->prefix.'bans WHERE id='.$ban_id) or error('Impossible de supprimer le bannissement', __FILE__, __LINE__, $db->error()); |
---|
| 267 | |
---|
| 268 | // Regenerate the bans cache |
---|
| 269 | require_once PUN_ROOT.'include/cache.php'; |
---|
| 270 | generate_bans_cache(); |
---|
| 271 | |
---|
| 272 | redirect('admin_bans.php', 'Bannissement supprimé. Redirection ...'); |
---|
| 273 | } |
---|
| 274 | |
---|
| 275 | |
---|
| 276 | $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / Admin / Bannissement'; |
---|
| 277 | $focus_element = array('bans', 'new_ban_user'); |
---|
| 278 | require PUN_ROOT.'header.php'; |
---|
| 279 | |
---|
| 280 | generate_admin_menu('bans'); |
---|
| 281 | |
---|
| 282 | ?> |
---|
| 283 | <div class="blockform"> |
---|
| 284 | <h2><span>Nouveau bannissement</span></h2> |
---|
| 285 | <div class="box"> |
---|
| 286 | <form id="bans" method="post" action="admin_bans.php?action=more"> |
---|
| 287 | <div class="inform"> |
---|
| 288 | <fieldset> |
---|
| 289 | <legend>Ajouter un bannissement</legend> |
---|
| 290 | <div class="infldset"> |
---|
| 291 | <table class="aligntop" cellspacing="0"> |
---|
| 292 | <tr> |
---|
| 293 | <th scope="row">Nom d'utilisateur<div><input type="submit" name="add_ban" value=" Ajouter " tabindex="2" /></div></th> |
---|
| 294 | <td> |
---|
| 295 | <input type="text" name="new_ban_user" size="25" maxlength="25" tabindex="1" /> |
---|
| 296 | <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> |
---|
| 297 | </td> |
---|
| 298 | </tr> |
---|
| 299 | </table> |
---|
| 300 | </div> |
---|
| 301 | </fieldset> |
---|
| 302 | </div> |
---|
| 303 | </form> |
---|
| 304 | </div> |
---|
| 305 | |
---|
| 306 | <h2 class="block2"><span>Bannissements actuels</span></h2> |
---|
| 307 | <div class="box"> |
---|
| 308 | <div class="fakeform"> |
---|
| 309 | <?php |
---|
| 310 | |
---|
| 311 | $result = $db->query('SELECT id, username, ip, email, message, expire FROM '.$db->prefix.'bans ORDER BY id') or error('Impossible de retrouver la liste des bannissements', __FILE__, __LINE__, $db->error()); |
---|
| 312 | if ($db->num_rows($result)) |
---|
| 313 | { |
---|
| 314 | while ($cur_ban = $db->fetch_assoc($result)) |
---|
| 315 | { |
---|
| 316 | $expire = format_time($cur_ban['expire'], true); |
---|
| 317 | |
---|
| 318 | ?> |
---|
| 319 | <div class="inform"> |
---|
| 320 | <fieldset> |
---|
| 321 | <legend>Date d'échéance : <?php echo $expire ?></legend> |
---|
| 322 | <div class="infldset"> |
---|
| 323 | <table cellspacing="0"> |
---|
| 324 | <?php if ($cur_ban['username'] != ''): ?> <tr> |
---|
| 325 | <th>Nom d'utilisateur</th> |
---|
| 326 | <td><?php echo pun_htmlspecialchars($cur_ban['username']) ?></td> |
---|
| 327 | </tr> |
---|
| 328 | <?php endif; ?><?php if ($cur_ban['email'] != ''): ?> <tr> |
---|
| 329 | <th>E-mail</th> |
---|
| 330 | <td><?php echo $cur_ban['email'] ?></td> |
---|
| 331 | </tr> |
---|
| 332 | <?php endif; ?><?php if ($cur_ban['ip'] != ''): ?> <tr> |
---|
| 333 | <th><acronym title="Internet Protocol" lang="en">IP</acronym>/plage d'<acronym title="Internet Protocol" lang="en">IP</acronym></th> |
---|
| 334 | <td><?php echo $cur_ban['ip'] ?></td> |
---|
| 335 | </tr> |
---|
| 336 | <?php endif; ?><?php if ($cur_ban['message'] != ''): ?> <tr> |
---|
| 337 | <th>Motif</th> |
---|
| 338 | <td><?php echo pun_htmlspecialchars($cur_ban['message']) ?></td> |
---|
| 339 | </tr> |
---|
| 340 | <?php endif; ?> </table> |
---|
| 341 | <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> |
---|
| 342 | </div> |
---|
| 343 | </fieldset> |
---|
| 344 | </div> |
---|
| 345 | <?php |
---|
| 346 | |
---|
| 347 | } |
---|
| 348 | } |
---|
| 349 | else |
---|
| 350 | echo "\t\t\t\t".'<p>Aucun bannissement à lister.</p>'."\n"; |
---|
| 351 | |
---|
| 352 | ?> |
---|
| 353 | </div> |
---|
| 354 | </div> |
---|
| 355 | </div> |
---|
| 356 | <div class="clearer"></div> |
---|
| 357 | </div> |
---|
| 358 | <?php |
---|
| 359 | |
---|
| 360 | require PUN_ROOT.'footer.php'; |
---|