#!/usr/bin/perl
#
# $Id: sadmin.pl,v 1.12 2006/11/28 21:07:48 psims Exp $
#
# Source File: sadmin.pl

# Get config
require 'sitecfg.pl';
require 'testlib.pl';

&app_initialize;

print "Content-Type: text/html\n\n";

if (&get_session($FORM{'tid'})) {
	&LanguageSupportInit();
	if ($SESSION{'clid'} ne 'std') {
		&get_client_profile($SESSION{'clid'});
		if ($SESSION{'uac'} eq 'admin' || $SESSION{'uac'} eq 'madmin') {
			$FORM{'pageid'} = "Group";
			$FORM{'PAGEID'} = "GROUP";
			$mainttmplt = "frgrpadmin";
		} else {
			&get_candidate_profile($SESSION{'clid'}, $SESSION{'uid'});
			$FORM{'pageid'} = "Gradebook";
			$FORM{'PAGEID'} = "GRADEBOOK";
			$mainttmplt = "frgradebooks";
		}
	}

	my @tempacl = &popEmlAcl($SESSION{'clid'});
	foreach (@tempacl) {
		$CLIENT{'emlaclstr'} .= "$_,";
	}
	$CLIENT{'emlaclstr'} =~ s/@//g;
	$CLIENT{'emlaclstr'} =~ s/,$//g;



	if ($FORM{'idx'} eq '1') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/I");
		if ($SESSION{'uac'} eq 'admin' || $SESSION{'uac'} eq 'gadmin' || $SESSION{'uac'} eq 'madmin') {
			&show_template("sadminidx");
		} else {
			&show_template("cndidx");
		}
	} elsif ($FORM{'dtl'} eq '0') {
		print "<HTML>\n$xlatphrase[539]<BR>$xlatphrase[540]</HTML>\n";
	} elsif ($FORM{'dtl'} eq '1') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/CM");
		if ($SESSION{'uac'} eq 'gadmin') {
			&show_admin_request("maintclient");
		} else {
			$FORM{'dbop'} = 'ccupd';
			&show_admin_request("cdef");
		}
	} elsif ($FORM{'dtl'} eq '12') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/TR");
		&show_admin_request("treplicaframe");
	} elsif ($FORM{'dtl'} eq '13') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/TO");
		&show_admin_request("tocrinpframe");
	} elsif ($FORM{'dtl'} eq '2') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/TM");
		$TEST{'id'} = $FORM{'tstid'};
		&show_admin_request("tdefframe");
	} elsif ($FORM{'dtl'} eq '21') {
		if ($SESSION{'uac'} eq 'cnd') {
			$CANDIDATE{'ownedtests'} = &get_group_tests($SESSION{'clid'}, $SESSION{'uid'}, 0);
		}
		&show_admin_request("mainttest");
	} elsif ($FORM{'dtl'} eq '99') {
		&show_template("selectpg");
	} elsif ($FORM{'dtl'} eq '3') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/R");
		&show_admin_request("maintreport");
	} elsif ($FORM{'dtl'} eq '4') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/DL");
		&show_admin_downloads;
	} elsif ($FORM{'dtl'} eq '5') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/DB");
		&show_admin_request("maintdb");
	} elsif ($FORM{'dtl'} eq '6') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/CF");
		# set FORM.colors
		$trash = join( $pathsep, $dataroot, "config.$SESSION{'clid'}");
		$omsg = "";
		open( CFGFILE, "<$trash" ) or $omsg="not found";
		if ($omsg eq 'not found') {
			$trash = join( $pathsep, $dataroot, "config.std");
			open( CFGFILE, "<$trash" ) or return;
		}
		@cfgentries = <CFGFILE>;
		close CFGFILE;
		$langdef = "enu";
		$FORM{'colors'} = "";
		for (0 .. $#cfgentries) {
			chop ($cfgentries[$_]);
			($entrykey,$entryvalue) = split(/=/, $cfgentries[$_]);
			if ($entrykey eq 'DEFAULTLANG') {
				$langdef = $entryvalue;
				$langselfr = ($langdef eq 'fr') ? " SELECTED" : "";
				$langselsp = ($langdef eq 'sp') ? " SELECTED" : "";
				$langseldeu = ($langdef eq 'deu') ? " SELECTED" : "";
				$langselenu = ($langdef eq 'enu') ? " SELECTED" : "";
				$langselena = ($langdef eq 'ena') ? " SELECTED" : "";
				$langseleuv = ($langdef eq 'euv') ? " SELECTED" : "";
				$langselcyr = ($langdef eq 'cyr') ? " SELECTED" : "";
				$langselmy = ($langdef eq 'my') ? " SELECTED" : "";
				$langselkor = ($langdef eq 'kor') ? " SELECTED" : "";
				$langselafr = ($langdef eq 'afr') ? " SELECTED" : "";
				$langselhin = ($langdef eq 'hin') ? " SELECTED" : "";
				$colortag = "<TR>
			<TD align=right>
				$xlatphrase[541]\&nbsp\;
			</TD>
			<TD align=left>
				<SELECT NAME=\"CDEFAULTLANG\" onChange=\"reset_autotimer()\">
				 	<OPTION VALUE=\"enu\"$langselenu>$LANGUAGE_ID{'enu'}
				 	<OPTION VALUE=\"ena\"$langselena>$LANGUAGE_ID{'ena'}
				 	<OPTION VALUE=\"euv\"$langseleuv>$LANGUAGE_ID{'euv'}
			 		<OPTION VALUE=\"fr\"$langselfr>Fr�nc��s ($LANGUAGE_ID{'fr'})
				 	<OPTION VALUE=\"deu\"$langseldeu>D�utsch ($LANGUAGE_ID{'deu'})
				 	<OPTION VALUE=\"sp\"$langselsp>Espa�ol ($LANGUAGE_ID{'sp'})
				        <OPTION VALUE=\"cyr\"$langselcyr>Cyrillic ($LANGUAGE_ID{'cyr'})
				        <OPTION VALUE=\"my\"$langselmy>Malay ($LANGUAGE_ID{'my'})
				        <OPTION VALUE=\"kor\"$langselkor>Korean ($LANGUAGE_ID{'kor'})
				        <OPTION VALUE=\"afr\"$langselafr>Afrikaans ($LANGUAGE_ID{'afr'})
				        <OPTION VALUE=\"hin\"$langselafr>Hindi ($LANGUAGE_ID{'hin'})
				</SELECT>
			</TD>
		</TR>\n";
				$FORM{'language'} = join('', $colortag, $FORM{'language'});
			} elsif ($entrykey eq 'IP_ACCESS_FILTER') {
				$FORM{'language'} = "		<TR>
			<TD align=right width=50\%>
				$xlatphrase[385]\&nbsp\;
			</TD>
			<TD align=left width=50\%>
				<INPUT TYPE=TEXT NAME=\"C$entrykey\" VALUE=\"$entryvalue\" onChange=\"reset_autotimer()\">
			</TD>
		</TR>\n";
			} else {
				if ($entrykey eq 'BACKGROUND') {
					$colortag = "		<TR>
			<TD align=right><font size=1>$entrykey:\&nbsp\;</font></TD>
			<TD align=left><INPUT TYPE=FILE NAME=\"C$entrykey\" VALUE=\"$entryvalue\" onChange=\"reset_autotimer()\"></TD>
		</TR>\n";
				} else {
					if (($entrykey =~ /COLOR/) 
						|| ($entrykey =~ 'LINK')
						|| ($entrykey =~ 'ALINK')
						|| ($entrykey =~ 'VLINK')
						|| ($entrykey eq 'TEXT') ) {
						$gotfocus = "onFocus=\"return tGotFocus(this)\"";
					} else {
						$gotfocus = "";
					}
					$colortag = "		<TR>
			<TD align=right nowrap><font size=1>$entrykey:\&nbsp\;</font></TD>
			<TD align=left><INPUT TYPE=TEXT NAME=\"C$entrykey\" SIZE=8 MAXLENGTH=7 VALUE=\"$entryvalue\" $gotfocus onChange=\"reset_autotimer()\"></TD>
		</TR>\n";
				}
				$FORM{'colors'} = join('', $FORM{'colors'}, $colortag);
			}
		}
		&show_admin_request("maintcfg");
	} elsif ($FORM{'dtl'} eq '7') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/GP");
		&show_admin_request($mainttmplt);
	} elsif ($FORM{'dtl'} eq '8') {
#Begin filtering
		$filterbydate = $FORM{'filterbydate'};
		$day_filter = $FORM{'day_filter'};
		$date_filter = $FORM{'date_filter'};
		$cnd1_filter = $FORM{'cnd1'};
		$cnd2_filter = $FORM{'cnd2'};
		$cnd3_filter = $FORM{'cnd3'};
		$cnd4_filter = $FORM{'cnd4'};
#End filtering
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/CC");
		&show_admin_request("maintcnd");
	} elsif ($FORM{'dtl'} eq '9') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/RG");
		&show_admin_request("regcnd");
	} elsif ($FORM{'dtl'} eq '10') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/IM");
		&show_admin_request("upimport");
	} elsif ($FORM{'dtl'} eq '11') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "SA/LC");
		&show_admin_request("frlicadmin");
	} elsif ($FORM{'dbop'} ne '') {
		&show_dbop_response;
	} else {
		&show_illegal_access_warning;
	}
} else {
	&logger::logerr("Unable to get session with &get_session($FORM{'tid'})");
	&show_illegal_access_warning;
}

