#Discus user profile editor script
#-------------------------------------------------------------------------------
#This script is copyright (c) 1997-98 by Kevin W. Paulisse and William F. Polik,
#all rights reserved.  You may not modify or delete this copyright header.
#The use of this product is subject to a license agreement.  Contact Kevin
#Paulisse (paulisse@mulliken.chem.hope.edu) for further information.
#-------------------------------------------------------------------------------

open (FILE, "$discus_conf");
@file = <FILE>;
close (FILE);
$evals = "";
foreach $line (@file) {
	if ($line =~ /^(\w+)=(.*)/) {
		$varname = $1;
		$value = $2;
		$value =~ s/'/\\'/g;
		$evals .= "\$$varname='$value'; ";
	}
}
eval($evals);
require "$admin_dir/source/src-board-subs-common";

&parse_form;
&read_cookie;

if ($FORM{'action'} eq "profile") {
	@result = &check_password($FORM{'username'}, $FORM{'password'});
	undef @groups;
	undef @valid;
	undef @groupindex;
	foreach $result (@result) {
		chop ($result) if $result =~ /\n$/;
		($username, $pass, $email, $fullname, $profile, $wantemail, $lastcheck, $group) = split(/:/, $result);
		next if $profile == 0;
		push (@groups, $group);
		push (@valid, $result);
	}
	foreach $key (keys(%FORM)) {
		$FORM{$key} =~ s/[:<>;]//g;
	}
	@notifyoptions = split(/,/, $FORM{'notify'});
	$tally = 0;
	foreach $num (@notifyoptions) {
		$tally += $num;
	}
	$FORM{"group"} =~ s/[^\w,]//g;
	@dogroups = split(/,/, $FORM{"group"});
	foreach $valid (@valid) {
		($username, $pass, $email, $fullname, $profile, $wantemail, $lastcheck, $group) = split(/:/, $valid);
		&ex('change_profile', "users", $FORM{"username"}, $FORM{"email"}, $FORM{"fullname"}, "*", $tally, "*", $group) if (grep(/^$group$/, @dogroups) || $FORM{"synchronize"} eq "on");
	}
	$FORM{"action"} = "congratsprofile";
}

if ($FORM{'action'} eq "password") {
	@result = &check_password($FORM{"username"}, $FORM{"password"});
	undef @groups;
	undef @valid;
	undef @groupindex;
	foreach $result (@result) {
		chop ($result) if $result =~ /\n$/;
		($username, $pass, $email, $fullname, $profile, $wantemail, $lastcheck, $group) = split(/:/, $result);
		next if $profile == 0;
		push (@groups, $group);
		push (@valid, $result);
	}
	$FORM{"group"} =~ s/[^\w,]//g;
	@dogroups = split(/,/, $FORM{"group"});
	foreach $valid (@valid) {
		($username, $pass, $email, $fullname, $profile, $wantemail, $lastcheck, $group) = split(/:/, $valid);
		($password_save) = &ex('change_password', "users", $FORM{"username"}, $FORM{"pass1"}, $FORM{"pass2"}, $group) if (grep(/^$group$/, @dogroups) || $FORM{"synchronize"} eq "on");
		$FORM{"password"} = $FORM{"pass1"};
	}
	&print_cookie_string($FORM{'username'}, length($FORM{'password'}), $password_save);
	$FORM{"action"} = "congratspassword";
}

if ($FORM{'action'} =~ /congrats/) {
	&header;
	$what = $L{BPRPROFILECHANGED} if $FORM{'action'} =~ /profile/;
	$what = $L{BPRPASSWORDCHANGED} if $FORM{'action'} =~ /password/;
	&ex('printuntil', 1, 1, 0, "$L{BPRCONGRATS}");
	print "<CENTER><FONT SIZE=+1><B>$L{BPRCONGRATS}</B></FONT></CENTER>\n<HR>\n";
	for ($i = 3; $i <= 9; $i += 2) {
		&ex('printuntil', $i, $i, 0, "");
	}
	print "<P>$what<P>\n";
	print "<HR><P><CENTER><A HREF=\"$html_url/messages/board-topics.html\">$L{BPRCLICKRETURN} $title</A></CENTER>\n";
	for ($i = 11; $i <= 17; $i += 2) {
		&ex('printuntil', $i, $i, 0, "");
	}
	exit(0);
}

