1############################################################################### 2# Register.pm # 3# $Date: 12.02.14 $ # 4############################################################################### 5# YaBB: Yet another Bulletin Board # 6# Open-Source Community Software for Webmasters # 7# Version: YaBB 2.6.11 # 8# Packaged: December 2, 2014 # 9# Distributed by: http://www.yabbforum.com # 10# =========================================================================== # 11# Copyright (c) 2000-2014 YaBB (www.yabbforum.com) - All Rights Reserved. # 12# Software by: The YaBB Development Team # 13# with assistance from the YaBB community. # 14############################################################################### 15# use strict; 16# use warnings; 17no warnings qw(uninitialized once redefine); 18use CGI::Carp qw(fatalsToBrowser); 19use English '-no_match_vars'; 20our $VERSION = '2.6.11'; 21 22$registerpmver = 'YaBB 2.6.11 $Revision: 1611 $'; 23if ( $action eq 'detailedversion' ) { return 1; } 24if ( !$iamguest 25 && ( !$admin && $action ne 'activate' && $action ne 'admin_descision' ) ) 26{ 27 fatal_error('no_registration_logged_in'); 28} 29 30require Sources::Mailer; 31LoadLanguage('Register'); 32LoadCensorList(); 33 34get_template('Register'); 35 36if ( $OSNAME =~ /Win/sm ) { 37 my $regstyle = q~ style="text-transform: lowercase"~; 38} 39else { 40 my $regstyle = q{}; 41} 42 43sub Register { 44 if ( $regtype == 0 && $iamguest ) { fatal_error('registration_disabled'); } 45 if ( $RegAgree == 1 && $FORM{'regnoagree'} ) { 46 $yySetLocation = qq~$scripturl~; 47 redirectexit(); 48 } 49 if ( $RegAgree == 1 && !$FORM{'regagree'} ) { 50 $yytitle = qq~$register_txt{'97'}~; 51 $yynavigation = qq~› $register_txt{'97'}~; 52 if ($language) { 53 fopen( AGREE, "$langdir/$language/agreement.txt" ); 54 } 55 else { 56 fopen( AGREE, "$langdir/$lang/agreement.txt" ); 57 } 58 @agreement = <AGREE>; 59 fclose(AGREE); 60 $fullagree = join q{}, @agreement; 61 $fullagree =~ s/\n/<br \/>/gsm; 62 $yymain .= $myregister_fullagree; 63 $yymain =~ s/{yabb fullagree}/$fullagree/sm; 64 template(); 65 exit; 66 } 67 my ( 68 $tmpregname, $tmprealname, $tmpregemail, $tmpregpasswrd1, 69 $tmpregpasswrd2, $hidechecked, $reg_start_time, @birthdate 70 ); 71 $yytitle = $register_txt{'97'}; 72 $yynavigation = qq~› $register_txt{'97'}~; 73 if ( $FORM{'reglanguage'} ) { 74 $language = $FORM{'reglanguage'}; 75 LoadLanguage('Register'); 76 } 77 if ( $FORM{'regusername'} ) { $tmpregname = $FORM{'regusername'}; } 78 if ( $FORM{'regrealname'} ) { $tmprealname = $FORM{'regrealname'}; } 79 if ( $FORM{'email'} ) { $tmpregemail = $FORM{'email'}; } 80 if ( $FORM{'hideemail'} || !exists $FORM{'hideemail'} ) { 81 $hidechecked = q~ checked="checked"~; 82 } 83 if ( $FORM{'add_field0'} ) { $newfield = $FORM{'add_field0'}; } 84 if ( $FORM{'passwrd1'} ) { $tmpregpasswrd1 = $FORM{'passwrd1'}; } 85 if ( $FORM{'passwrd2'} ) { $tmpregpasswrd2 = $FORM{'passwrd2'}; } 86 if ( $FORM{'reason'} ) { $reason = $FORM{'reason'}; } 87 if ( $FORM{'birth_day'} ) { $birthdate[0] = $FORM{'birth_day'}; } 88 if ( $FORM{'birth_month'} ) { $birthdate[1] = $FORM{'birth_month'}; } 89 if ( $FORM{'birth_year'} ) { $birthdate[2] = $FORM{'birth_year'}; } 90 91 $min_reg_time ||= 0; 92 if ( $min_reg_time > 0 ) { 93 $reg_start_time = 94 qq~<input type="hidden" name="reg_start_time" value="$date" />~; 95 } 96 97 if ( !$langopt ) { guestLangSel(); } 98 99 if ( -e "$vardir/email_domain_filter.txt" ) { 100 require "$vardir/email_domain_filter.txt"; 101 } 102 if ($adomains) { 103 @domains = split /\,/xsm, $adomains; 104 $aedomains = $myaedomains_a; 105 $aedomains =~ s/{yabb tmpregemail}/$tmpregemail/sm; 106 foreach (@domains) { 107 $aedomains .= 108 ( $_ =~ m/\@/xsm ) 109 ? qq~<option value="$_">$_</option>~ 110 : qq~<option value="\@$_">@$_</option>~; 111 } 112 $aedomains .= $myaedomains_b; 113 } 114 else { 115 $aedomains .= 116qq~<input type="text" maxlength="100" onchange="checkAvail('$scripturl',this.value,'email')" name="email" id="email" value="$tmpregemail" size="45" />~; 117 } 118 119 $yymain .= qq~ 120<script type="text/javascript" src="$yyhtml_root/ajax.js"></script> 121<form action="$scripturl?action=register2" method="post" name="creator" onsubmit="return CheckRegFields();" accept-charset="$yymycharset"> 122 $reg_start_time~; 123 if ( $RegAgree == 1 && $FORM{'regagree'} ) { 124 $yymain .= q~ 125<input type="hidden" name="regagree" value="yes" />~; 126 } 127 $yymain .= $myregister_regfill_a; 128 129 if ( $morelang > 1 ) { 130 $yymain .= $myregister_morelang; 131 $yymain =~ s/{yabb langopt}/$langopt/sm; 132 } 133 $newfield = q{}; 134## user name section 135 $yymain .= $myregister_regfill_b; 136 $yymain =~ s/{yabb tmpregname}/$tmpregname/sm; 137 $yymain =~ s/{yabb regstyle}/$regstyle/sm; 138 $yymain =~ s/{yabb language}/$language/sm; 139 140 if ($name_cannot_be_userid) { 141 $yymain .= qq~ 142 <br /><span class="small">$register_txt{'521'}</span>~; 143 } 144 145 $email2 = q{}; 146 if ( $imp_email_check == 1 ) { 147 eval { 148 require Net::DNS; 149 }; 150 if (!$EVAL_ERROR ) { 151 $email2 = $myregister_email2; 152 $email2 =~ s/{yabb email2}/$register_txt{'70'}/sm; 153 } 154 } 155 156 $yymain .= $myregister_avail; 157 $yymain =~ s/{yabb tmprealname}/$tmprealname/sm; 158 $yymain =~ s/{yabb aedomains}/$aedomains/sm; 159 160 if ( $allow_hide_email == 1 ) { 161 $yymain .= qq~ 162 <br /><input type="checkbox" name="hideemail" id="hideemail" value="1"$hidechecked /> <label for="hideemail">$register_txt{'721'}</label> 163 ~; 164 } 165 $yymain .= $myregister_endrow; 166 $yymain .= $email2; 167 168 if ($birthday_on_reg) { 169 my $editAgeTxt; 170 if ( $editAgeLimit == 1 ) { 171 $editAgeTxt = 172 qq~<br /><span class="small">$register_txt{'birthday_c'}</span>~; 173 } 174 timetostring($date); 175 if ( $timeselected =~ /[145]/xsm ) { 176 $yymain .= 177 $myregister_bdonreg 178 . ( $birthday_on_reg == 2 ? $myreg_req : q{} ) 179 . qq~ <span class="small">$register_txt{'birthday_a'}</span>~; 180 } 181 else { 182 $yymain .= 183 $myregister_bdonreg_2 184 . ( $birthday_on_reg == 2 ? $myreg_req : q{} ) 185 . qq~ <span class="small">$register_txt{'birthday_b'}</span>~; 186 } 187 $yymain =~ s/{yabb editAgeTxt}/$editAgeTxt/sm; 188 $yymain =~ s/{yabb birthdate0}/$birthdate[0]/sm; 189 $yymain =~ s/{yabb birthdate1}/$birthdate[1]/sm; 190 $yymain =~ s/{yabb birthdate2}/$birthdate[2]/sm; 191 192 $yymain .= $myregister_endrow; 193 } 194 195 if ($gender_on_reg == 1 ) { 196 my $editGenderTxt; 197 my $nongen_opt = q{}; 198 if ( $editGenderLimit == 1 ) { 199 $editGenderTxt = 200 qq~<br /><span class="small">$register_txt{'gender_edit'}</span>~; 201 } 202 if ( $gender_on_reg == 2 ) { 203 $nongen_opt = $myreg_req; 204 } 205 206 $yymain .= $myregister_gender; 207 $yymain =~ s/{yabb editGenderTxt}/$editGenderTxt/sm; 208 $yymain =~ s/{yabb nongen_opt}/$nongen_opt/sm; 209 } 210 if ( !$emailpassword ) { 211 $yymain .= password_check(); 212 } 213 214 if ( $addmemgroup_enabled == 1 || $addmemgroup_enabled == 3 ) { 215 my ( $addmemgroup, $selsize ); 216 foreach (@nopostorder) { 217 my ( 218 $title, undef, undef, undef, undef, undef, 219 undef, undef, undef, undef, $additional 220 ) = split /\|/xsm, $NoPost{$_}; 221 if ($additional) { 222 $addmemgroup .= qq~<option value="$_">$title</option>~; 223 $selsize++; 224 } 225 } 226 $selsize = $selsize > 6 ? 6 : $selsize; 227 my $additional_explain = 228 $addmemgroup_enabled == 1 229 ? $register_txt{'766'} 230 : $register_txt{'767'}; 231 if ( $selsize > 1 ) { $additional_explain .= $register_txt{'767a'}; } 232 233 if ($addmemgroup) { 234 $yymain .= $myregister_addmem; 235 $yymain =~ s/{yabb additional_explain}/$additional_explain/sm; 236 $yymain =~ s/{yabb selsize}/$selsize/sm; 237 $yymain =~ s/{yabb addmemgroup}/$addmemgroup/sm; 238 } 239 } 240 241 if ( $regtype == 1 ) { 242 $yymain .= 243 $myregister_regreason_a 244 . qq~ <textarea cols="60" rows="7" name="reason" id="reason">$reason</textarea>~ 245 . $myregister_regreason_c 246 . length($RegReasonSymbols) 247 . $myregister_regreason_b; 248 $yymain =~ s/{yabb reason}/$reason/sm; 249 $yymain =~ s/{yabb RegReasonSymbols}/$RegReasonSymbols/gsm; 250 } 251 252 if ($extendedprofiles) { 253 require Sources::ExtendedProfiles; 254 my $reg_ext_prof = ext_register(); 255 $yymain .= $reg_ext_prof; 256 } 257 258 if ($regcheck) { 259 require Sources::Decoder; 260 validation_code(); 261 $yymain .= $myregister_regcheck; 262 $yymain =~ s/{yabb flood_text}/$flood_text/sm; 263 $yymain =~ s/{yabb showcheck}/$showcheck/sm; 264 } 265 if ( $en_spam_questions && -e "$langdir/$language/spam.questions" ) { 266 SpamQuestion(); 267 my $verification_question_desc; 268 if ($spam_questions_case) { 269 $verification_question_desc = 270 qq~<br />$register_txt{'verification_question_case'}~; 271 } 272 $yymain .= $myregister_spamquest; 273 274 $yymain =~ s/{yabb spam_question}/$spam_question/sm; 275 $yymain =~ 276 s/{yabb verification_question_desc}/$verification_question_desc/sm; 277 $yymain =~ s/{yabb spam_question_id}/$spam_question_id/sm; 278 $yymain =~ s/{yabb spam_question_image}/$spam_image/sm; 279 } 280 if ( $honeypot == 1 ) { 281 fopen( HONEY, "<$langdir/$language/honey.txt" ) 282 or fatal_error( 'cannot_open', "$langdir/$language/honey.txt", 1 ); 283 @honey = <HONEY>; 284 fclose(HONEY); 285 chomp @honey; 286 $hony = int rand $#honey; 287 $newfieldb = $honey[$hony]; 288 289 $yymain .= $myregister_honey; 290 $yymain =~ s/{yabb newfieldb}/$newfieldb/sm; 291 $yymain =~ s/{yabb newfield}/$newfield/sm; 292 } 293 294 # SpamFruits courtesy of Carsten Dalgaard # 295 if ( $spamfruits == 1 ) { 296 my @fruits = 297 ( $fruittxt{'2'}, $fruittxt{'3'}, $fruittxt{'4'}, $fruittxt{'5'} ); 298 my $rdn = int rand 4; 299 $fruit = $fruits[$rdn]; 300 $yymain .= $myregister_fruits; 301 $yymain =~ s/{yabb fruit}/$fruit/gsm; 302 $yymain .= qq~ 303 <script type="text/javascript"> 304 function ShowFruits() { 305 var visfruits = "<html><head><link rel='stylesheet' href='$extpagstyle' type='text/css' /></head><body class='windowbg2'> "; 306 visfruits += "<img src='$defaultimagesdir/fruits.png' width='290' height='75' name='fruitsview' id='fruitsview' style='position: absolute; top: 0px; left: 0px; cursor: pointer;' alt='' onclick='FruitClick(event)' /> "; 307 visfruits += "<img src='$defaultimagesdir/fruitcheck.png' id='frmarker' style='z-index: 2; display: none;'> "; 308 visfruits += "<script type='text/javascript'> " 309 visfruits += "var xcor = 0; " 310 visfruits += "var ycor = 0; " 311 visfruits += "var mrkpos = 30; " 312 visfruits += "function FruitClick(event) \{ " 313 visfruits += "xcor = (event.clientX); " 314 visfruits += "ycor = (event.clientY); " 315 visfruits += "if(xcor > 0) mrkpos = 30; " 316 visfruits += "if(xcor > 75) mrkpos = 100; " 317 visfruits += "if(xcor > 145) mrkpos = 170; " 318 visfruits += "if(xcor > 215) mrkpos = 240; " 319 visfruits += "document.getElementById('frmarker').style.display = 'block'; " 320 visfruits += "document.getElementById('frmarker').style.position = 'absolute'; " 321 visfruits += "document.getElementById('frmarker').style.left = mrkpos + 'px'; " 322 visfruits += "document.getElementById('frmarker').style.top = '67px'; " 323 visfruits += "parent.document.creator.ycord.value = ycor; " 324 visfruits += "parent.document.creator.xcord.value = xcor; " 325 visfruits += "\} " 326 visfruits += "<\\/script> <\\/body> <\\/html>"; 327 fruits.document.open("text/html"); 328 fruits.document.write(visfruits); 329 fruits.document.close(); 330 } 331 ShowFruits() 332 </script>~; 333 $yymain .= $myregister_endrow; 334 } 335 336 if ( $RegAgree == 2 ) { 337 if ($language) { 338 fopen( AGREE, "$langdir/$language/agreement.txt" ); 339 } 340 else { 341 fopen( AGREE, "$langdir/$lang/agreement.txt" ); 342 } 343 @agreement = <AGREE>; 344 fclose(AGREE); 345 $fullagree = join q{}, @agreement; 346 $fullagree =~ s/\n/<br \/>/gsm; 347 $yymain .= $myregister_regagree; 348 $yymain =~ s/{yabb fullagree}/$fullagree/gsm; 349 350 } 351 $yymain .= $myregister_endform; 352 $yymain .= qq~ 353<script type="text/javascript"> 354 document.creator.regusername.focus(); 355 356 function CheckRegFields() { 357 if (document.creator.regusername.value === '') { 358 alert("$register_txt{'error_username'}"); 359 document.creator.regusername.focus(); 360 return false; 361 }~; 362 if ( !$emailpassword ) { 363 $yymain .= qq~ 364 if (document.creator.regusername.value == document.creator.passwrd1.value || document.creator.regrealname.value == document.creator.passwrd1.value) { 365 alert("$register_txt{'error_usernameispass'}"); 366 document.creator.regusername.focus(); 367 return false; 368 }~; 369 } 370 $yymain .= qq~ 371 if (document.creator.regrealname.value === '') { 372 alert("$register_txt{'error_realname'}"); 373 document.creator.regrealname.focus(); 374 return false; 375 }~ . 376 377 ( 378 $name_cannot_be_userid 379 ? qq~ 380 if (document.creator.regusername.value == document.creator.regrealname.value) { 381 alert("$register_txt{'error_name_cannot_be_userid'}"); 382 document.creator.regrealname.focus(); 383 return false; 384 }~ 385 : q{} 386 ) 387 388 . qq~ 389 if (document.creator.email.value === '') { 390 alert("$register_txt{'error_email'}"); 391 document.creator.email.focus(); 392 return false; 393 }~ . 394 395 ( 396 $imp_email_check ? qq~ 397 if (document.creator.email2.value === '') { 398 alert("$register_txt{'error_email2'}"); 399 document.creator.email2.focus(); 400 return false; 401 } 402 if (document.creator.email.value != document.creator.email2.value) { 403 alert("$register_txt{'error_email3'}"); 404 document.creator.email.focus(); 405 return false; 406 }~ : q{} 407 ) . 408 409 ( 410 $birthday_on_reg 411 ? q~ 412 if (~ 413 . ( 414 $birthday_on_reg == 1 415 ? 'document.creator.birth_day.value.length && ' 416 : q{} 417 ) 418 . qq~(document.creator.birth_day.value.length < 2 || document.creator.birth_day.value < 1 || document.creator.birth_day.value > 31 || (/\\D/.test)(document.creator.birth_day.value))) { 419 alert("$register_txt{'error_birth_day'}"); 420 document.creator.birth_day.focus(); 421 return false; 422 } 423 if (~ 424 . ( 425 $birthday_on_reg == 1 426 ? 'document.creator.birth_month.value.length && ' 427 : q{} 428 ) 429 . qq~(document.creator.birth_month.value.length < 2 || document.creator.birth_month.value < 1 || document.creator.birth_month.value > 12 || (/\\D/.test)(document.creator.birth_month.value))) { 430 alert("$register_txt{'error_birth_month'}"); 431 document.creator.birth_month.focus(); 432 return false; 433 } 434 if (~ 435 . ( 436 $birthday_on_reg == 1 437 ? 'document.creator.birth_year.value.length && ' 438 : q{} 439 ) 440 . qq~(document.creator.birth_year.value.length < 4 || (/\\D/.test)(document.creator.birth_year.value))) { 441 alert("$register_txt{'error_birth_year'}"); 442 document.creator.birth_year.focus(); 443 return false; 444 } 445 if (~ 446 . ( 447 $birthday_on_reg == 1 448 ? 'document.creator.birth_year.value.length && ' 449 : q{} 450 ) 451 . qq~(document.creator.birth_year.value < ($year - 120) || document.creator.birth_year.value > $year)) { 452 alert("$register_txt{'error_birth_year_real'}"); 453 document.creator.birth_year.focus(); 454 return false; 455 }~ 456 : q{} 457 ) 458 459 . qq~ 460 var emailpassword = $emailpassword; 461 if (emailpassword === 0) { 462 if (document.creator.passwrd1.value === '' || document.creator.passwrd2.value === '') { 463 alert("$register_txt{'error_pass1'}"); 464 document.creator.passwrd1.focus(); 465 return false; 466 } 467 if (document.creator.passwrd1.value != document.creator.passwrd2.value) { 468 alert("$register_txt{'error_pass2'}"); 469 document.creator.passwrd1.focus(); 470 return false; 471 } 472 } 473 var regcheck = $regcheck; 474 if (regcheck > 0 && document.creator.verification.value === '') { 475 alert("$register_txt{'error_verification'}"); 476 document.creator.verification.focus(); 477 return false; 478 }~ . 479 480 ( 481 $en_spam_questions && -e "$langdir/$language/spam.questions" 482 ? qq~ 483 if (document.creator.verification_question.value === '') { 484 alert("$register_txt{'error_verification_question'}"); 485 document.creator.verification_question.focus(); 486 return false; 487 }~ 488 : q{} 489 ) 490 491 . qq~ 492 var regtype = $regtype; 493 var RegAgree = $RegAgree; 494 var gender_on_reg = $gender_on_reg; 495 if (regtype == 1 && document.creator.reason.value === '') { 496 alert("$register_txt{'error_reason'}"); 497 document.creator.reason.focus(); 498 return false; 499 } 500 if (RegAgree == 2 && document.creator.regagree[0].checked !== true) { 501 alert("$register_txt{'error_agree'}"); 502 return false; 503 } 504 505 if (gender_on_reg > 1 && !document.creator.gender.value) { 506 alert("$register_txt{'error_gender'}"); 507 document.creator.gender.focus(); 508 return false; 509 } 510 return true; 511 } 512 513 function jumpatnext(from,to,length) { 514 window.setTimeout('if (' + from + '.value.length == ' + length + ') ' + to + '.focus();', 1); 515 } 516</script> 517 ~; 518 template(); 519 return; 520} 521 522sub Register2 { 523 if ( !$regtype ) { fatal_error('registration_disabled'); } 524 if ( $RegAgree > 0 && $FORM{'regagree'} ne 'yes' ) { 525 fatal_error('no_regagree'); 526 } 527 my %member; 528 while ( ( $key, $value ) = each %FORM ) { 529 $value =~ s/\A\s+//xsm; 530 $value =~ s/\s+\Z//xsm; 531 if ( $key ne 'reason' ) { $value =~ s/[\n\r]//gxsm; } 532 $member{$key} = $value; 533 } 534 if ( $member{'domain'} ) { $member{'email'} .= $member{'domain'}; } 535# $member{'regusername'} =~ s/\s/_/gxsm; 536 $member{'regrealname'} =~ s/\t+/\ /gsm; 537 538 # If enabled check if user has a valid e-mail address (needs Net::DNS to be installed) 539 if ( $imp_email_check == 1 ) { 540 eval { 541 require Net::DNS; 542 }; 543 if ( !$EVAL_ERROR ) { 544 my $helo; 545 require Mail::CheckUser; 546 Mail::CheckUser->import(qw(check_email last_check)); 547 $Mail::CheckUser::Sender_Addr = $webmaster_email; 548 if ($boardurl =~ /http\:\/\/(.*?)\//){ $Mail::CheckUser::Helo_Domain = $1; } 549 if (check_email($member{'email'})) { 550 my $email_ok = 1; 551 } 552 else { 553 my $failure = last_check()->{code}; 554 fatal_error(q{}, "$mail_check{'address'} $member{'email'} $mail_check{'invalid'} $mail_check{'reason'} $mail_check{$failure}"); 555 } 556 } 557 } 558 559 # Make sure users can't register with banned details 560 email_domain_check( $member{'email'} ); 561 banning( $member{'regusername'}, $member{'email'} ); 562 563# check if there is a system hash named like this by checking existence through size 564 if ( keys( %{ $member{'regusername'} } ) > 0 ) { 565 fatal_error( 'system_prohibited_id', "($member{'regusername'})" ); 566 } 567 if ( length( $member{'regusername'} ) > 25 ) { 568 fatal_error( 'id_to_long', "($member{'regusername'})" ); 569 } 570 if ( $member{'email'} ne $member{'email2'} && $imp_email_check ) { 571 fatal_error( 'email_mismatch' ); 572 } 573 if ( length( $member{'email'} ) > 100 ) { 574 fatal_error( 'email_to_long', "($member{'email'})" ); 575 } 576 if ( $member{'regusername'} eq q{} ) { 577 fatal_error( 'no_username', "($member{'regusername'})" ); 578 } 579 if ( $member{'regusername'} eq q{_} ) { 580 fatal_error( 'id_alfa_only', "($member{'regusername'})" ); 581 } 582 if ( $member{'regusername'} =~ /guest/ixsm ) { 583 fatal_error( 'id_reserved', "$member{'regusername'}" ); 584 } 585 if ( $member{'regusername'} =~ /[^\w\+\-\_\@\.]/sm ) { 586 fatal_error( 'invalid_character', 587 "$register_txt{'35'} $register_txt{'241e'}" ); 588 } 589 if ( $member{'regusername'} =~ /^[0-9]+$/sm ) { 590 fatal_error( 'all_numbers', 591 "$register_txt{'35'} $register_txt{'241n'}" ); 592 } 593 if ( $member{'email'} eq q{} ) { 594 fatal_error( 'no_email', "($member{'regusername'})" ); 595 } 596 if ( -e ("$memberdir/$member{'regusername'}.vars") ) { 597 fatal_error( 'id_taken', "($member{'regusername'})" ); 598 } 599 if ( $member{'regusername'} eq $member{'passwrd1'} ) { 600 fatal_error('password_is_userid'); 601 } 602 if ( $member{'reason'} eq q{} && $regtype == 1 ) { 603 fatal_error('no_reg_reason'); 604 } 605 606 if ( $spamfruits == 1 ) { 607 if ( $member{'ycord'} < 5 || $member{'ycord'} > 70 ) { 608 fatal_error( q{}, "$fruittxt{'6'}" ); 609 } 610 if ( $member{'thefruit'} eq $fruittxt{'2'} 611 && ( $member{'xcord'} < 5 || $member{'xcord'} > 75 ) ) 612 { 613 fatal_error( q{}, "$fruittxt{'6'}" ); 614 } 615 if ( $member{'thefruit'} eq $fruittxt{'3'} 616 && ( $member{'xcord'} < 75 || $member{'xcord'} > 145 ) ) 617 { 618 fatal_error( q{}, "$fruittxt{'6'}" ); 619 } 620 if ( $member{'thefruit'} eq $fruittxt{'4'} 621 && ( $member{'xcord'} < 145 || $member{'xcord'} > 215 ) ) 622 { 623 fatal_error( q{}, "$fruittxt{'6'}" ); 624 } 625 if ( $member{'thefruit'} eq $fruittxt{'5'} 626 && ( $member{'xcord'} < 215 || $member{'xcord'} > 285 ) ) 627 { 628 fatal_error( q{}, "$fruittxt{'6'}" ); 629 } 630 } 631 632 FromChars( $member{'regrealname'} ); 633 $convertstr = $member{'regrealname'}; 634 $convertcut = 30; 635 CountChars(); 636 $member{'regrealname'} = $convertstr; 637 if ($cliped) { 638 fatal_error( 'realname_to_long', 639 "($member{'regrealname'} => $convertstr)" ); 640 } 641 if ( $member{'regrealname'} =~ 642 /[^ \w\x80-\xFF\[\]\(\)#\%\+,\-\|\.:=\?\@\^]/sm ) 643 { 644 fatal_error( 'invalid_character', 645 "$register_txt{'38'} $register_txt{'241re'}" ); 646 } 647 648 if ( $name_cannot_be_userid 649 && lc $member{'regusername'} eq lc $member{'regrealname'} ) 650 { 651 fatal_error('name_is_userid'); 652 } 653 654 if ( 655 lc $member{'regusername'} eq 656 lc MemberIndex( 'check_exist', $member{'regusername'}, 0 ) ) 657 { 658 fatal_error( 'id_taken', "($member{'regusername'})" ); 659 } 660 if ( 661 lc $member{'email'} eq lc MemberIndex( 'check_exist', $member{'email'}, 2 ) 662 ) 663 { 664 fatal_error( 'email_taken', "($member{'email'})" ); 665 } 666 if ( 667 lc $member{'regrealname'} eq 668 lc MemberIndex( 'check_exist', $member{'regrealname'}, 1 ) ) 669 { 670 fatal_error('name_taken'); 671 } 672 if ( Censor( $member{'regusername'} ) ne $member{'regusername'} ) { 673 fatal_error( 'censor1', CheckCensor( $member{'regusername'} ) ); 674 } 675 if ( Censor( $member{'email'} ) ne $member{'email'} ) { 676 fatal_error( 'censor2', CheckCensor( $member{'email'} ) ); 677 } 678 if ( Censor( $member{'regrealname'} ) ne $member{'regrealname'} ) { 679 fatal_error( 'censor3', CheckCensor( $member{'regrealname'} ) ); 680 } 681 if ( $honeypot == 1 && $member{'add_field0'} ne q{} ) { 682 fatal_error('bad_bot'); 683 } 684 685 if ( $regtype == 1 ) { 686 $convertstr = $member{'reason'}; 687 $convertcut = $RegReasonSymbols; 688 CountChars(); 689 $member{'reason'} = $convertstr; 690 691 FromChars( $member{'reason'} ); 692 ToHTML( $member{'reason'} ); 693 ToChars( $member{'reason'} ); 694 $member{'reason'} =~ s/[\n\r]{1,2}/<br \/>/igsm; 695 } 696 697 if ($regcheck) { 698 require Sources::Decoder; 699 validation_check( $member{'verification'} ); 700 } 701 $min_reg_time ||= 0; 702 if ( $min_reg_time > 0 ) { 703 $reg_finish_time = $date - $member{'reg_start_time'}; 704 if ( $reg_finish_time < $min_reg_time || !$member{'reg_start_time'} ) { 705 fatal_error( q{}, "$register_txt{'error_min_reg_time'}" ); 706 } 707 } 708 709 if ( $en_spam_questions && -e "$langdir/$language/spam.questions" ) { 710 SpamQuestionCheck( 711 $member{'verification_question'}, 712 $member{'verification_question_id'} 713 ); 714 } 715 716 if ($emailpassword) { 717 srand; 718 $member{'passwrd1'} = int rand 100; 719 $member{'passwrd1'} =~ tr/0123456789/ymifxupbck/; 720 $_ = int rand 77; 721 $_ =~ tr/0123456789/q8dv7w4jm3/; 722 $member{'passwrd1'} .= $_; 723 $_ = int rand 89; 724 $_ =~ tr/0123456789/y6uivpkcxw/; 725 $member{'passwrd1'} .= $_; 726 $_ = int rand 188; 727 $_ =~ tr/0123456789/poiuytrewq/; 728 $member{'passwrd1'} .= $_; 729 $_ = int rand 65; 730 $_ =~ tr/0123456789/lkjhgfdaut/; 731 $member{'passwrd1'} .= $_; 732 } 733 else { 734 if ( $member{'passwrd1'} ne $member{'passwrd2'} ) { 735 fatal_error( 'password_mismatch', "($member{'regusername'})" ); 736 } 737 if ( $member{'passwrd1'} eq q{} ) { 738 fatal_error( 'no_password', "($member{'regusername'})" ); 739 } 740 if ( $member{'passwrd1'} =~ 741 /[^\s\w!\@#\$\%\^&\*\(\)\+\|`~\-=\\:;'",\.\/\?\[\]\{\}]/xsm ) 742 { 743 fatal_error( 'invalid_character', 744 "$register_txt{'36'} $register_txt{'241'}" ); 745 } 746 } 747 if ( $member{'email'} !~ /^[\w\-\.\+]+\@[\w\-\.\+]+\.\w{2,4}$/xsm ) { 748 fatal_error( 'invalid_character', 749 "$register_txt{'69'} $register_txt{'241e'}" ); 750 } 751 if ( $member{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/xsm 752 || $member{'email'} !~ 753 /\A.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?\Z/xsm ) 754 { 755 fatal_error('invalid_email'); 756 } 757 758 fopen( RESERVE, "$vardir/reserve.txt" ) 759 or fatal_error( 'cannot_open', "$vardir/reserve.txt", 1 ); 760 @reserve = <RESERVE>; 761 fclose(RESERVE); 762 fopen( RESERVECFG, "$vardir/reservecfg.txt" ) 763 or fatal_error( 'cannot_open', "$vardir/reservecfg.txt", 1 ); 764 @reservecfg = <RESERVECFG>; 765 fclose(RESERVECFG); 766 767 for my $aa ( 0 .. ( @reservecfg - 1 ) ) { 768 chomp $reservecfg[$aa]; 769 } 770 $matchword = $reservecfg[0] eq 'checked'; 771 $matchcase = $reservecfg[1] eq 'checked'; 772 $matchuser = $reservecfg[2] eq 'checked'; 773 $matchname = $reservecfg[3] eq 'checked'; 774 $namecheck = 775 $matchcase eq 'checked' 776 ? $member{'regusername'} 777 : lc $member{'regusername'}; 778 $realnamecheck = 779 $matchcase eq 'checked' 780 ? $member{'regrealname'} 781 : lc $member{'regrealname'}; 782 783 foreach my $reserved (@reserve) { 784 chomp $reserved; 785 $reservecheck = $matchcase ? $reserved : lc $reserved; 786 if ($matchuser) { 787 if ($matchword) { 788 if ( $namecheck eq $reservecheck ) { 789 fatal_error( 'id_reserved', "$reserved" ); 790 } 791 } 792 else { 793 if ( $namecheck =~ $reservecheck ) { 794 fatal_error( 'id_reserved', "$reserved" ); 795 } 796 } 797 } 798 if ($matchname) { 799 if ($matchword) { 800 if ( $realnamecheck eq $reservecheck ) { 801 fatal_error( 'name_reserved', "$reserved" ); 802 } 803 } 804 else { 805 if ( $realnamecheck =~ $reservecheck ) { 806 fatal_error( 'name_reserved', "$reserved" ); 807 } 808 } 809 } 810 } 811 812 if ($default_template) { $new_template = $default_template; } 813 else { $new_template = q~Forum default~; } 814 815 # check if user isn't already registered 816 if ( -e ("$memberdir/$member{'regusername'}.vars") ) { 817 fatal_error('id_taken'); 818 } 819 820 # check if user isn't already in pre-registration 821 if ( -e ("$memberdir/$member{'regusername'}.pre") ) { 822 fatal_error('already_preregged'); 823 } 824 if ( -e ("$memberdir/$member{'regusername'}.wait") ) { 825 fatal_error('already_preregged'); 826 } 827 828 if ( $new_template !~ m{\A[0-9a-zA-Z\_\(\)\ \#\%\-\:\+\?\$\&\~\.\,\@]+\Z}xsm 829 && $new_template ne q{} ) 830 { 831 fatal_error('invalid_template'); 832 } 833 if ( $member{'language'} !~ 834 m{\A[0-9a-zA-Z\_\(\)\ \#\%\-\:\+\?\$\&\~\.\,\@]+\Z}xsm 835 && $member{'language'} ne q{} ) 836 { 837 fatal_error('invalid_language'); 838 } 839 840 ToHTML( $member{'language'} ); 841 842 $reguser = $member{'regusername'}; 843 $registerdate = timetostring($date); 844 $language = $member{'language'}; 845 846 ToHTML( $member{'regrealname'} ); 847 848 if ($birthday_on_reg) { 849 $member{'birth_month'} =~ s/\D//gxsm; 850 $member{'birth_day'} =~ s/\D//gxsm; 851 $member{'birth_year'} =~ s/\D//gxsm; 852 if ( $birthday_on_reg == 1 ) { 853 if ( length( $member{'birth_month'} ) < 2 854 || $member{'birth_month'} < 1 855 || $member{'birth_month'} > 12 ) 856 { 857 $member{'birth_month'} = q{}; 858 } 859 if ( length( $member{'birth_day'} ) < 2 860 || $member{'birth_day'} < 1 861 || $member{'birth_day'} > 31 ) 862 { 863 $member{'birth_day'} = q{}; 864 } 865 if ( length( $member{'birth_year'} ) < 4 866 || $member{'birth_year'} < ( $year - 120 ) 867 || $member{'birth_year'} > $year ) 868 { 869 $member{'birth_year'} = q{}; 870 } 871 if ( $member{'birth_day'} 872 && $member{'birth_month'} 873 && $member{'birth_year'} ) 874 { 875 ${ $uid . $reguser }{'bday'} = 876"$member{'birth_month'}/$member{'birth_day'}/$member{'birth_year'}"; 877 } 878 } 879 elsif ( $birthday_on_reg == 2 ) { 880 if ( length( $member{'birth_month'} ) < 2 881 || $member{'birth_month'} < 1 882 || $member{'birth_month'} > 12 ) 883 { 884 fatal_error( q{}, $register_txt{'error_birth_month'} ); 885 } 886 if ( length( $member{'birth_day'} ) < 2 887 || $member{'birth_day'} < 1 888 || $member{'birth_day'} > 31 ) 889 { 890 fatal_error( q{}, $register_txt{'error_birth_day'} ); 891 } 892 if ( length( $member{'birth_year'} ) < 4 ) { 893 fatal_error( q{}, $register_txt{'error_birth_year'} ); 894 } 895 if ( $member{'birth_year'} < ( $year - 120 ) 896 || $member{'birth_year'} > $year ) 897 { 898 fatal_error( q{}, $register_txt{'error_birth_year_real'} ); 899 } 900 ${ $uid . $reguser }{'bday'} = 901"$member{'birth_month'}/$member{'birth_day'}/$member{'birth_year'}"; 902 } 903 } 904 if ($gender_on_reg) { 905 ${ $uid . $reguser }{'gender'} = $member{'gender'}; 906 if ( $editGenderLimit && ${ $uid . $reguser }{'gender'} ne q{} ) { 907 ${ $uid . $reguser }{'disablegender'} = 1; 908 } 909 } 910 if ( $birthday_on_reg 911 && $editAgeLimit 912 && ${ $uid . $reguser }{'bday'} ne q{} ) 913 { 914 ${ $uid . $reguser }{'disableage'} = 1; 915 } 916 917 ${ $uid . $reguser }{'password'} = encode_password( $member{'passwrd1'} ); 918 ${ $uid . $reguser }{'realname'} = $member{'regrealname'}; 919 ${ $uid . $reguser }{'email'} = lc $member{'email'}; 920 ${ $uid . $reguser }{'postcount'} = 0; 921 ${ $uid . $reguser }{'regreason'} = $member{'reason'}; 922 ${ $uid . $reguser }{'usertext'} = $defaultusertxt; 923 ${ $uid . $reguser }{'userpic'} = $my_blank_avatar; 924 ${ $uid . $reguser }{'regdate'} = $registerdate; 925 ${ $uid . $reguser }{'regtime'} = $date; 926 ${ $uid . $reguser }{'timeselect'} = $timeselected; 927 ${ $uid . $reguser }{'lastips'} = $user_ip; 928 ${ $uid . $reguser }{'hidemail'} = $member{'hideemail'} ? 1 : 0; 929 ${ $uid . $reguser }{'timeformat'} = q~MM D+ YYYY @ HH:mm:ss*~; 930 ${ $uid . $reguser }{'template'} = $new_template; 931 ${ $uid . $reguser }{'language'} = $language; 932 ${ $uid . $reguser }{'pageindex'} = q~1|1|1|1~; 933 934 if ( ( $addmemgroup_enabled == 1 || $addmemgroup_enabled == 3 ) 935 && $member{'joinmemgroup'} ne q{} ) 936 { 937 my @newmemgr; 938 foreach ( split /, /sm, $member{'joinmemgroup'} ) { 939 if ( $NoPost{$_} && ( split /\|/xsm, $NoPost{$_} )[10] == 1 ) { 940 push @newmemgr, $_; 941 } 942 } 943 ${ $uid . $reguser }{'addgroups'} = join q{,}, @newmemgr; 944 } 945 946 if ( $regtype == 1 || $regtype == 2 ) { 947 my ( @reglist, @x ); 948 949 # If a pre-registration list exists load it 950 if ( -e "$memberdir/memberlist.inactive" ) { 951 fopen( INACT, "$memberdir/memberlist.inactive" ); 952 @reglist = <INACT>; 953 fclose(INACT); 954 } 955 956 # If a approve-registration list exists load it too 957 if ( -e "$memberdir/memberlist.approve" ) { 958 fopen( APPROVE, "$memberdir/memberlist.approve" ); 959 push @reglist, <APPROVE>; 960 fclose(APPROVE); 961 } 962 foreach (@reglist) { 963 @x = split /\|/xsm, $_; 964 if ( $reguser eq $x[2] ) { fatal_error('already_preregged'); } 965 if ( lc $member{'email'} eq lc $x[4] ) { 966 fatal_error('email_already_preregged'); 967 } 968 } 969 970 # create pre-registration .pre file and write log and inactive list 971 require Sources::Decoder; 972 validation_code(); 973 $activationcode = substr $sessionid, 0, 20; 974 975 if ($extendedprofiles) { 976 require Sources::ExtendedProfiles; 977 my $error = ext_validate_submition( $reguser, $reguser ); 978 if ( $error ne q{} ) { 979 fatal_error( 'extended_profiles_validation', $error ); 980 } 981 ext_saveprofile($reguser); 982 } 983 984 UserAccount( $reguser, 'preregister' ); 985 if ($do_scramble_id) { $cryptuser = cloak($reguser); } 986 else { $cryptuser = $reguser; } 987 988 if ($emailpassword) { $regpass = $member{'passwrd1'}; } 989 else { $regpass = encode_password( $member{'passwrd1'} ); } 990 fopen( INACT, ">>$memberdir/memberlist.inactive", 1 ); 991 print {INACT} 992 "$date|$activationcode|$reguser|$regpass|$member{'email'}|$user_ip\n" 993 or croak "$croak{'print'} INACT"; 994 fclose(INACT); 995 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 996 print {REGLOG} "$date|N|$member{'regusername'}||$user_ip\n" 997 or croak "$croak{'print'} REGLOG"; 998 fclose(REGLOG); 999 1000 ## send an e-mail to the user that registration is pending e-mail validation within the given timespan. ## 1001 my $templanguage = $language; 1002 $language = $member{'language'}; 1003 LoadLanguage('Email'); 1004 sendmail( 1005 ${ $uid . $reguser }{'email'}, 1006 "$mailreg_txt{'apr_result_activate'} $mbname", 1007 template_email( 1008 $preregemail, 1009 { 1010 'displayname' => $member{'regrealname'}, 1011 'username' => $reguser, 1012 'cryptusername' => $cryptuser, 1013 'password' => $member{'passwrd1'}, 1014 'activationcode' => $activationcode, 1015 'preregspan' => $preregspan 1016 } 1017 ), 1018 q{}, 1019 $emailcharset 1020 ); 1021 $language = $templanguage; 1022 $yymain .= $myregister_pending; 1023 $yytitle = "$prereg_txt{'1a'}"; 1024 1025 } 1026 else { 1027 if ($extendedprofiles) { 1028 require Sources::ExtendedProfiles; 1029 my $error = ext_validate_submition( $reguser, $reguser ); 1030 if ( $error ne q{} ) { 1031 fatal_error( 'extended_profiles_validation', $error ); 1032 } 1033 ext_saveprofile($reguser); 1034 } 1035 UserAccount( $reguser, 'register' ); 1036 MemberIndex( 'add', $reguser ); 1037 FormatUserName($reguser); 1038 1039 if ( $send_welcomeim == 1 ) { 1040 1041# new format msg file: 1042# messageid|(from)user|(touser(s))|(ccuser(s))|(bccuser(s))|subject|date|message|(parentmid)|reply#|ip|messagestatus|flags|storefolder|attachment 1043 $messageid = $BASETIME . $PROCESS_ID; 1044 fopen( IM, ">$memberdir/$member{'regusername'}.msg", 1 ); 1045 print {IM} 1046"$messageid|$sendname|$member{'regusername'}|||$imsubject|$date|$imtext|$messageid|0|$ENV{'REMOTE_ADDR'}|s|u||\n" 1047 or croak "$croak{'print'} IM"; 1048 fclose(IM); 1049 } 1050 if ($new_member_notification) { 1051 my $templanguage = $language; 1052 $language = $lang; 1053 LoadLanguage('Email'); 1054 sendmail( 1055 $new_member_notification_mail, 1056 $mailreg_txt{'new_member_info'}, 1057 template_email( 1058 $newmemberemail, 1059 { 1060 'displayname' => $member{'regrealname'}, 1061 'username' => $reguser, 1062 'userip' => $user_ip, 1063 'useremail' => ${ $uid . $reguser }{'email'} 1064 } 1065 ), 1066 q{}, 1067 $emailcharset 1068 ); 1069 $language = $templanguage; 1070 } 1071 1072 if ($emailpassword) { 1073 my $templanguage = $language; 1074 $language = $member{'language'}; 1075 LoadLanguage('Email'); 1076 sendmail( 1077 ${ $uid . $reguser }{'email'}, 1078 "$mailreg_txt{'apr_result_info'} $mbname", 1079 template_email( 1080 $passwordregemail, 1081 { 1082 'displayname' => $member{'regrealname'}, 1083 'username' => $reguser, 1084 'password' => $member{'passwrd1'} 1085 } 1086 ), 1087 q{}, 1088 $emailcharset 1089 ); 1090 $language = $templanguage; 1091 $yymain .= $myregister_password; 1092 } 1093 else { 1094 if ($emailwelcome) { 1095 my $templanguage = $language; 1096 $language = $member{'language'}; 1097 LoadLanguage('Email'); 1098 sendmail( 1099 ${ $uid . $reguser }{'email'}, 1100 "$mailreg_txt{'apr_result_info'} $mbname", 1101 template_email( 1102 $welcomeregemail, 1103 { 1104 'displayname' => $member{'regrealname'}, 1105 'username' => $reguser, 1106 'password' => $member{'passwrd1'} 1107 } 1108 ), 1109 q{}, 1110 $emailcharset 1111 ); 1112 $language = $templanguage; 1113 } 1114 $yymain .= $myregister_welcome; 1115 $yymain =~ s/{yabb regusername}/$member{'regusername'}/sm; 1116 $yymain =~ s/{yabb passwrd1}/$member{'passwrd1'}/sm; 1117 $yymain =~ s/{yabb Cookie_Length}/$Cookie_Length/sm; 1118 } 1119 $yytitle = "$register_txt{'245'}"; 1120 } 1121 template(); 1122 return; 1123} 1124 1125sub user_activation { 1126 my ( $reguse, $active ) = @_; 1127 $changed = 0; 1128 $reguser = $reguse || $INFO{'username'}; 1129 $activationkey = $active || $INFO{'activationkey'}; 1130 if ( !$reguser ) { fatal_error('wrong_id'); } 1131 if ($do_scramble_id) { $reguser = decloak($reguser); } 1132 if ( !-e "$memberdir/$reguser.pre" && -e "$memberdir/$reguser.vars" ) { 1133 fatal_error('already_activated'); 1134 } 1135 if ( ( $regtype != 1 && !-e "$memberdir/$reguser.pre" ) || ( $regtype == 1 && !-e "$memberdir/$reguser.pre" && !-e "$memberdir/$reguser.wait" ) ) { fatal_error('prereg_expired'); } 1136 elsif ( $regtype == 1 && -e "$memberdir/$reguser.wait" ) { fatal_error('prereg_wait'); } 1137 # If a pre-registration list exists load it 1138 if ( -e "$memberdir/memberlist.inactive" ) { 1139 fopen( INACT, "$memberdir/memberlist.inactive" ); 1140 @reglist = <INACT>; 1141 fclose(INACT); 1142 } 1143 else { 1144 1145 # add entry to registration log 1146 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 1147 print {REGLOG} "$date|E|$reguser||$user_ip\n" 1148 or croak "$croak{'print'} REGLOG"; 1149 fclose(REGLOG); 1150 fatal_error('prereg_expired'); 1151 } 1152 if ( $regtype == 1 && -e "$memberdir/memberlist.approve" ) { 1153 fopen( APR, "$memberdir/memberlist.approve" ); 1154 @aprlist = <APR>; 1155 fclose(APR); 1156 } 1157 1158 # check if user is in pre-registration and check activation key 1159 foreach (@reglist) { 1160 ( $regtime, $testkey, $regmember, $regpassword, undef ) = 1161 split /\|/xsm, $_, 5; 1162 1163 if ( $regmember ne $reguser ) { 1164 push @chnglist, $_; # update non activate user list 1165 } 1166 else { 1167 my $templanguage = $language; 1168 if ( $activationkey ne $testkey ) { 1169 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 1170 print {REGLOG} "$date|E|$reguser||$user_ip\n" 1171 or croak "$croak{'print'} REGLOG"; 1172 1173 # add entry to registration log 1174 fclose(REGLOG); 1175 fatal_error('wrong_code'); 1176 1177 } 1178 elsif ( $regtype == 1 ) { 1179 1180 # user is in list and the keys match, so move him/her for admin approval 1181 unshift @aprlist, $_; 1182 1183 rename "$memberdir/$reguser.pre", "$memberdir/$reguser.wait"; 1184 1185 # add entry to registration log 1186 if ( $iamadmin || $iamgmod ) { $actuser = $username; } 1187 else { $actuser = $reguser; } 1188 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 1189 print {REGLOG} "$date|W|$reguser|$actuser|$user_ip\n" 1190 or croak "$croak{'print'} REGLOG"; 1191 fclose(REGLOG); 1192 1193 LoadUser($reguser); 1194 $language = ${ $uid . $reguser }{'language'}; 1195 LoadLanguage('Email'); 1196 sendmail( 1197 ${ $uid . $reguser }{'email'}, 1198 "$mailreg_txt{'apr_result_wait'} $mbname", 1199 template_email( 1200 $approveregemail, 1201 { 1202 'username' => $reguser, 1203 'displayname' => ${ $uid . $reguser }{'realname'} 1204 } 1205 ), 1206 q{}, 1207 $emailcharset 1208 ); 1209 1210 } 1211 elsif ( $regtype == 2 ) { 1212 LoadUser($reguser); 1213 1214 # check if email is already in active use 1215 if ( 1216 lc ${ $uid . $reguser }{'email'} eq 1217 lc MemberIndex( 'check_exist', 1218 ${ $uid . $reguser }{'email'}, 2 ) ) 1219 { 1220 fatal_error( 'email_taken', "(${$uid.$reguser}{'email'})" ); 1221 } 1222 1223 # user is in list and the keys match, so let him/her in 1224 rename "$memberdir/$reguser.pre", "$memberdir/$reguser.vars"; 1225 MemberIndex( 'add', $reguser ); 1226 1227 if ( $iamadmin || $iamgmod ) { $actuser = $username; } 1228 else { $actuser = $reguser; } 1229 1230 # add entry to registration log 1231 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 1232 print {REGLOG} "$date|A|$reguser|$actuser|$user_ip\n" 1233 or croak "$croak{'print'} REGLOG"; 1234 fclose(REGLOG); 1235 1236 if ($emailpassword) { 1237 chomp $regpassword; 1238 $language = ${ $uid . $reguser }{'language'}; 1239 LoadLanguage('Email'); 1240 sendmail( 1241 ${ $uid . $reguser }{'email'}, 1242 "$mailreg_txt{'apr_result_validate'} $mbname", 1243 template_email( 1244 $activatedpassregemail, 1245 { 1246 'displayname' => 1247 ${ $uid . $reguser }{'realname'}, 1248 'username' => $reguser, 1249 'password' => $regpassword 1250 } 1251 ), 1252 q{}, 1253 $emailcharset 1254 ); 1255 $yymain .= $myregister_table_a; 1256 $sharedLogin_title = $register_txt{'97'}; 1257 $sharedLogin_text = $register_txt{'703'}; 1258 $yymain .= $myregister_table_b; 1259 1260 } 1261 elsif ($emailwelcome) { 1262 chomp $regpassword; 1263 $language = ${ $uid . $reguser }{'language'}; 1264 LoadLanguage('Email'); 1265 sendmail( 1266 ${ $uid . $reguser }{'email'}, 1267 "$mailreg_txt{'apr_result_validate'} $mbname", 1268 template_email( 1269 $activatedwelcomeregemail, 1270 { 1271 'displayname' => 1272 ${ $uid . $reguser }{'realname'}, 1273 'username' => $reguser, 1274 'password' => $regpassword 1275 } 1276 ), 1277 q{}, 1278 $emailcharset 1279 ); 1280 } 1281 } 1282 1283 if ( $send_welcomeim == 1 ) { 1284 1285# new format msg file: 1286# messageid|(from)user|(touser(s))|(ccuser(s))|(bccuser(s))|subject|date|message|(parentmid)|reply#|ip|messagestatus|flags|storefolder|attachment 1287 $messageid = $BASETIME . $PROCESS_ID; 1288 fopen( INBOX, ">$memberdir/$reguser.msg" ); 1289 print {INBOX} 1290"$messageid|$sendname|$reguser|||$imsubject|$date|$imtext|$messageid|0|$ENV{'REMOTE_ADDR'}|s|u||\n" 1291 or croak "$croak{'print'} INBOX"; 1292 fclose(INBOX); 1293 } 1294 if ($new_member_notification) { 1295 $language = $lang; 1296 LoadLanguage('Email'); 1297 sendmail( 1298 $new_member_notification_mail, 1299 $mailreg_txt{'new_member_info'}, 1300 template_email( 1301 $newmemberemail, 1302 { 1303 'displayname' => ${ $uid . $reguser }{'realname'}, 1304 'username' => $reguser, 1305 'userip' => $user_ip, 1306 'useremail' => ${ $uid . $reguser }{'email'} 1307 } 1308 ), 1309 q{}, 1310 $emailcharset 1311 ); 1312 } 1313 $language = $templanguage; 1314 $changed = 1; 1315 } 1316 } 1317 1318 if ($changed) { 1319 1320 # if changed write new inactive list 1321 fopen( INACT, ">$memberdir/memberlist.inactive" ); 1322 print {INACT} @chnglist or croak "$croak{'print'} INACT"; 1323 fclose(INACT); 1324 1325 # update approval user list 1326 if ( $regtype == 1 ) { 1327 fopen( APR, ">$memberdir/memberlist.approve" ); 1328 print {APR} @aprlist or croak "$croak{'print'} APR"; 1329 fclose(APR); 1330 } 1331 } 1332 else { 1333 1334 # add entry to registration log 1335 fopen( REGLOG, ">>$vardir/registration.log", 1 ); 1336 print {REGLOG} "$date|E|$reguser|$user_ip\n" 1337 or croak "$croak{'print'} REGLOG"; 1338 fclose(REGLOG); 1339 fatal_error('wrong_id'); 1340 } 1341 1342 if ( $regtype == 1 ) { 1343 $yymain .= $myregister_prereg1; 1344 $yytitle = "$prereg_txt{'1b'}"; 1345 1346 } 1347 elsif ( $regtype == 2 ) { 1348 $yymain .= $myregister_prereg2; 1349 if ( !$emailpassword ) { $yymain .= $prereg_txt{'5a'}; } 1350 $yymain .= qq~$prereg_txt{'5b'}<br /><br />~; 1351 if ($emailpassword) { 1352 $yymain .= qq~$register_txt{'703'}<br /> <br />~; 1353 } 1354 $yymain .= $myregister_enddiv; 1355 1356 if ( !$iamadmin && !$iamgmod ) { 1357 if ( !$emailpassword ) { 1358 $yymain .= $myregister_div_a; 1359 require Sources::LogInOut; 1360 $yymain .= sharedLogin(); 1361 $yymain .= $myregister_div_b; 1362 } 1363 else { 1364 $yymain .= q~<br /><br />~; 1365 } 1366 } 1367 $yytitle = "$prereg_txt{'5'}"; 1368 } 1369 1370 if ( $iamadmin || $iamgmod ) { 1371 $yySetLocation = qq~$adminurl?action=view_reglog~; 1372 redirectexit(); 1373 } 1374 else { 1375 template(); 1376 } 1377 return; 1378} 1379 13801; 1381