sub show_license_request {
}

sub show_admin_downloads {
	@dlrecs = &get_data("downloads.dat");
	$bFirst=1;
	if ($#dlrecs eq 0) {
		$download = "<OPTION VALUE=\"nya\">No downloads are currently available.\n";
		$SYSTEM{'downloadcount'} = 1;
	} else {
		$downloadcount=0;
		foreach $dlrec (@dlrecs) {
			$msg = "";
			if ($bFirst) {
				$bFirst = 0;
			} else {
				chop ($dlrec);
				@flds = split(/&/, $dlrec);
				$dlfile = join($pathsep, $pubroot, "downloads/$flds[2]");
				open (TMPFILE, "<$dlfile") or $msg="nya";
				if ($msg eq 'nya') {
					$download = "<OPTION VALUE=\"nya\">$flds[1] (Coming Soon)\n";
				} else {
					binmode(TMPFILE);
					$fsize = (stat(TMPFILE))[7];
					close TMPFILE;
					$download = "<OPTION VALUE=\"$flds[2]\">$flds[1] ($fsize bytes)\n";
				}
				$downloadcount++;
				$downloads = join('', $downloads , $download);
			}
		}
		if ($downloadcount == 0) { $downloadcount = 1;}
		if ($downloadcount > 10) { $downloadcount = 10;};
		$SYSTEM{'downloadcount'} = $downloadcount;
	}
	$SYSTEM{'downloads'} = $downloads;
	@dlrecs = ();
	$downloads = "";
	$download = "";
	&show_template("download");
}