if ($FORM{'action'} eq "profilemenu") {
	@result = &check_password ($FORM{'username'}, $FORM{'password'});
	&error_message("Authentication Error", "Your username/password combination is invalid to access the user profile manager.  (If you are a moderator, you must access the moderator profile manager through the administration program.)") if @result == 0;
	undef @groups; undef @valid; undef @new; undef @groupindex;
	foreach $result (@result) {
		chop ($result) if $result =~ /\n$/;
		($username, $pass, $email, $fullname, $profile, $wantemail, $lastcheck, $group) = split(/:/, $result);
		$password_save = $pass;
		next if $profile == 0;
		push (@groups, $group);
		push (@valid, $result);
		$newresult = join(":", $email, $fullname, $profile, $wantemail, $lastcheck);
		push (@new, $newresult) if !grep(/^$newresult$/, @new);
	}
	&error_message("Access Error", "Your username/password combination is correct; however, you do not have permission to edit your profile.  Contact your discussion moderator regarding this problem.") if scalar(@valid) == 0;
	($bg, $txt, $link, $foo, $alink, $face, $size, $img) = &ex('extract_colorsonly');
	&print_cookie_string($FORM{'username'}, length($FORM{'password'}), $password_save);
	&header;
	&ex('printuntil', 1, 1, 0, "$L{BPREDITORTITLE}");
	print "<CENTER><FONT SIZE=+1><B>$L{BPREDITORTITLE}</B></FONT></CENTER>\n";
	for ($i = 3; $i <= 9; $i += 2) {
		&ex('printuntil', $i, $i, 0, "");
	}
	print "<HR><H4>$L{BPREDITORTITLE}</H4>\n";
	if (@new == 1) {
		print "<FORM ACTION=\"$script_url/board-profile.$cgi_extension\" METHOD=POST>\n";
		print "<P><TABLE BORDER=1 WIDTH=100%><TR><TD>\n";
		print "<TABLE BORDER=0>\n";
		print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRUSERNAME} &nbsp; &nbsp; &nbsp; </TD><TD><FONT FACE=\"$face\" SIZE=\"$size\">\u$username</TD></TR>\n";
		print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPREMAIL}</TD><TD><INPUT TYPE=TEXT SIZE=40 NAME=email VALUE=\"$email\"></TD></TR>\n";
		print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRFULLNAME}&nbsp; &nbsp;&nbsp;</TD><TD><INPUT TYPE=TEXT SIZE=40 NAME=fullname VALUE=\"$fullname\"></TD></TR>\n";
		print "<TR><TD VALIGN=TOP><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPREMAILNOTIFY}<P></TD><TD><FONT FACE=\"$face\" SIZE=\"$size\"><INPUT TYPE=CHECKBOX NAME=notify VALUE=\"1\"";
		print " CHECKED" if $wantemail == 1 || $wantemail == 3;
		print ">$L{BPRMYOWN}<BR>\n";
		print "<INPUT TYPE=CHECKBOX NAME=notify VALUE=\"2\"";
		print " CHECKED" if $wantemail == 2 || $wantemail == 3;
		print ">$L{BPRWITHINGROUPS}</TD></TR></TABLE>\n";
		print "<P>\n";
		if (@valid > 1) {
			print "<FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRMORETHANONE}<BR><BR>\n";
			print "<UL>\n";
			foreach $line (sort(@groups)) {
				print "<INPUT TYPE=CHECKBOX NAME=\"group\" VALUE=\"$line\" CHECKED>\u$line<BR>\n";
			}
			print "</UL>\n";
			print "<P>\n";
		} else {
			($group) = @groups;
			print "<INPUT TYPE=HIDDEN NAME=group VALUE=\"$group\">\n";
		}
		print "<INPUT TYPE=SUBMIT VALUE=\"$L{BPRSAVE}\">\n";
		print "<INPUT TYPE=HIDDEN NAME=username VALUE=\"$username\">\n";
		print "<INPUT TYPE=HIDDEN NAME=password VALUE=\"$FORM{'password'}\">\n";
		print "<INPUT TYPE=HIDDEN NAME=action VALUE=\"profile\">\n";
		print "</TD></TR></TABLE></FORM>\n<HR>";
	} else {
		print "<FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRMORETHANONEDIFF}<P>\n";
		foreach $group (sort(@groups)) {
			print "<LI><A HREF=\"#$group\">\u$group</A></LI><BR>\n";
		}
		print "<HR><BR>\n";
		$ctr = 0;
		foreach $group (sort(@groups)) {
			print "<A NAME=\"$group\">\n";
			print "<FORM ACTION=\"$script_url/board-profile.$cgi_extension\" METHOD=POST>\n";
			($result) = grep(/:$group$/, @valid);
			($username, $pass, $email, $fullname, $profile, $wantemail, $lastcheck, $group) = split(/:/, $result);
			print "<P><TABLE BORDER=1 WIDTH=100%><TR><TD>\n";
			print "<TABLE BORDER=0>\n";
			print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRUSERNAME} &nbsp; &nbsp; &nbsp; </TD><TD><FONT FACE=\"$face\" SIZE=\"$size\">\u$username</TD></TR>\n";
			print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPREMAIL}</TD><TD><INPUT TYPE=TEXT SIZE=40 NAME=email VALUE=\"$email\"></TD></TR>\n";
			print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRFULLNAME}&nbsp; &nbsp;&nbsp;</TD><TD><INPUT TYPE=TEXT SIZE=40 NAME=fullname VALUE=\"$fullname\"></TD></TR>\n";
			print "<TR><TD VALIGN=TOP><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPREMAILNOTIFY}<P></TD><TD><FONT FACE=\"$face\" SIZE=\"$size\"><INPUT TYPE=CHECKBOX NAME=notify VALUE=\"1\"";
			print " CHECKED" if $wantemail == 1 || $wantemail == 3;
			print ">$L{BPRMYOWN}<BR>\n";
			print "<INPUT TYPE=CHECKBOX NAME=notify VALUE=\"2\"";
			print " CHECKED" if $wantemail == 2 || $wantemail == 3;
			print ">$L{BPRWITHINGROUPS}</TD></TR>\n";
			print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRSYNCHRONIZE}</TD><TD><FONT FACE=\"$face\" SIZE=\"$size\"><INPUT TYPE=CHECKBOX NAME=\"synchronize\" VALUE=\"on\">$L{BPRSYNCHDESCR}</TD></TR>\n";
			print "</TABLE><P>\n";
			print "<INPUT TYPE=SUBMIT VALUE=\"$L{BPRSAVE}\">\n";
			print "<INPUT TYPE=HIDDEN NAME=username VALUE=\"$username\">\n";
			print "<INPUT TYPE=HIDDEN NAME=password VALUE=\"$FORM{'password'}\">\n";
			print "<INPUT TYPE=HIDDEN NAME=action VALUE=\"profile\">\n";
			print "<INPUT TYPE=HIDDEN NAME=group VALUE=\"$group\">\n";
			print "</TD></TR></TABLE></FORM>\n";
			$ctr += 1;
			print "<HR ALIGN=CENTER WIDTH=75%>\n" if $ctr != @groups;
		}
		print "<HR>\n";
	}
	print "<A NAME=\"passwd\"><H4>$L{BPRCHANGEPASS}</H4>\n";
	print "<FORM ACTION=\"$script_url/board-profile.$cgi_extension\" METHOD=POST>\n";
	print "<TABLE BORDER=1 WIDTH=100%><TR><TD><TABLE><TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRNEWPASS}</TD><TD><INPUT TYPE=PASSWORD NAME=pass1 SIZE=9></TD></TR>\n";
	print "<TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRVERIFYPASS}</TD><TD><INPUT TYPE=PASSWORD NAME=pass2 SIZE=9></TD></TR></TABLE>\n";
	print "<P>\n";
	if (@valid > 1) {
		print "<FONT FACE=\"$face\" SIZE=\"$size\"><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRMORETHANONE}<BR><BR>\n";
		print "<UL>\n";
		foreach $line (sort(@groups)) {
			print "<INPUT TYPE=CHECKBOX NAME=\"group\" VALUE=\"$line\" CHECKED>\u$line<BR>\n";
		}
		print "</UL>\n";
		print "<P>\n";
	} else {
		($group) = @groups;
		print "<INPUT TYPE=HIDDEN NAME=group VALUE=\"$group\">\n";
	}
	print "<INPUT TYPE=SUBMIT VALUE=\"$L{BPRSAVEPASS}\">\n";
	print "<INPUT TYPE=HIDDEN NAME=username VALUE=\"$username\">\n";
	print "<INPUT TYPE=HIDDEN NAME=action VALUE=\"password\">\n";
	print "<INPUT TYPE=HIDDEN NAME=password VALUE=\"$FORM{'password'}\">\n";
	print "</TD></TR></TABLE></FORM>\n";
	for ($i = 11; $i <= 17; $i += 2) {
		eval '&printuntil($i, $i, 0, "");';
	}
	exit(0);
}

