| [ Index ] |
|
Code source de PunBB 1.2.16 |
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('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) 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 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 260 else 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'); 280 require PUN_ROOT.'header.php'; 281 282 generate_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()); 314 if ($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 : <?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 } 351 else 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 362 require PUN_ROOT.'footer.php';
titre
Description
Corps
titre
Description
Corps
titre
Description
Corps
titre
Corps
| Généré le : Sat Nov 24 22:44:38 2007 | par Balluche grâce à PHPXref 0.7 |
|