#sub show_admin_request {    ##moved to smilib
#	my ($key) = @_;
#	&get_template($key);
#	@lines = &get_template($key);
#	foreach $line (@lines) {
#		$line = &xlatline($line);
#	}
#}

sub show_dbop_response {
	if ($FORM{'dbop'} eq 'tnew') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Define New Test");
		$FORM{'newtest'} = "Y";
		@lines = &get_template("tdefframe");
		&print_response;
	} elsif ($FORM{'dbop'} eq'tdel') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Delete Test $FORM{'tstid'}");
		@trecs = &get_test_list($SESSION{'clid'});
		foreach $trec (@trecs) {
			chop ($trec);
			($id, $trash) = split(/\&/, $trec);
			if ($FORM{'tstid'} ne $id) {
				push @newtests, $trec;
			}
		}
		@trecs = @newtests;
		&save_test_list($SESSION{'clid'});
		$showmessage = "Test $FORM{'tstid'} has been deleted.";
		&show_message_with_close($showmessage);
	} elsif ($FORM{'dbop'} eq 'tupd') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Edit Test $FORM{'tstid'}");
		$TEST{'new'} = "N";
		&get_test_profile($SESSION{'clid'}, $FORM{'tstid'});
		@lines = &get_template("tdefframe");
		&print_response;
	} elsif ($FORM{'dbop'} eq 'cnew') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "New Client");
		$FORM{'newclient'} = "Y";
		@lines = &get_template("cdef");
		&print_response;
	} elsif ($FORM{'dbop'} eq 'cdel') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Delete Client $FORM{'clid'}");
		&open_results;
		&client_delete_response;
		&close_results;
		$FORM{'dtl'} eq 8;
	} elsif ($FORM{'dbop'} eq 'cupd') {
		&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Edit Client $FORM{'clid'}");
		&get_client_profile($FORM{'clid'});
		@lines = &get_template("cdef");
		&print_response;
	}
}

sub print_response {
	foreach $line (@lines) {
		$srch = "<%=CLIENT.REPORTING%>";
		if ( $line =~ /$srch/i) {
			&client_reporting_options($CLIENT{'clid'});
		} else {
			$line = &xlatline($line);
		}
	}
}

sub client_reporting_options {
#	@rrecs = &get_test_list($_[0]);
}