if ($FORM{'action'} eq "") {
	($bg, $txt, $foo, $foo, $foo, $face, $size, $img) = &ex('extract_colorsonly', 1);
	&header;
	&ex('printuntil', 1, 1, 0, "$L{BPRTITLE}");
	print "<CENTER><FONT SIZE=+1><B>$L{BPRTITLE}</B></FONT></CENTER>\n";
	print "<HR><P>\n";
	for ($i = 3; $i <= 9; $i += 2) {
		&ex('printuntil', $i, $i, 0, "");
	}
	print "$L{BPRMESSAGE}<P>\n";
	print "<FORM ACTION=\"$script_url/board-profile.$cgi_extension\" METHOD=POST>\n";
	print "<P><TABLE><TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">$L{BPRUSERNAME}</FONT></TD>";
	print "<TD>";
	print "<INPUT TYPE=TEXT NAME=username VALUE=\"";
	print $COOKIE{'user'} if $COOKIE{'user'} ne "";
	print "\" SIZE=15></TD></TR><TR><TD><FONT FACE=\"$face\" SIZE=\"$size\">";
	print "$L{BPRPASSWORD}</TD><TD>\n";
	print "<INPUT TYPE=PASSWORD NAME=password VALUE=\"\" SIZE=15></TD></TR></TABLE><P>\n";
	print "<INPUT TYPE=SUBMIT VALUE=\"$L{BPRLOGIN}\">\n";
	print "<INPUT TYPE=HIDDEN NAME=action VALUE=\"profilemenu\">\n";
	print "</FORM><P><HR>\n";
	for ($i = 11; $i <= 17; $i += 2) {
		&ex('printuntil', $i, $i, 0, "");
	}
	exit(0);
}

sub check_password {
	local ($username, $guess) = @_;
	$user_check = $username; $user_check =~ tr/A-Z/a-z/;
	local (@result, @passwd_line, $line);
	open(PASSWD,"$admin_dir/users.txt") || &error_message("Verify Password Error", "Cannot open password file (users.txt) for reading!");
	@passwd_line = <PASSWD>;
	close(PASSWD);
	$ok = "";
	foreach $line (@passwd_line) {
		chop ($line) if $line =~ /\n/;
		($user, $pass, $foo, $foo, $foo, $foo, $foo, $group_test) = split(/:/, $line);
		if ($user eq $user_check) {
			$test_pass = crypt($guess, $pass);
			$ok = "";
			$ok = "Yes" if $test_pass eq $pass;
			$ok = "No" if $guess eq "";
			$ok = "No" if $pass eq "";
			if ($ok eq "Yes") {
				push (@result, $line);
			}
		}
	}
	return @result;
}



