#!/usr/bin/perl
#
# $Id: tadmin.pl,v 1.10 2006/08/21 20:13:44 psims Exp $
#
# Source File: tadmin.pl
# Get config
require 'sitecfg.pl';
require 'testlib.pl';
require 'sbalib.pl';
&app_initialize;
print "Content-Type: text/html\n\n";
if (&get_session($FORM{'tid'})) {
&LanguageSupportInit();
# warn "dbop is $FORM{'dbop'} " ;
&get_client_profile($SESSION{'clid'});
$isregistrar = &get_a_key("cnd.$SESSION{'clid'}", $SESSION{'uid'}, "registrar");
if ($FORM{'dbop'} eq 'tnew') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Define New Test");
@lines = &get_template("tdef");
&test_new_response;
} elsif ($FORM{'dbop'} eq'tdel') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Delete Test $FORM{'tstid'}");
#hkh 03/04 get date&time stamp - bug#103
$deltime = &format_date_time("yymmddhhnnss", "2", "0");
&test_delete_response($SESSION{'clid'}, $FORM{'tstid'}, $deltime);
&test_files_delete($SESSION{'clid'}, $FORM{'tstid'}, $deltime);
&complete_inprog_pending_test_del($SESSION{'clid'}, $FORM{'tstid'}, $deltime);
&show_template("tdefframe");
} elsif ($FORM{'dbop'} eq 'tupd') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Edit Test $FORM{'tstid'}");
@lines = &get_template("tdef");
&test_update_response($SESSION{'clid'}, $FORM{'tstid'});
} elsif ($FORM{'dbop'} eq 'cnew') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "New Candidate");
if ($isregistrar eq "Y") {
$SESSION{'registrar'} = "Y";
}
@lines = &get_template("addcnd");
&candidate_new_response;
} elsif ($FORM{'dbop'} eq 'cdel') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Delete Candidate $FORM{'cndid'}");
#hkh 03/04 get date&time stamp - bug#103
$deltime = &format_date_time("yymmddhhnnss", "2", "0");
&candidate_delete_response($SESSION{'clid'}, $FORM{'cndid'}, $deltime);
&complete_inprog_pending_cand_test_del($SESSION{'clid'}, $FORM{'cndid'}, $deltime);
$filterbydate = $FORM{'filterbydate'};
$FORM{'dtl'} = 8; #I have no idea why this must be set, but it needs to be
$FORM{'filterbydate'} = "Y";
$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'};
$CANDIDATE{'registrar'} = $isregistrar;
&show_template("maintcnd");
} elsif ($FORM{'dbop'} eq 'cupd') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Edit Candidate $FORM{'cndid'}");
if ($isregistrar eq "Y") {
$SESSION{'registrar'} = "Y";
}
@lines = &get_template("addcnd");
&candidate_update_response($SESSION{'clid'}, $FORM{'cndid'});
} elsif ($FORM{'dbop'} eq 'gnew') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "New Group Registration");
@lines = &get_template("grpdef");
&group_new_response;
} elsif ($FORM{'dbop'} eq 'gdel') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Delete Group Registration $FORM{'grpid'}");
&group_delete_response($SESSION{'clid'}, $FORM{'grpid'});
$showmessage = "Group $FORM{'grpid'} has been deleted.";
&show_message_with_close($showmessage);
} elsif ($FORM{'dbop'} eq 'gupd') {
&log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Edit Group Registration $FORM{'grpid'}");
@lines = &get_template("grpdef");
&group_update_response($SESSION{'clid'}, $FORM{'grpid'});
} else {
&show_illegal_access_warning;
}
} else {
warn "Missing Session id in FORM " ;
&show_illegal_access_warning;
}
sub test_new_response {
$FORM{'newtest'} = "Y";
$TEST{'seq'} = $FORM{'seq'};
if ( ! setup_avail_settings(\%TEST ) ) {
&logger::logerr("Unable to setup availability window");
}
foreach $line (@lines) {
$line=&xlatline($line);
}
}
sub candidate_new_response {
$FORM{'new'} = "Y";
$FORM{'prevenb'} = 0;
$FORM{'nxtenb'} = 0;
foreach $line (@lines) {
$line=&xlatline($line);
}
}
sub group_new_response {
$FORM{'new'} = "Y";
foreach $line (@lines) {
$line=&xlatline($line);
}
}
sub test_update_response {
$TEST{'new'} = "N";
&get_test_profile($_[0], $_[1]);
$SUBJAREA{'subjskillcgt'}=&get_subjskill_cntgrdtbl($SESSION{'clid'}, $TEST{'id'}, "");
foreach $line (@lines) {
$line=&xlatline($line);
}
}
sub candidate_update_response {
my $cndid;
my $prevenb;
my $nxtenb;
$FORM{'new'} = "N";
($cndid,$prevenb,$nxtenb)=&get_candidate_list_nav($_[0],$_[1],'nop',$FORM{'sortedkey'});
$FORM{'prevenb'} = $prevenb unless $isregistrar eq 'Y';
$FORM{'nxtenb'} = $nxtenb unless $isregistrar eq 'Y';
&get_candidate_profile($_[0], $_[1]);
foreach $line (@lines) {
$line=&xlatline($line);
}
}
sub group_update_response {
$FORM{'new'} = "N";
&get_candidate_profile($_[0], $_[1]);
foreach $line (@lines) {
$line=&xlatline($line);
}
}
sub test_delete_response {
@trecs = &get_test_list($_[0]);
#hkh 03/04 write test file to recycle dir before deleting test record - bug#103
$testfile = "tests.$clid";
$oldfile = join($pathsep, $dataroot, $testfile);
my $newfile = join($pathsep, $recydataroot, "$testfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
foreach $trec (@trecs) {
chop ($trec);
($id, $trash) = split(/\&/, $trec);
if ($_[1] ne $id) {
push @newtests, $trec;
}
}
@trecs = @newtests;
&save_test_list($_[0]);
}
#hkh 03/04 write custom/mtx/question/logo etc. to recycle dir before deleting -
# bug#103
sub test_files_delete {
if ( ! opendir(DIR, $questionroot) ) {
return 0;
}
my $regex = "^$_[1]".'\.'."$_[0]".'(.*)$';
@filenames = readdir(DIR);
closedir(DIR);
foreach my $srcfile ( @filenames ) {
if ( $srcfile =~ /^$_[1].$_[0](.*)$/ ) {
$oldfile = join($pathsep, $questionroot, $srcfile);
my $newfile = join($pathsep, $recyquestionroot, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
# print "$oldfile deleted $! ...
\n";
}
}
# delete logo files
if ( ! opendir(DIR, $testgraphic) ) {
return 0;
}
@filenames = readdir(DIR);
closedir(DIR);
my $regex = "^$_[0]".'\.'."$_[1]".'(.*)$';
foreach my $srcfile ( @filenames ) {
if ( $srcfile =~ /^$_[0].$_[1].0(.*)$/ ) {
$oldfile = join($pathsep, $testgraphic, $srcfile);
my $newfile = join($pathsep, $recytestgraphic, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
# print "$oldfile deleted $! ...
\n";
}
}
}
#hkh 03/04 write completed/inprog/pending files for the deleted test to recycle
# directory before deleting - bug#103
sub complete_inprog_pending_test_del {
opendir(DIR, $testcomplete);
@filenames = readdir(DIR);
closedir DIR;
foreach $srcfile (@filenames) {
if ($srcfile =~ /^$clid\./ ) {
if (($srcfile =~ /\.$_[1]/) || ($srcfile =~ /\.$_[1].tim/)) {
$oldfile = join($pathsep, $testcomplete, $srcfile);
my $newfile = join($pathsep, $recytestcomplete, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
}
}
}
opendir(DIR, $testinprog);
@filenames = readdir(DIR);
closedir DIR;
foreach $srcfile (@filenames) {
if ($srcfile =~ /^$clid\./ ) {
if (($srcfile =~ /\.$_[1]/) || ($srcfile =~ /\.$_[1].tim/)) {
$oldfile = join($pathsep, $testinprog, $srcfile);
my $newfile = join($pathsep, $recytestinprog, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
}
}
}
opendir(DIR, $testpending);
@filenames = readdir(DIR);
closedir DIR;
foreach $srcfile (@filenames) {
if ($srcfile =~ /^$clid\./ ) {
if (($srcfile =~ /\.$_[1]/) || ($srcfile =~ /\.$_[1].tim/)) {
$oldfile = join($pathsep, $testpending, $srcfile);
my $newfile = join($pathsep, $recytestpending, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
}
}
}
}
sub candidate_delete_response {
# &remove_pending_tests($_[0], $_[1]);
#hkh 03/04 write candidate file to recycle dir before deleting cand record - bug#103
$srcfile = "cnd.$_[0]";
$oldfile = join($pathsep, $dataroot, $srcfile);
my $newfile = join($pathsep, $recydataroot, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
@crecs = &get_data("cnd.$_[0]");
$trash = join( $pathsep, $dataroot, "cnd.$_[0]");
open (TSTFILE, ">$trash");
foreach $crec (@crecs) {
($clid, $trash) = split(/\&/, $crec);
if ($_[1] ne $clid) {
print TSTFILE "$crec";
}
}
close TSTFILE;
}
sub complete_inprog_pending_cand_test_del {
#hkh 03/04 write completed/inprog/pending files for the deleted cand. to recycle
# directory before deleting - bug#103
opendir(DIR, $testcomplete);
@filenames = readdir(DIR);
closedir DIR;
foreach $srcfile (@filenames) {
if ($srcfile =~ /^$_[0].$_[1]\./ ) {
$oldfile = join($pathsep, $testcomplete, $srcfile);
my $newfile = join($pathsep, $recytestcomplete, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
}
}
opendir(DIR, $testinprog);
@filenames = readdir(DIR);
closedir DIR;
foreach $srcfile (@filenames) {
if ($srcfile =~ /^$_[0].$_[1]\./ ) {
$oldfile = join($pathsep, $testinprog, $srcfile);
my $newfile = join($pathsep, $recytestinprog, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
}
}
opendir(DIR, $testpending);
@filenames = readdir(DIR);
closedir DIR;
foreach $srcfile (@filenames) {
if ($srcfile =~ /^$_[0].$_[1]\./ ) {
$oldfile = join($pathsep, $testpending, $srcfile);
my $newfile = join($pathsep, $recytestpending, "$srcfile.$_[2]");
cpbin("$oldfile", "$newfile", 1);
$cnt = unlink $oldfile;
}
}
}
sub group_delete_response {
# &remove_pending_tests($_[0], $_[1]);
# @crecs = &get_data("cnd.$_[0]");
# $trash = join( $pathsep, $dataroot, "cnd.$_[0]");
# open (TSTFILE, ">$trash");
# foreach $crec (@crecs) {
# ($clid, $trash) = split(/\&/, $crec);
# if ($_[1] ne $clid) {
# print TSTFILE "$crec";
# }
# }
# close TSTFILE;
}