sub client_delete_response {
	&get_client_profile($FORM{'clid'});

	print "Deleting $FORM{'clid'} $CLIENT{'clnmc'} ...<BR>\n";

	# open preservation file
	$archivefile = join($pathsep, $dataroot, "$FORM{'clid'}.dat");
	$archivefile =~ s/$docroot/$archiveroot/g;
	open (ARCHFILE, ">$archivefile");

	# delete client profile
	@crecs = &get_data("clients.dat");
	$trash = join($pathsep, $dataroot, "clients.dat");
	open (TMPFILE, ">$trash");
	foreach $crec (@crecs) {
		chop ($crec);
		($id, $trash) = split(/&/, $crec);
		if ($id eq $CLIENT{'clid'}) {
			print ARCHFILE "$crec\n";
			print "client profile $id archived $! ...<BR>\n";
		} else {
			print TMPFILE "$crec\n";
		}
	}
	close TMPFILE;

	# delete administrative logins
	@crecs = &get_data("admin.dat");
	$trash = join($pathsep, $dataroot, "admin.dat");
	open (TMPFILE, ">$trash");
	foreach $crec (@crecs) {
		chop ($crec);
		($id, $pwd, $pv, $clid) = split(/&/, $crec);
		if ($clid eq $CLIENT{'clid'}) {
			print ARCHFILE "$crec\n";
			print "admin login $id archived $! ...<BR>\n";
		} else {
			print TMPFILE "$crec\n";
		}
	}
	close TMPFILE;
	close ARCHFILE;
	$chmodok = chmod 0666, $archivefile;

	# delete logos
	$ulinkdir = join($pathsep, $pubroot, "graphic");
	opendir (GDIR, $ulinkdir);
	@dots = readdir(GDIR);
	closedir GDIR;
	$rmmask = "$CLIENT{'clid'}.";
	foreach $rmfile (@dots) {
		if ($rmfile =~ /$rmmask/ ) {
			$ulinkfile = join($pathsep, $pubroot, "graphic", $rmfile);
			$archivefile = $ulinkfile;
			$archivefile =~ s/$docroot/$archiveroot/g;
			rename $ulinkfile, $archivefile;
			print "$ulinkfile archived $! ...<BR>\n";
		}
	}
	@dots = ();

	# delete cnd file
	$tofile = join($pathsep, $dataroot, "cnd.$CLIENT{'clid'}");
	$archivefile = $tofile;
	$archivefile =~ s/$docroot/$archiveroot/g;
	rename $tofile, $archivefile;
	print "$tofile archived $! ...<BR>\n";

	# delete reports file
	$tofile = join($pathsep, $dataroot, "reports.$CLIENT{'clid'}");
	$archivefile = $tofile;
	$archivefile =~ s/$docroot/$archiveroot/g;
	rename $tofile, $archivefile;
	print "$tofile archived $! ...<BR>\n";

	# delete tests file
	$tofile = join($pathsep, $dataroot, "tests.$CLIENT{'clid'}");
	$archivefile = $tofile;
	$archivefile =~ s/$docroot/$archiveroot/g;
	rename $tofile, $archivefile;
	print "$tofile archived $! ...<BR>\n";

	# delete test graphic files
	opendir (GDIR, $testgraphic);
	@dots = readdir(GDIR);
	closedir GDIR;
	$rmmask = "$CLIENT{'clid'}.";
	foreach $rmfile (@dots) {
		if ($rmfile =~ /$rmmask/ ) {
			$ulinkfile = join($pathsep, $testgraphic, $rmfile);
			$archivefile = $ulinkfile;
			$archivefile =~ s/$docroot/$archiveroot/g;
			rename $ulinkfile, $archivefile;
			print "$ulinkfile archived $! ...<BR>\n";
		}
	}
	@dots = ();

	# delete test questions files
	opendir (GDIR, $questionroot);
	@dots = readdir(GDIR);
	closedir GDIR;
	$rmmask = ".$CLIENT{'clid'}";
	foreach $rmfile (@dots) {
		if ($rmfile =~ /$rmmask/ ) {
			$ulinkfile = join($pathsep, $questionroot, $rmfile);
			$archivefile = $ulinkfile;
			$archivefile =~ s/$docroot/$archiveroot/g;
			rename $ulinkfile, $archivefile;
			print "$ulinkfile archived $! ...<BR>\n";
		}
	}
	@dots = ();

	# delete index page
	$tofile = join($pathsep, $pubroot, "$CLIENT{'clid'}", "index.htm");
	$cnt = unlink $tofile;
	print "$tofile deleted $! ...<BR>\n";
}

sub open_results {
	print "<HTML>
<HEAD>
	<SCRIPT language=\"JavaScript\">
<!--
function right(e) {
	if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2)) {
		alert(\"<%=PHRASE.473%>\");
		return false;
	} else {
		if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3)) {
			alert(\"<%=PHRASE.473%>\");
			return false;
		}
	}
	return true;
}
document.onmousedown=right;
document.onmouseup=right;
if (document.layers) window.captureEvents(Event.MOUSEDOWN);
if (document.layers) window.captureEvents(Event.MOUSEUP);
window.onmousedown=right;
window.onmouseup=right;
// -->
	</SCRIPT>
</HEAD>
<BODY BACKGROUND=\"$SYSTEM{'BACKGROUND'}\" BGCOLOR==\"$SYSTEM{'BGCOLOR'}\"
	TEXT=\"$SYSTEM{'TEXT'}\" LINK=\"$SYSTEM{'LINK'}\"
	VLINK=\"$SYSTEM{'VLINK'}\" ALINK=\"$SYSTEM{'ALINK'}\">
";
}

sub close_results {
	print "</BODY>\n</HTML>\n";
}