###############################################################################
# Register.pl                                                                 #
###############################################################################
# YaBB: Yet another Bulletin Board                                            #
# Open-Source Community Software for Webmasters                               #
# Version:        YaBB 1 Gold - SP 1.1                                        #
# Released:       December 2001; Updated March 22, 2002                       #
# Distributed by: http://www.yabbforum.com                                    #
# =========================================================================== #
# Copyright (c) 2000-2002 Xnull (www.xnull.com) - All Rights Reserved.        #
# Software by: The YaBB Development Team                                      #
#              with assistance from the YaBB community.                       #
###############################################################################
$registerplver = "1 Gold - SP 1.1";
sub Register {
##### Advanced Registration Options #####
if ($regop == 2) { &fatal_error("$regtxt{'12'}"); }
if ($regop == 0) {
	$regtext = qq($txt{'97'} $txt{'517'});
	} elsif ($regop == 3) {
$regtext = qq($regtxt{'57'});
} else {
	$regtext = qq($regtxt{'16'});
}
##### Advanced Registration Options #####
	$yymain .= qq~
~;
##### Advanced Registration Options #####
if ($regop == 1) { $yymain .= qq~
	~;
}
if( $regop == 3) { $yymain .= qq~
| 
    
     | $regtxt{'34'}: |  |  
     | * $regtxt{'32'} |  | 
~;
}
##### Advanced Registration Options #####
if ($RegAgree) {
	fopen(FILE, "$vardir/agreement.txt");
	@agreement = ;
	fclose(FILE);
	$fullagree = join( "", @agreement );
	$fullagree =~ s/\n/
/g;
	$yymain .= qq~
~;
}
	$yymain .= qq~
~;
	$yytitle = "$txt{'97'}";
	&template;
	exit;
}
sub Register2 {
	if($FORM{'regagree'} eq "no") {
		$yySetLocation = qq~$scripturl~;
		&redirectexit;
	}
##### Advanced Registration Options #####
if ($regop == 2) { $yymain .= qq~
	
	
	| $regtxt{'08'} | 
	
	| $regtxt{'12'} | 
	
	~;
	&template;
	exit;
}
##### Advanced Registration Options #####
	my %member;
	while( ($key,$value) = each(%FORM) ) {
		$value =~ s~\A\s+~~;
		$value =~ s~\s+\Z~~;
		$value =~ s~[\n\r]~~g;
		$member{$key} = $value;
	}
	$member{'username'} =~ s/\s/_/g;
	if (length($member{'username'}) > 25) { $member{'username'} = substr($member{'username'},0,25); }
	&fatal_error("($member{'username'}) $txt{'37'}") if($member{'username'} eq '');
	&fatal_error("($member{'username'}) $txt{'99'}") if($member{'username'} eq '_' || $member{'username'} eq '|');
	&fatal_error("$txt{'244'} $member{'username'}") if($member{'username'} =~ /guest/i);
	&fatal_error("$txt{'240'} $txt{'35'} $txt{'241'}") if($member{'username'} !~ /\A[0-9A-Za-z#%+-\.@^_]+\Z/);
	&fatal_error("$txt{'240'}") if($member{'username'} =~ /,/);
	&fatal_error("($member{'username'}) $txt{'76'}") if($member{'email'} eq "");
	&fatal_error("($member{'username'}) $txt{'100'}") if(-e ("$memberdir/$member{'username'}.dat"));
if ($send_welcomeim == 1) {
$messageid = $^T.$$;
	$imtext =~ s/\&\&/\n/g;
	$imtext =~ s/\<//g;
$imtext =~ s/</g;
$imtext =~ s/>/>/g;
$imtext =~ s/\t/ \  \  \ /g;
$imtext =~ s/\cM//g;
$imtext =~ s/\n/
/g;
$imtext =~ s/\|/\|/g;
fopen(FILE,">$memberdir/$member{'username'}.msg", 1);
print FILE "$sendname|$imsubject|$date|$imtext|$messageid|$ENV{'REMOTE_ADDR'}|1\n";
fclose(FILE);
}
	if( $emailpassword ) {
		srand();
		$member{'passwrd1'} = int( rand(100) );
		$member{'passwrd1'} =~ tr/0123456789/ymifxupbck/;
		$_ = int( rand(77) );
		$_ =~ tr/0123456789/q8dv7w4jm3/;
		$member{'passwrd1'} .= $_;
		$_ = int( rand(89) );
		$_ =~ tr/0123456789/y6uivpkcxw/;
		$member{'passwrd1'} .= $_;
		$_ = int( rand(188) );
		$_ =~ tr/0123456789/poiuytrewq/;
		$member{'passwrd1'} .= $_;
		$_ = int( rand(65) );
		$_ =~ tr/0123456789/lkjhgfdaut/;
		$member{'passwrd1'} .= $_;
	} else {
		&fatal_error("($member{'username'}) $txt{'213'}") if($member{'passwrd1'} ne $member{'passwrd2'});
		&fatal_error("($member{'username'}) $txt{'91'}") if($member{'passwrd1'} eq '');
		&fatal_error("$txt{'240'} $txt{'36'} $txt{'241'}") if($member{'passwrd1'} !~ /\A[\s0-9A-Za-z!@#$%\^&*\(\)_\+|`~\-=\\:;'",\.\/?\[\]\{\}]+\Z/);
	}
	&fatal_error("$txt{'240'} $txt{'69'} $txt{'241'}") if($member{'email'} !~ /\A[0-9A-Za-z@\._\-]+\Z/);
	&fatal_error("$txt{'500'}") if(($member{'email'} =~ /(@.*@)|(\.\.)|(@\.)|(\.@)|(^\.)|(\.$)/) || ($member{'email'} !~ /\A.+@\[?(\w|[-.])+\.[a-zA-Z]{2,4}|[0-9]{1,4}\]?\Z/));
	fopen(FILE, "$vardir/ban_email.txt");
	@banned = ;
	fclose(FILE);
	foreach $curban (@banned) {
		if($member{'email'} eq "$curban") { &fatal_error("$txt{'678'}$txt{'430'}!"); }
	}
##### Advanced Registration Options #####
	if ($regop == 1) {
	$Admin = $member{'AdminName'};
	$Passcode = $member{'AdminPass'};
	### CHECK IF NAME WAS ENTERED ###
		if ($Admin eq "") { &fatal_error($regtxt{'06'}); }
	### END CHECK IF NAME WAS ENTERED ###
	### CHECK FOR VALID USER ACCOUNT ###
	$FORM{'AdminName'} =~ s/\s/_/g;
	$Admin = $FORM{'AdminName'};
		if(-e("$memberdir/$Admin.dat")) {
			fopen(FILE, "$memberdir/$Admin.dat");
			@member = ;
			chomp($member[7]);
			fclose(FILE);
		}
		else { &fatal_error("$regtxt{'07'}"); }
	### END CHECK FOR VALID USER ACCOUNT ###
	### CHECK IF A PASSWORD WAS ENTERED ###
		if ($Passcode eq "") { &fatal_error("$regtxt{'10'} $Admin!"); }
	### END CHECK IF A PASSWORD WAS ENTERED ###
	### CHECK IF PASSWORD WAS CORRECT ###
		chomp($member[0]);
		if($member[0] ne "$Passcode") { &fatal_error("$regtxt{'11'} $Admin!"); }
	### END CHECK IF PASSWORD WAS CORRECT ###
	
	### CHECK IF USER IS AN ADMIN ###
		if ($member[7] ne 'Administrator') { &fatal_error("$regtxt{'09'}"); }
	### END CHECK IF USER IS AN ADMIN ###
	}
##### Advanced Registration Options #####
	fopen(FILE, "$memberdir/memberlist.txt");
	@memberlist = ;
	fclose(FILE);
	$testname = lc $member{'username'};
	for ($a = 0; $a < @memberlist; $a++) {
		chomp $memberlist[$a];
		$membername = lc $memberlist[$a];
		if( fopen(FILE2, "$memberdir/$memberlist[$a].dat") ) {
			# Load users and check email
			if( !$yyUDLoaded{$memberlist[$a]} && -e("$memberdir/$memberlist[$a].dat") ) {
				# If user is not in memory, s/he must be loaded.
				&LoadUser($memberlist[$a]);
				if($userprofile{$memberlist[$a]}->[2] eq $member{'email'}) { &fatal_error("$txt{'730'} ($member{'email'}) $txt{'731'}"); }
			}
			$tmpa=;
			$realname=;
			fclose(FILE2);
			chomp $realname;
			$realname = lc $realname;
			if ($realname eq $testname || $membername eq $testname) { &fatal_error("($member{'username'}) $txt{'473'}"); }
		}
		elsif( $testname eq $membername ) { &fatal_error("($member{'username'}) $txt{'473'}"); }
	}
	&ToHTML($member{'email'});
	fopen(FILE, "$vardir/reserve.txt") || &fatal_error("$txt{'23'} reserve.txt");
	@reserve = ;
	fclose(FILE);
	fopen(FILE, "$vardir/reservecfg.txt") || &fatal_error("$txt{'23'} reservecfg.txt");
	@reservecfg = ;
	fclose(FILE);
	for( $a = 0; $a < @reservecfg; $a++ ) {
		chomp $reservecfg[$a];
	}
	$matchword = $reservecfg[0] eq 'checked';
	$matchcase = $reservecfg[1] eq 'checked';
	$matchuser = $reservecfg[2] eq 'checked';
	$matchname = $reservecfg[3] eq 'checked';
	$namecheck = $matchcase eq 'checked' ? $member{'username'} : lc $member{'username'};
	foreach $reserved (@reserve) {
		chomp $reserved;
		$reservecheck = $matchcase ? $reserved : lc $reserved;
		if ($matchuser) {
			if ($matchword) {
				if ($namecheck eq $reservecheck) { &fatal_error("$txt{'244'} $reserved"); }
			}
			else {
				if ($namecheck =~ $reservecheck) { &fatal_error("$txt{'244'} $reserved"); }
			}
		}
	}
	&fatal_error("$txt{'100'})") if(-e ("$memberdir/$member{'username'}.dat"));
	require "$sourcedir/ExtendedProfiles.pl";
	my $error = &ext_validate_submition($member{'username'},$member{'username'});
	if ($error ne "") { &fatal_error($error); } else { &ext_saveprofile($member{'username'}); }
	fopen(FILE, ">$memberdir/$member{'username'}.dat");
	print FILE "$member{'passwrd1'}\n";
	print FILE "$member{'username'}\n";
	print FILE "$member{'email'}\n";
	print FILE "\n\n\n0\n\n\n\n\n\n$txt{'209'}\nblank.gif\n$date\n\n\n\n\n";
	if ($FORM{'hideemail'} ne "checked") { $FORM{'hideemail'} = ""; }
	print FILE "$FORM{'hideemail'}\n";
	fclose(FILE);
	if($regop == 3) {
		fopen(FILE, "$memberdir/memberlist.crg");
		@curconf = ;
		fclose(FILE);
		chomp @curconf;
		fopen(FILE, ">$memberdir/memberlist.crg", 1);
		foreach $curmem (@curconf) { print FILE "$curmem\n"; }
		print FILE "$member{'username'}\n";
		fclose(FILE);
	} else {
	fopen(FILE, ">$memberdir/memberlist.txt", 1);
	foreach $curmem (@memberlist) { print FILE "$curmem\n"; }
	print FILE "$member{'username'}\n";
	fclose(FILE);
	}
	my $membershiptotal = @memberlist + 1;
	my $membershiptotalx = @memberlist;
	if($regop != 3) {
		fopen(FILE, "+>$memberdir/members.ttl");
		print FILE qq~$membershiptotal|$member{'username'}~;
		fclose(FILE);
	}else {
		fopen(FILE, "$memberdir/members.ttl");
		$tmpb = ;
		fclose(FILE);
		($tmp, $tmpa) = split(/\|/, $tmpb);
		fopen(FILE, "+>$memberdir/members.ttl");
		print FILE qq~$membershiptotalx|$tmpa~;
		fclose(FILE);
	}
##### Advanced Registration Options #####
if ($regop == 1 && $reglog == 1) {
	fopen(LIST, ">>$memberdir/newreg.txt");
	print LIST "$member{'username'}|$member{'AdminName'}|$ENV{'REMOTE_ADDR'}|$date\n";
	close(LIST);
}
if ($regop == 3) {
	fopen(LIST, ">$memberdir/$member{'username'}.crg", 1);
	print LIST "$ENV{'REMOTE_ADDR'}\n";
	print LIST "$member{'reason'}";
	fclose(LIST);
}
##### Advanced Registration Options #####
	###### Start YaMS add-on Member-number ######
	fopen(FILE, "$memberdir/membernumb.txt");
	@membernumb = ;
	$membernumber = @membernumb;
	fclose(FILE);
	fopen(FILE, ">$memberdir/membernumb.txt", 1);
	foreach $curnum (@membernumb) {
		chomp $curnum;
		print FILE "$curnum\n";
	}
	print FILE "$membernumber|$member{'username'}\n";
	fclose(FILE);
	fopen(FILE, ">$memberdir/$member{'username'}.yam");
	print FILE "$membernumber\n";
	print FILE "0|0|0\n";
	fclose(FILE);
	chmod(0666,"$memberdir/$member{'username'}.yam");
	###### End YaMS add-on Member-number ######
	&FormatUserName($member{'username'});
	if($emailpassword && $regop != 3) {
		&sendmail($member{'email'},"$txt{'700'} $mbname", "$txt{'248'} $member{'username'}!\n\n$txt{'719'} $member{'username'}, $txt{'492'} $member{'passwrd1'}\n\n$txt{'701'}\n$scripturl?action=profile;username=$useraccount{$member{'username'}}\n\n$txt{'130'}");
		$yymain .= qq~
~;
		require "$sourcedir/LogInOut.pl";
		$sharedLogin_title="$txt{'97'}";
		$sharedLogin_text="$txt{'703'}";
		&sharedLogin;
		
require "$sourcedir/ExtendedProfiles.pl";
$yymain .= &ext_register . qq~
  
  
	}
	elsif($emailpassword && $regop == 3) {
		&sendmail($member{'email'},"$txt{'700'} $mbname", "$txt{'248'} $member{'username'}!\n\n$txt{'719'} $member{'username'}, $txt{'492'} $member{'passwrd1'}.\n\n$regtxt{'45'}\n\n$txt{'130'}");
		$yymain .= qq~
~;
		require "$sourcedir/LogInOut.pl";
		$sharedLogin_title="$txt{'97'}";
		$sharedLogin_text="$txt{'703'}";
		&sharedLogin;
		$yymain .= qq~
~;
	}
	elsif($emailwelcome && $regop != 3) {
		&sendmail($member{'email'},"$txt{'700'} $mbname", "$txt{'248'} $member{'username'}!\n\n$txt{'719'} $member{'username'}, $txt{'492'} $member{'passwrd1'}\n\n$txt{'701'}\n$scripturl?action=profile;username=$useraccount{$member{'username'}}\n\n$txt{'130'}");
	}
	elsif($emailwelcome && $regop == 3) {
		&sendmail($member{'email'},"$txt{'700'} $mbname", "$txt{'248'} $member{'username'}!\n\n$txt{'719'} $member{'username'}, $txt{'492'} $member{'passwrd1'}.\n\n$regtxt{'45'}\n\n$txt{'130'}");
	}
##### Advanced Registration Options #####
if ($reglog eq "1") { $loginfo = "$regtxt{'20'}" } else { $loginfo = qq(); }
if ($regop eq "0") {
		$yymain .= qq~
  
    |  $txt{'97'} | 
    |  | 
~;
} elsif ($regop == 3) {
$yymain .= qq~
| $txt{'245'} | 
| $regtxt{'54'} | 
~;
}
##### Advanced Registration Options #####
	open(FILE, ">$memberdir/$member{'username'}.imconfig");
	print FILE "\n\n\non";
	close(FILE);
	$yytitle="$txt{'245'}";
	&template;
	exit;
}
1;