[ 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 define('PUN_ROOT', './'); 27 require PUN_ROOT.'include/common.php'; 28 29 30 // If we are logged in, we shouldn't be here 31 if (!$pun_user['is_guest']) 32 { 33 header('Location: index.php'); 34 exit; 35 } 36 37 // Load the register.php language file 38 require PUN_ROOT.'lang/'.$pun_user['language'].'/register.php'; 39 40 // Load the register.php/profile.php language file 41 require PUN_ROOT.'lang/'.$pun_user['language'].'/prof_reg.php'; 42 43 if ($pun_config['o_regs_allow'] == '0') 44 message($lang_register['No new regs']); 45 46 47 // User pressed the cancel button 48 if (isset($_GET['cancel'])) 49 redirect('index.php', $lang_register['Reg cancel redirect']); 50 51 52 else if ($pun_config['o_rules'] == '1' && !isset($_GET['agree']) && !isset($_POST['form_sent'])) 53 { 54 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register']; 55 require PUN_ROOT.'header.php'; 56 57 ?> 58 <div class="blockform"> 59 <h2><span><?php echo $lang_register['Forum rules'] ?></span></h2> 60 <div class="box"> 61 <form method="get" action="register.php"> 62 <div class="inform"> 63 <fieldset> 64 <legend><?php echo $lang_register['Rules legend'] ?></legend> 65 <div class="infldset"> 66 <p><?php echo $pun_config['o_rules_message'] ?></p> 67 </div> 68 </fieldset> 69 </div> 70 <p><input type="submit" name="agree" value="<?php echo $lang_register['Agree'] ?>" /><input type="submit" name="cancel" value="<?php echo $lang_register['Cancel'] ?>" /></p> 71 </form> 72 </div> 73 </div> 74 <?php 75 76 require PUN_ROOT.'footer.php'; 77 } 78 79 80 else if (isset($_POST['form_sent'])) 81 { 82 // Check that someone from this IP didn't register a user within the last hour (DoS prevention) 83 $result = $db->query('SELECT 1 FROM '.$db->prefix.'users WHERE registration_ip=\''.get_remote_address().'\' AND registered>'.(time() - 3600)) or error('Unable to fetch user info', __FILE__, __LINE__, $db->error()); 84 85 if ($db->num_rows($result)) 86 message($lang_register['User same IP']); 87 88 $username = pun_trim($_POST['req_username']); 89 $email1 = strtolower(trim($_POST['req_email1'])); 90 91 if ($pun_config['o_regs_verify'] == '1') 92 { 93 $email2 = strtolower(trim($_POST['req_email2'])); 94 95 $password1 = random_pass(8); 96 $password2 = $password1; 97 } 98 else 99 { 100 $password1 = trim($_POST['req_password1']); 101 $password2 = trim($_POST['req_password2']); 102 } 103 104 // Convert multiple whitespace characters into one (to prevent people from registering with indistinguishable usernames) 105 $username = preg_replace('#\s+#s', ' ', $username); 106 107 // Validate username and passwords 108 if (strlen($username) < 2) 109 message($lang_prof_reg['Username too short']); 110 else if (pun_strlen($username) > 25) // This usually doesn't happen since the form element only accepts 25 characters 111 message($lang_common['Bad request']); 112 else if (strlen($password1) < 4) 113 message($lang_prof_reg['Pass too short']); 114 else if ($password1 != $password2) 115 message($lang_prof_reg['Pass not match']); 116 else if (!strcasecmp($username, 'Guest') || !strcasecmp($username, 'invité') || !strcasecmp($username, $lang_common['Guest'])) 117 message($lang_prof_reg['Username guest']); 118 else if (preg_match('/[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}/', $username)) 119 message($lang_prof_reg['Username IP']); 120 else if ((strpos($username, '[') !== false || strpos($username, ']') !== false) && strpos($username, '\'') !== false && strpos($username, '"') !== false) 121 message($lang_prof_reg['Username reserved chars']); 122 else if (preg_match('#\[b\]|\[/b\]|\[u\]|\[/u\]|\[i\]|\[/i\]|\[color|\[/color\]|\[quote\]|\[quote=|\[/quote\]|\[code\]|\[/code\]|\[img\]|\[/img\]|\[url|\[/url\]|\[email|\[/email\]#i', $username)) 123 message($lang_prof_reg['Username BBCode']); 124 125 // Check username for any censored words 126 if ($pun_config['o_censoring'] == '1') 127 { 128 // If the censored username differs from the username 129 if (censor_words($username) != $username) 130 message($lang_register['Username censor']); 131 } 132 133 // Check that the username (or a too similar username) is not already registered 134 $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE UPPER(username)=UPPER(\''.$db->escape($username).'\') OR UPPER(username)=UPPER(\''.$db->escape(preg_replace('/[^\w]/', '', $username)).'\')') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error()); 135 136 if ($db->num_rows($result)) 137 { 138 $busy = $db->result($result); 139 message($lang_register['Username dupe 1'].' '.pun_htmlspecialchars($busy).'. '.$lang_register['Username dupe 2']); 140 } 141 142 143 // Validate e-mail 144 require PUN_ROOT.'include/email.php'; 145 146 if (!is_valid_email($email1)) 147 message($lang_common['Invalid e-mail']); 148 else if ($pun_config['o_regs_verify'] == '1' && $email1 != $email2) 149 message($lang_register['E-mail not match']); 150 151 // Check it it's a banned e-mail address 152 if (is_banned_email($email1)) 153 { 154 if ($pun_config['p_allow_banned_email'] == '0') 155 message($lang_prof_reg['Banned e-mail']); 156 157 $banned_email = true; // Used later when we send an alert e-mail 158 } 159 else 160 $banned_email = false; 161 162 // Check if someone else already has registered with that e-mail address 163 $dupe_list = array(); 164 165 $result = $db->query('SELECT username FROM '.$db->prefix.'users WHERE email=\''.$email1.'\'') or error('Unable to fetch user info', __FILE__, __LINE__, $db->error()); 166 if ($db->num_rows($result)) 167 { 168 if ($pun_config['p_allow_dupe_email'] == '0') 169 message($lang_prof_reg['Dupe e-mail']); 170 171 while ($cur_dupe = $db->fetch_assoc($result)) 172 $dupe_list[] = $cur_dupe['username']; 173 } 174 175 // Make sure we got a valid language string 176 if (isset($_POST['language'])) 177 { 178 $language = preg_replace('#[\.\\\/]#', '', $_POST['language']); 179 if (!file_exists(PUN_ROOT.'lang/'.$language.'/common.php')) 180 message($lang_common['Bad request']); 181 } 182 else 183 $language = $pun_config['o_default_lang']; 184 185 $timezone = round($_POST['timezone'], 1); 186 $save_pass = (!isset($_POST['save_pass']) || $_POST['save_pass'] != '1') ? '0' : '1'; 187 188 $email_setting = intval($_POST['email_setting']); 189 if ($email_setting < 0 || $email_setting > 2) $email_setting = 1; 190 191 // Insert the new user into the database. We do this now to get the last inserted id for later use. 192 $now = time(); 193 194 $intial_group_id = ($pun_config['o_regs_verify'] == '0') ? $pun_config['o_default_user_group'] : PUN_UNVERIFIED; 195 $password_hash = pun_hash($password1); 196 197 // Add the user 198 $db->query('INSERT INTO '.$db->prefix.'users (username, group_id, password, email, email_setting, save_pass, timezone, language, style, registered, registration_ip, last_visit) VALUES(\''.$db->escape($username).'\', '.$intial_group_id.', \''.$password_hash.'\', \''.$email1.'\', '.$email_setting.', '.$save_pass.', '.$timezone.' , \''.$db->escape($language).'\', \''.$pun_config['o_default_style'].'\', '.$now.', \''.get_remote_address().'\', '.$now.')') or error('Unable to create user', __FILE__, __LINE__, $db->error()); 199 $new_uid = $db->insert_id(); 200 201 202 // If we previously found out that the e-mail was banned 203 if ($banned_email && $pun_config['o_mailing_list'] != '') 204 { 205 $mail_subject = 'Alerte - Adresse e-mail bannie détectée'; 206 $mail_message = 'L\'utilisateur \''.$username.'\' s\'est inscrit avec l\'adresse e-mail bannie : '.$email1."\n\n".'Profil utilisateur : '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'E-mail automatique'."\n".'(Ne répondez pas à ce message)'; 207 208 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message); 209 } 210 211 // If we previously found out that the e-mail was a dupe 212 if (!empty($dupe_list) && $pun_config['o_mailing_list'] != '') 213 { 214 $mail_subject = 'Alerte - Adresse e-mail en doublon détéctée'; 215 $mail_message = 'L\'utilisateur \''.$username.'\' s\'est inscrit avec l\'adresse qui appartient également à : '.implode(', ', $dupe_list)."\n\n".'User profile: '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'E-mail automatique'."\n".'(Ne répondez pas à ce message)'; 216 217 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message); 218 } 219 220 // Should we alert people on the admin mailing list that a new user has registered? 221 if ($pun_config['o_regs_report'] == '1') 222 { 223 $mail_subject = 'Alerte - Nouvelle inscription'; 224 $mail_message = 'L\'utilisateur \''.$username.'\' s\'est inscrit au forum '.$pun_config['o_base_url']."\n\n".'Profil utilisateur : '.$pun_config['o_base_url'].'/profile.php?id='.$new_uid."\n\n".'-- '."\n".'E-mail automatique'."\n".'(Ne répondez pas à ce message)'; 225 226 pun_mail($pun_config['o_mailing_list'], $mail_subject, $mail_message); 227 } 228 229 // Must the user verify the registration or do we log him/her in right now? 230 if ($pun_config['o_regs_verify'] == '1') 231 { 232 // Load the "welcome" template 233 $mail_tpl = trim(file_get_contents(PUN_ROOT.'lang/'.$pun_user['language'].'/mail_templates/welcome.tpl')); 234 235 // The first row contains the subject 236 $first_crlf = strpos($mail_tpl, "\n"); 237 $mail_subject = trim(substr($mail_tpl, 8, $first_crlf-8)); 238 $mail_message = trim(substr($mail_tpl, $first_crlf)); 239 240 $mail_subject = str_replace('<board_title>', $pun_config['o_board_title'], $mail_subject); 241 $mail_message = str_replace('<base_url>', $pun_config['o_base_url'].'/', $mail_message); 242 $mail_message = str_replace('<username>', $username, $mail_message); 243 $mail_message = str_replace('<password>', $password1, $mail_message); 244 $mail_message = str_replace('<login_url>', $pun_config['o_base_url'].'/login.php', $mail_message); 245 $mail_message = str_replace('<board_mailer>', $pun_config['o_board_title'].' '.$lang_common['Mailer'], $mail_message); 246 247 pun_mail($email1, $mail_subject, $mail_message); 248 249 message($lang_register['Reg e-mail'].' <a href="mailto:'.$pun_config['o_admin_email'].'">'.$pun_config['o_admin_email'].'</a>.', true); 250 } 251 252 pun_setcookie($new_uid, $password_hash, ($save_pass != '0') ? $now + 31536000 : 0); 253 254 redirect('index.php', $lang_register['Reg complete']); 255 } 256 257 258 $page_title = pun_htmlspecialchars($pun_config['o_board_title']).' / '.$lang_register['Register']; 259 $required_fields = array('req_username' => $lang_common['Username'], 'req_password1' => $lang_common['Password'], 'req_password2' => $lang_prof_reg['Confirm pass'], 'req_email1' => $lang_common['E-mail'], 'req_email2' => $lang_common['E-mail'].' 2'); 260 $focus_element = array('register', 'req_username'); 261 require PUN_ROOT.'header.php'; 262 263 ?> 264 <div class="blockform"> 265 <h2><span><?php echo $lang_register['Register'] ?></span></h2> 266 <div class="box"> 267 <form id="register" method="post" action="register.php?action=register" onsubmit="this.register.disabled=true;if(process_form(this)){return true;}else{this.register.disabled=false;return false;}"> 268 <div class="inform"> 269 <div class="forminfo"> 270 <h3><?php echo $lang_common['Important information'] ?></h3> 271 <p><?php echo $lang_register['Desc 1'] ?></p> 272 <p><?php echo $lang_register['Desc 2'] ?></p> 273 </div> 274 <fieldset> 275 <legend><?php echo $lang_register['Username legend'] ?></legend> 276 <div class="infldset"> 277 <input type="hidden" name="form_sent" value="1" /> 278 <label><strong><?php echo $lang_common['Username'] ?></strong><br /><input type="text" name="req_username" size="25" maxlength="25" /><br /></label> 279 </div> 280 </fieldset> 281 </div> 282 <?php if ($pun_config['o_regs_verify'] == '0'): ?> <div class="inform"> 283 <fieldset> 284 <legend><?php echo $lang_register['Pass legend 1'] ?></legend> 285 <div class="infldset"> 286 <label class="conl"><strong><?php echo $lang_common['Password'] ?></strong><br /><input type="password" name="req_password1" size="16" maxlength="16" /><br /></label> 287 <label class="conl"><strong><?php echo $lang_prof_reg['Confirm pass'] ?></strong><br /><input type="password" name="req_password2" size="16" maxlength="16" /><br /></label> 288 <p class="clearb"><?php echo $lang_register['Pass info'] ?></p> 289 </div> 290 </fieldset> 291 </div> 292 <?php endif; ?> <div class="inform"> 293 <fieldset> 294 <legend><?php echo ($pun_config['o_regs_verify'] == '1') ? $lang_prof_reg['E-mail legend 2'] : $lang_prof_reg['E-mail legend'] ?></legend> 295 <div class="infldset"> 296 <?php if ($pun_config['o_regs_verify'] == '1'): ?> <p><?php echo $lang_register['E-mail info'] ?></p> 297 <?php endif; ?> <label><strong><?php echo $lang_common['E-mail'] ?></strong><br /> 298 <input type="text" name="req_email1" size="50" maxlength="50" /><br /></label> 299 <?php if ($pun_config['o_regs_verify'] == '1'): ?> <label><strong><?php echo $lang_register['Confirm e-mail'] ?></strong><br /> 300 <input type="text" name="req_email2" size="50" maxlength="50" /><br /></label> 301 <?php endif; ?> </div> 302 </fieldset> 303 </div> 304 <div class="inform"> 305 <fieldset> 306 <legend><?php echo $lang_prof_reg['Localisation legend'] ?></legend> 307 <div class="infldset"> 308 <label><?php echo $lang_prof_reg['Timezone'] ?>: <?php echo $lang_prof_reg['Timezone info'] ?> 309 <br /><select id="time_zone" name="timezone"> 310 <option value="-12"<?php if ($pun_config['o_server_timezone'] == -12 ) echo ' selected="selected"' ?>>-12</option> 311 <option value="-11"<?php if ($pun_config['o_server_timezone'] == -11) echo ' selected="selected"' ?>>-11</option> 312 <option value="-10"<?php if ($pun_config['o_server_timezone'] == -10) echo ' selected="selected"' ?>>-10</option> 313 <option value="-9.5"<?php if ($pun_config['o_server_timezone'] == -9.5) echo ' selected="selected"' ?>>-9.5</option> 314 <option value="-9"<?php if ($pun_config['o_server_timezone'] == -9 ) echo ' selected="selected"' ?>>-09</option> 315 <option value="-8.5"<?php if ($pun_config['o_server_timezone'] == -8.5) echo ' selected="selected"' ?>>-8.5</option> 316 <option value="-8"<?php if ($pun_config['o_server_timezone'] == -8 ) echo ' selected="selected"' ?>>-08 PST</option> 317 <option value="-7"<?php if ($pun_config['o_server_timezone'] == -7 ) echo ' selected="selected"' ?>>-07 MST</option> 318 <option value="-6"<?php if ($pun_config['o_server_timezone'] == -6 ) echo ' selected="selected"' ?>>-06 CST</option> 319 <option value="-5"<?php if ($pun_config['o_server_timezone'] == -5 ) echo ' selected="selected"' ?>>-05 EST</option> 320 <option value="-4"<?php if ($pun_config['o_server_timezone'] == -4 ) echo ' selected="selected"' ?>>-04 AST</option> 321 <option value="-3.5"<?php if ($pun_config['o_server_timezone'] == -3.5) echo ' selected="selected"' ?>>-3.5</option> 322 <option value="-3"<?php if ($pun_config['o_server_timezone'] == -3 ) echo ' selected="selected"' ?>>-03 ADT</option> 323 <option value="-2"<?php if ($pun_config['o_server_timezone'] == -2 ) echo ' selected="selected"' ?>>-02</option> 324 <option value="-1"<?php if ($pun_config['o_server_timezone'] == -1) echo ' selected="selected"' ?>>-01</option> 325 <option value="0"<?php if ($pun_config['o_server_timezone'] == 0) echo ' selected="selected"' ?>>00 GMT</option> 326 <option value="1"<?php if ($pun_config['o_server_timezone'] == 1) echo ' selected="selected"' ?>>+01 CET</option> 327 <option value="2"<?php if ($pun_config['o_server_timezone'] == 2 ) echo ' selected="selected"' ?>>+02</option> 328 <option value="3"<?php if ($pun_config['o_server_timezone'] == 3 ) echo ' selected="selected"' ?>>+03</option> 329 <option value="3.5"<?php if ($pun_config['o_server_timezone'] == 3.5 ) echo ' selected="selected"' ?>>+03.5</option> 330 <option value="4"<?php if ($pun_config['o_server_timezone'] == 4 ) echo ' selected="selected"' ?>>+04</option> 331 <option value="4.5"<?php if ($pun_config['o_server_timezone'] == 4.5 ) echo ' selected="selected"' ?>>+04.5</option> 332 <option value="5"<?php if ($pun_config['o_server_timezone'] == 5 ) echo ' selected="selected"' ?>>+05</option> 333 <option value="5.5"<?php if ($pun_config['o_server_timezone'] == 5.5 ) echo ' selected="selected"' ?>>+05.5</option> 334 <option value="6"<?php if ($pun_config['o_server_timezone'] == 6 ) echo ' selected="selected"' ?>>+06</option> 335 <option value="6.5"<?php if ($pun_config['o_server_timezone'] == 6.5 ) echo ' selected="selected"' ?>>+06.5</option> 336 <option value="7"<?php if ($pun_config['o_server_timezone'] == 7 ) echo ' selected="selected"' ?>>+07</option> 337 <option value="8"<?php if ($pun_config['o_server_timezone'] == 8 ) echo ' selected="selected"' ?>>+08</option> 338 <option value="9"<?php if ($pun_config['o_server_timezone'] == 9 ) echo ' selected="selected"' ?>>+09</option> 339 <option value="9.5"<?php if ($pun_config['o_server_timezone'] == 9.5 ) echo ' selected="selected"' ?>>+09.5</option> 340 <option value="10"<?php if ($pun_config['o_server_timezone'] == 10) echo ' selected="selected"' ?>>+10</option> 341 <option value="10.5"<?php if ($pun_config['o_server_timezone'] == 10.5 ) echo ' selected="selected"' ?>>+10.5</option> 342 <option value="11"<?php if ($pun_config['o_server_timezone'] == 11) echo ' selected="selected"' ?>>+11</option> 343 <option value="11.5"<?php if ($pun_config['o_server_timezone'] == 11.5 ) echo ' selected="selected"' ?>>+11.5</option> 344 <option value="12"<?php if ($pun_config['o_server_timezone'] == 12 ) echo ' selected="selected"' ?>>+12</option> 345 <option value="13"<?php if ($pun_config['o_server_timezone'] == 13 ) echo ' selected="selected"' ?>>+13</option> 346 <option value="14"<?php if ($pun_config['o_server_timezone'] == 14 ) echo ' selected="selected"' ?>>+14</option> 347 </select> 348 <br /></label> 349 <?php 350 351 $languages = array(); 352 $d = dir(PUN_ROOT.'lang'); 353 while (($entry = $d->read()) !== false) 354 { 355 if ($entry != '.' && $entry != '..' && is_dir(PUN_ROOT.'lang/'.$entry) && file_exists(PUN_ROOT.'lang/'.$entry.'/common.php')) 356 $languages[] = $entry; 357 } 358 $d->close(); 359 360 // Only display the language selection box if there's more than one language available 361 if (count($languages) > 1) 362 { 363 364 ?> 365 <label><?php echo $lang_prof_reg['Language'] ?>: <?php echo $lang_prof_reg['Language info'] ?> 366 <br /><select name="language"> 367 <?php 368 369 while (list(, $temp) = @each($languages)) 370 { 371 if ($pun_config['o_default_lang'] == $temp) 372 echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'" selected="selected">'.$temp.'</option>'."\n"; 373 else 374 echo "\t\t\t\t\t\t\t\t".'<option value="'.$temp.'">'.$temp.'</option>'."\n"; 375 } 376 377 ?> 378 </select> 379 <br /></label> 380 <?php 381 382 } 383 ?> 384 </div> 385 </fieldset> 386 </div> 387 <div class="inform"> 388 <fieldset> 389 <legend><?php echo $lang_prof_reg['Privacy options legend'] ?></legend> 390 <div class="infldset"> 391 <p><?php echo $lang_prof_reg['E-mail setting info'] ?></p> 392 <div class="rbox"> 393 <label><input type="radio" name="email_setting" value="0" /><?php echo $lang_prof_reg['E-mail setting 1'] ?><br /></label> 394 <label><input type="radio" name="email_setting" value="1" checked="checked" /><?php echo $lang_prof_reg['E-mail setting 2'] ?><br /></label> 395 <label><input type="radio" name="email_setting" value="2" /><?php echo $lang_prof_reg['E-mail setting 3'] ?><br /></label> 396 </div> 397 <p><?php echo $lang_prof_reg['Save user/pass info'] ?></p> 398 <div class="rbox"> 399 <label><input type="checkbox" name="save_pass" value="1" checked="checked" /><?php echo $lang_prof_reg['Save user/pass'] ?><br /></label> 400 </div> 401 </div> 402 </fieldset> 403 </div> 404 <p><input type="submit" name="register" value="<?php echo $lang_register['Register'] ?>" /></p> 405 </form> 406 </div> 407 </div> 408 <?php 409 410 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 |
![]() |