#!/usr/bin/perl ##!/usr/local/bin/perl5.8.0 # # $Id: creports.pl,v 1.24 2006/09/13 18:12:31 psims Exp $ # # Source File: creports.pl # Get config require 'sitecfg.pl'; require 'testlib.pl'; require 'tstatlib.pl'; require 'cybertestlib.pl'; use Time::Local; $FORM{'frm'}=""; &app_initialize; warn "INFO: " . __FILE__ . " running.\n" ; my $HBI_Debug = 0 ; my $HBI_Key ; if ($HBI_Debug) { foreach $HBI_Key (sort keys %FORM) { warn __FILE__ . " key $HBI_Key FORM $FORM{$HBI_Key} X" ; } } if ($FORM{'pdf'}) { print "Content-Type: application/pdf\n\n"; open(STDOUT, "| ".$cfgroot.$pathsep."html2pdf"); select(STDOUT); # needed for older versions of perl } else { print "Content-Type: text/html\n\n"; #print STDERR "Content-Type: text/html\n\n"; #open(STDOUT, "| filtertest.pl"); #select(STDOUT); } # ACT-C-001&Login Activity Report # ACT-C-005&Login Activity by User # ACT-C-002&Test Activity Report # ACT-C-003&Test Reports by Candidate # ACT-C-004&Test Statistics by Test # ACT-C-004F&Test Statistics by Test User Filter # ACT-C-006&Test Report by User # ACT-C-007&Timing Statistics by Test unless ($FORM{'tid'}) { warn "ERROR: Empty Session ID " ; &show_illegal_access_warning("user"); exit(); } if (&get_session($FORM{'tid'})) { &LanguageSupportInit(); unless ($SESSION{'clid'}) { warn "ERROR: Empty Client ID in Session data for Session ID $FORM{'tid'} " ; &show_illegal_access_warning("user"); exit(); } $REPORT{'rptid'}=""; @rptdefs = &get_data("reports.$SESSION{'clid'}"); @lbls = split(/&/, $rptdefs[0]); foreach $rptdef (@rptdefs) { chomp ($rptdef); @flds = split(/&/, $rptdef); if ($flds[0] eq $FORM{'rptno'}) { for $i (0 .. $#lbls) { $REPORT{$lbls[$i]} = $flds[$i]; $i++; } } } if (substr($FORM{'rptno'},0,5) ne 'ACT-C') { # This is a custom report my ($ret); (my $rptapp, @rptparams) = split(/ /, $REPORT{'rptapp'}); unless ($ret=do $rptapp) { warn "couldn't parse $REPORT{'rptapp'}: $@" if $@; warn "couldn't do $REPORT{'rptapp'}: $!" unless defined $ret; warn "couldn't run $REPORT{'rptapp'}" unless $ret; } # At this point the custom report takes over writing out all the html. } elsif (($FORM{'frm'} eq '1') || ($FORM{'frm'} eq '5')) { &show_index; } else { if ($FORM{'frm'} eq '2') { &show_detail; } else { if ($FORM{'frm'} eq '') { if ($FORM{'rptno'} eq 'ACT-C-004') { $REPORT{'rptid'}=$FORM{'rptno'}; &show_index; } elsif ($FORM{'rptno'} eq 'ACT-C-003') { $REPORT{'rptid'}=$FORM{'rptno'}; # &show_index; &show_frames_003; } elsif ($FORM{'rptno'} eq 'ACT-C-006') { $REPORT{'rptid'}=$FORM{'rptno'}; &show_detail; } elsif ($FORM{'rptno'} eq 'ACT-C-007') { $REPORT{'rptid'}=$FORM{'rptno'}; &show_frames_007; } elsif ($FORM{'rptno'} eq 'ACT-C-002') { $REPORT{'rptid'}=$FORM{'rptno'}; &show_frames_002; } elsif ($FORM{'rptno'} eq 'ACT-C-001') { $REPORT{'rptid'}=$FORM{'rptno'}; &show_frames_001; } else { &show_frames; } } else { print "<HTML>\n"; print "<HEAD></HEAD>\n"; print " <BODY BACKGROUND=\"$SYSTEM{'BACKGROUND'}\" BGCOLOR=\"$SYSTEM{'BGCOLOR'}\" TEXT=\"$SYSTEM{'TEXT'}\" LINK=\"$SYSTEM{'LINK'}\" VLINK=\"$SYSTEM{'VLINK'}\" ALINK=\"$SYSTEM{'ALINK'}\"> </BODY>\n"; print "</HTML>\n"; } } } } close(STDOUT); sub show_frames { print "<HTML>\n"; print "<HEAD></HEAD>\n"; print "<FRAMESET frameborder=0 cols=\"30%,*\">\n"; print "<FRAME name=\"rptindex\" frameborder=0 src=\"$urlroot/creports.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=1&rptno=$FORM{'rptno'}\">\n"; print "<FRAME name=\"rptdetail\" frameborder=0 src=\"$urlroot/creports.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=0&rptno=$FORM{'rptno'}\">\n"; print "</FRAMESET>\n"; print "</HTML>\n"; } sub show_frames_001 { print "<HTML>\n"; print "<HEAD></HEAD>\n"; print "<FRAMESET frameborder=0 rows=\"20%,*\">\n"; print "<FRAME name=\"rpthead\" frameborder=0 src=\"$urlroot/creports.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=5&rptno=$FORM{'rptno'}\">\n"; print "\t<FRAMESET frameborder=0 cols=\"30%,*\">\n"; print "\t<FRAME name=\"rptindex\" frameborder=0 src=\"$urlroot/creports.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=0&rptno=$FORM{'rptno'}\">\n"; print "\t<FRAME name=\"rptdetail\" frameborder=0 src=\"$urlroot/creports.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=0&rptno=$FORM{'rptno'}\">\n"; print "\t</FRAMESET>\n"; print "</FRAMESET>\n"; print "</HTML>\n"; } sub show_frames_002 { print "<HTML>\n"; print "<HEAD></HEAD>\n"; print "<FRAMESET frameborder=0 rows=\"25%,*\">\n"; print "\t<FRAME name=\"rptindex\" frameborder=0 src=\"$urlroot/creports.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=5&rptno=$FORM{'rptno'}\">\n"; print "\t<FRAME name=\"rptdetail\" frameborder=0 src=\"$urlroot/creports.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=1&rptno=$FORM{'rptno'}\">\n"; print "</FRAMESET>\n"; print "</HTML>\n"; } sub show_frames_003 { print "<HTML>\n"; print "<HEAD></HEAD>\n"; print "<FRAMESET frameborder=0 rows=\"60,*\">\n"; print "\t<FRAME noresize scrolling=\"no\" name=\"rptindx003\" frameborder=0 src=\"$urlroot/creports003.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=1&rptno=$FORM{'rptno'}\">\n"; print "\t<FRAMESET frameborder=0 cols=\"230,*\">\n"; print "\t\t<FRAME name=\"rpttidx003\" frameborder=0 src=\"$urlroot/creports003.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=0\">\n"; print "\t\t<FRAME name=\"rptdtl003\" frameborder=0 src=\"$urlroot/creports003.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=0\">\n"; print "\t</FRAMESET>\n"; print "</FRAMESET>\n"; print "</HTML>\n"; } sub show_frames_007 { print "<HTML>\n"; print "<HEAD></HEAD>\n"; print "<FRAMESET frameborder=0 rows=\"30%,*\">\n"; print "\t<FRAME name=\"rptindx007\" frameborder=0 src=\"$urlroot/creports007.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=1&rptno=$FORM{'rptno'}\">\n"; print "\t<FRAMESET frameborder=0 cols=\"30%,*\">\n"; print "\t\t<FRAME name=\"rptqidx007\" frameborder=0 src=\"$urlroot/creports007.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=0\">\n"; print "\t\t<FRAME name=\"rptdtl007\" frameborder=0 src=\"$urlroot/creports007.pl?lang=$SESSION{'lang'}&tid=$SESSION{'tid'}&frm=0\">\n"; print "\t</FRAMESET>\n"; print "</FRAMESET>\n"; print "</HTML>\n"; } sub print_report_header() { my $i; $dform=1; if ($REPORT{'rptid'} eq 'ACT-C-001') { # C_001 my ($frm); $faction="$cgiroot/creports.pl"; if ($FORM{"frm"} == 5) { $ftarget="rptindex"; $frm=1; } else { $ftarget="rptdetail"; $frm=2 } $fparms="<input type=hidden name=\"tid\" value=\"$SESSION{'tid'}\">\n"; $fparms=join('',$fparms,"<input type=hidden name=\"frm\" value=\"$frm\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"rptno\" value=\"$FORM{'rptno'}\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"dbfile\" value=\"\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"filter\" value=\"\">\n"); $fjscript=" function parmsC001(oform,dbf,fltr) { oform.dbfile.value=dbf; oform.filter.value=fltr; oform.submit(); } "; } elsif ($REPORT{'rptid'} eq 'ACT-C-002') { # C_002 $dform=1; my $testoptions=""; my $useroptions=""; my $groupoptions=""; my $yroptions=""; my $mooptions=""; my $dayoptions=""; my @flds; #print STDERR "ACT-C-002: cbcomplete = $FORM{'cbcomplete'}\n"; #print STDERR " cbsort = $FORM{'cbsort'}\n"; my $st = time; my @tmparray=&get_test_list($CLIENT{'clid'}); #my $end = time; #my $dl = $end - $st; #$st = $end; #print STDERR "get_test_list($CLIENT{'clid'}) - $dl seconds\n"; print "<!-- $CLIENT{'id'} $CLIENT{'clid'} -->\n"; foreach (sort @tmparray[1..$#tmparray]) { @flds=split(/&/,$_); $testoptions=join('',$testoptions,"<option value=\"$flds[0]\">$flds[0]\n"); @flds=(); } #$end = time; #$dl = $end - $st; #print STDERR " sorting - $dl seconds\n"; #$st = time; @tmparray=&get_client_cnd_list($CLIENT{'clid'}); #$end = time; #$dl = $end - $st; #print STDERR "get_client_cnd_list($CLIENT{'clid'}) - $dl seconds\n"; foreach (sort @tmparray[1..$#tmparray]) { @flds=split(/&/,$_); $useroptions=join('',$useroptions,"<option value=\"$flds[0]\">$flds[0]\n"); @flds=(); } #$end = time; #$dl = $end - $st; #print STDERR " sorting - $dl seconds\n"; @tmparray=&get_client_groups($CLIENT{'clid'}); foreach (sort @tmparray[0..$#tmparray]) { @flds=split(/&/,$_); $groupoptions=join('',$groupoptions,"<option value=\"$flds[1]\">$flds[2]\n"); @flds=(); } @tmparray=(); for $i (2000 .. scalar(1900+(localtime(time))[5])) { $yroptions = join('',"<option value=$i>$i\n",$yroptions); } for $i (1 .. 12) { $mooptions = join('',$mooptions,"<option value=$i>$i\n"); } for $i (1 .. 31) { $dayoptions = join('',$dayoptions,"<option value=$i>$i\n"); } $faction="$cgiroot/creports.pl"; if ($FORM{'cbcomplete'} eq '') { $FORM{'cbcomplete'}='2'; $FORM{'cbsort'}='0'; } if ($FORM{'frm'} eq '5') { $ftarget="rptdetail"; $fparms="<input type=hidden name=\"frm\" value=\"1\">\n"; if ($FORM{'cbcomplete'} eq '2') { @optmarks = split(/&/,"&&checked"); } elsif ($FORM{'cbcomplete'} eq '1') { @optmarks = split(/&/,"&checked&"); } else { @optmarks = split(/&/,"checked&&"); } if ($FORM{'cbsort'} eq '0') { @srtmarks = split(/&/,"checked&"); } else { @srtmarks = split(/&/,"&checked"); } $flrtmarks[0] = ($FORM{'cbfiltertest'} ne '') ? "checked" : "&"; $flrtmarks[1] = ($FORM{'cbfilteruser'} ne '') ? "checked" : "&"; $flrtmarks[2] = ($FORM{'cbfilterdate'} ne '') ? "checked" : "&"; $foptions="<TABLE cellpadding=0 cellspacing=0 border=0 width=100\%> <TR> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT COLOR=\"$SYSTEM{'HEADERCOLOR'}\" size=2>$xlatphrase[919] $xlatphrase[922]</FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT COLOR=\"$SYSTEM{'HEADERCOLOR'}\" size=2>$xlatphrase[920]</FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT COLOR=\"$SYSTEM{'HEADERCOLOR'}\" size=2>$xlatphrase[921]</FONT> </TD> </TR> <TR> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2> <input type=radio name=\"cbcomplete\" value=\"2\" $optmarks[2] onClick=\"this.form.submit()\">Completed<br> </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2> <input type=radio name=\"cbsort\" value=\"0\" $srtmarks[0] onClick=\"this.form.submit()\">$xlatphrase[919]<br> </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2>$xlatphrase[919]: <select name=\"testfilter\" onChange=\"this.form.submit()\"> <option value=\"\">All $testoptions </select> </FONT> </TD> </TR> <TR> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2> <input type=radio name=\"cbcomplete\" value=\"1\" $optmarks[1] onClick=\"this.form.submit()\">In Progress<br> </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2> <input type=radio name=\"cbsort\" value=\"1\" $srtmarks[1] onClick=\"this.form.submit()\">Username<br> </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2>User: <select name=\"userfilter\" onChange=\"this.form.submit()\"> <option value=\"\">All $useroptions </select> <nobr> Group: <select name=\"groupfilter\" onChange=\"this.form.submit()\"> <option value=\"\">All $groupoptions </select> </FONT> </TD> </TR> <TR> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2> <input type=radio name=\"cbcomplete\" value=\"0\" $optmarks[0] onClick=\"this.form.submit()\">Pending<br> </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2> <input type=radio name=\"cbsort\" value=\"2\" $srtmarks[2] onClick=\"this.form.submit()\">Date<br> </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2>Date: <nobr> <select name=\"yearfilter\" onChange=\"this.form.submit()\"> <option value=\"\">All $yroptions </select> <select name=\"monthfilter\" onChange=\"this.form.submit()\"> <option value=\"\">All $mooptions </select> <select name=\"dayfilter\" onChange=\"this.form.submit()\"> <option value=\"\">All $dayoptions </select> </nobr> </FONT> </TD> </TR> <TR> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2>\ </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2>\ </FONT> </TD> <TD ALIGN=\"left\" VALIGN=\"top\"> <FONT size=2>Email Pattern: <input type=textbox name=\"emailmask\" value=\"\" size=20 onChange=\"this.form.submit()\"> </FONT> </TD> </TR> </TABLE>\n"; } else { $ftarget="rptdetail002"; $fparms=join('',$fparms,"<input type=hidden name=\"frm\" value=\"2\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"cbcomplete\" value=\"$FORM{'cbcomplete'}\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"cbsort\" value=\"$FORM{'cbsort'}\">\n"); } $fparms=join('',$fparms,"<input type=hidden name=\"tid\" value=\"$SESSION{'tid'}\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"rptno\" value=\"$FORM{'rptno'}\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"dbfile\" value=\"\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"location\" value=\"\">\n"); $fjscript=" function parmsC002(oform,dbf,loctn) { oform.dbfile.value=dbf; oform.location.value=loctn; oform.submit(); } "; } elsif ($REPORT{'rptid'} eq 'ACT-C-003') { # C_003 $faction="$cgiroot/creports.pl"; $ftarget="rptwindow"; $fparms="<input type=hidden name=\"tid\" value=\"$SESSION{'tid'}\">\n"; $fparms=join('',$fparms,"<input type=hidden name=\"frm\" value=\"2\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"rptno\" value=\"$FORM{'rptno'}\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"cndid\" value=\"\">\n"); $fjscript=" function parmsC003(oform,cnd) { oform.cndid.value=cnd; oform.submit(); } "; } elsif ($REPORT{'rptid'} eq 'ACT-C-004') { # C_004 $faction="$cgiroot/teststats.pl"; $ftarget="rptwindow"; $fparms="<input type=hidden name=\"tid\" value=\"$SESSION{'tid'}\">\n"; $fparms=join('',$fparms,"<input type=hidden name=\"tstid\" value=\"\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"rptdesc\" value=\"$REPORT{'rptdesc'}\">\n"); $fparms=join('',$fparms,"<input type=hidden name=\"rptid\" value=\"$REPORT{'rptid'}\">\n"); $finputs="<table cellpadding=2 border=1>\n"; $finputs=join('',$finputs,"\t<tr>\n\t\t<td colspan=3 align=center valign=top>Advanced Options<br></td>\n</tr>\n"); $finputs=join('',$finputs,"<tr>\n"); $finputs=join('',$finputs,"\t\t<td valign=top><font size=2>\n<i>Question Statistics:</i><br>\n"); $finputs=join('',$finputs,"<input type=radio name=\"testsummary\" value=\"composite\" onClick=\"return reportOptions(this)\"> Question Statistics<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"showobs\" onClick=\"return reportOptions(this)\"> include inactive questions<br>\n"); #$finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"exunans\"> exclude unanswered questions<br>\n"); $unansel = "<select name=minunans>\n"; $unansel .= build_number_select_list(5,20,spread); $unansel .= "</select>\n"; $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<nobr><input type=checkbox name=\"exunans\"> exclude questions with fewer than $unansel responses</nobr><br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"exnoresp\"> exclude No Response from stats<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<i>User Comments:</i><br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=radio name=\"showcmts\" value=\"donot\" onClick=\"return reportOptions(this)\"> do not include<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=radio name=\"showcmts\" value=\"withq\" onClick=\"return reportOptions(this)\"> include with question<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=radio name=\"showcmts\" value=\"atend\" onClick=\"return reportOptions(this)\"> include at end<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=radio name=\"showcmts\" value=\"atendwonocomm\" onClick=\"return reportOptions(this)\"> include at end without uncommented questions<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"anoncmts\"> anonymize comments and essay(narrative) responses<br>\n"); $finputs=join('',$finputs,"\t\t</font></td>\n"); $finputs=join('',$finputs,"\t\t<td valign=top><font size=2>\n<i>$xlatphrase[28] $xlatphrase[923]</i><br>\n"); $finputs=join('',$finputs,"<input type=radio name=\"testsummary\" value=\"bycnd\" onClick=\"return reportOptions(this)\"> $xlatphrase[924]<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"statsbysubj\" onClick=\"return reportOptions(this)\"> $xlatphrase[925]<br>\n"); $finputs=join('',$finputs,"\t\t</font></td>\n"); $finputs=join('',$finputs,"\t\t<td valign=top nowrap><font size=2>\n<i>$xlatphrase[926]:</i><br>"); $finputs=join('',$finputs,"<input type=radio name=\"testsummary\" value=\"extractemail\" onClick=\"return reportOptions(this)\"> $xlatphrase[927]<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"cndnme\" onClick=\"return reportOptions(this)\"> $xlatphrase[103] $xlatphrase[279]<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"cndeml\" onClick=\"return reportOptions(this)\"> $xlatphrase[103] $xlatphrase[188]<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"cndscr\" onClick=\"return reportOptions(this)\"> $xlatphrase[103] $xlatphrase[361]<br>\n"); $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"cnddat\" onClick=\"return reportOptions(this)\"> $xlatphrase[163]<br>\n"); if ($CLIENT{'clcnd1'} ne "") { $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"excnd1\" onClick=\"return reportOptions(this)\"> $CLIENT{'clcnd1'}<br>\n"); } if ($CLIENT{'clcnd2'} ne "") { $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"excnd2\" onClick=\"return reportOptions(this)\"> $CLIENT{'clcnd2'}<br>\n"); } if ($CLIENT{'clcnd3'} ne "") { $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"excnd3\" onClick=\"return reportOptions(this)\"> $CLIENT{'clcnd3'}<br>\n"); } if ($CLIENT{'clcnd4'} ne "") { $finputs=join('',$finputs,"\ \;\ \;\ \;\ \;\ \;<input type=checkbox name=\"excnd4\" onClick=\"return reportOptions(this)\"> $CLIENT{'clcnd4'}<br>\n"); } ### DED 4/6/07 Show pending rather than completed $finputs=join('',$finputs,"<br>\n"); $finputs=join('',$finputs,"<input type=checkbox name=\"shwpending\" onClick=\"return reportOptions(this)\"> $xlatphrase[932]<br>\n"); $finputs=join('',$finputs,"\t\t</font></td>\n"); $finputs=join('',$finputs,"\t</tr>\n"); $finputs=join('',$finputs,"\t</tr>\n"); $finputs=join('',$finputs,"\t\t<td align=left valign=top> \n"); $finputs=join('',$finputs,"\t\t</td>\n"); $finputs=join('',$finputs,"\t\t<td align=left valign=top colspan=2><font size=2>\n"); ### DED 4/6/07 Filter indiv results/extractions by custom fields $ffinputs = ""; if ($CLIENT{'clcnd1vals'} ne '' ) { $ffinputs .= &print_clcnd_input($CLIENT{'clid'}, 1, 0, 0); } if ($CLIENT{'clcnd2vals'} ne '' ) { $ffinputs .= &print_clcnd_input($CLIENT{'clid'}, 2, 0, 0); } if ($CLIENT{'clcnd3vals'} ne '' ) { $ffinputs .= &print_clcnd_input($CLIENT{'clid'}, 3, 0, 0); } if ($CLIENT{'clcnd4vals'} ne '' ) { $ffinputs .= &print_clcnd_input($CLIENT{'clid'}, 4, 0, 0); } if ($ffinputs ne "") { $finputs .= "Filter Individual Results or Extractions by:<br>\n"; $finputs .= "<table>\n".$ffinputs."</table>\n"; } $finputs=join('',$finputs,"\t\t</font></td>\n"); $finputs=join('',$finputs,"\t</tr>\n"); $finputs=join('',$finputs,"\t</tr>\n"); $finputs=join('',$finputs,"\t\t<td align=left valign=top><font size=2>\n"); ### DED 10/24/2002 ### Added Filter-by-question options #$finputs=join('',$finputs,"\ \;<br>\n"); $finputs=join('',$finputs,"<input type=checkbox name=\"filterbyques\" onClick=\"return filterCheck(this.form)\"> $xlatphrase[921] $xlatphrase[328]<br>\n"); $finputs=join('',$finputs,"<input type=checkbox name=\"specfilter\" onClick=\"return filterCheck(this.form)\"> $xlatphrase[921] $xlatphrase[928]<br>\n"); $finputs=join('',$finputs,"\t\t</font></td>\n"); $finputs=join('',$finputs,"\t\t<td align=right valign=top><font size=2>\n"); my $j; $finputs=join('',$finputs,"$xlatphrase[929]: <select name=\"mofm\">\n"); for $i (526 .. 537) { $j=$i-525; $finputs=join('',$finputs,"<option value=\"$j\">$xlatphrase[$i]\n"); } $finputs=join('',$finputs,"</select><select name=\"dyfm\">\n"); for $i (1 .. 31) { $finputs=join('',$finputs,"<option value=\"$i\">$i\n"); } $finputs=join('',$finputs,"</select><select name=\"yrfm\">\n"); for $i (2000 .. 2099) { $finputs=join('',$finputs,"<option value=\"$i\">$i\n"); } $finputs=join('',$finputs,"</select><br>\n"); $finputs=join('',$finputs,"$xlatphrase[433]: <select name=\"moto\">\n"); for $i (526 .. 537) { $j=$i-525; $finputs=join('',$finputs,"<option value=\"$j\">$xlatphrase[$i]\n"); } $finputs=join('',$finputs,"</select><select name=\"dyto\">\n"); for $i (1 .. 31) { $finputs=join('',$finputs,"<option value=\"$i\">$i\n"); } $finputs=join('',$finputs,"</select><select name=\"yrto\">\n"); for $i (2000 .. 2099) { $finputs=join('',$finputs,"<option value=\"$i\">$i\n"); } $finputs=join('',$finputs,"</select><br>\n"); $finputs=join('',$finputs,"\t\t</font></td>\n"); $finputs=join('',$finputs,"\t\t<td align=right valign=top><font size=2>\n"); $finputs=join('',$finputs,"<input type=checkbox name=\"export\" onClick=\"return reportOptions(this)\"> $xlatphrase[930]<br>\n"); $finputs=join('',$finputs,"\t\t</font></td>\n"); $finputs=join('',$finputs,"\t</tr>\n"); $finputs=join('',$finputs,"</table>\ \;<br>\n"); $fjscript=" function onWdwLoad() { var oform=document.rptform1; oform.mofm.selectedIndex=0; oform.dyfm.selectedIndex=0; oform.yrfm.selectedIndex=0; oform.moto.selectedIndex=oform.moto.options.length-1; oform.dyto.selectedIndex=oform.dyto.options.length-1; oform.yrto.selectedIndex=oform.yrto.options.length-1; oform.testsummary[0].checked=true; oform.showcmts[0].checked=true; } function filterCheck(oform) { if (oform.specfilter.checked==true || oform.filterbyques.checked==true) { oform.action=\"$cgiroot/creportsf.pl\"; } else { oform.action=\"$cgiroot/teststats.pl\"; } } function parmsC004(oform,tst) { oform.tstid.value=tst; oform.submit(); } function reportOptions(oinp) { var oform=oinp.form,idx; if (oinp.name==\"testsummary\") { idx=(oform.testsummary[0].checked) ? 0 : -1; idx=(oform.testsummary[1].checked) ? 1 : idx; idx=(oform.testsummary[2].checked) ? 2 : idx; return testsummaryClick(oform,idx); } else { if (oinp.name==\"showcmts\") { idx=(oform.showcmts[0].checked) ? 0 : -1; idx=(oform.showcmts[1].checked) ? 1 : idx; idx=(oform.showcmts[2].checked) ? 2 : idx; idx=(oform.showcmts[3].checked) ? 3 : idx; return showcmtsClick(oform,idx); } else { if (oinp.name==\"statsbysubj\") { return statsbysubjClick(oform,oinp.checked); } else { if (oinp.name==\"showobs\") { return showobsClick(oform,oinp.checked); } else { if (oinp.name==\"export\") { return exportClick(oform,oinp.checked); } else { return dataextractOpts(oform); } } } } } } function dataextractOpts(oform) { if (!(oform.testsummary[2].checked)) { oform.testsummary[2].checked=true; oform.showcmts[0].checked=false; oform.showcmts[1].checked=false; oform.showcmts[2].checked=false; oform.showcmts[3].checked=false; oform.statsbysubj.checked=false; oform.showobs.checked=false; oform.exunans.checked=false; oform.exnoresp.checked=false; } return true; } function testsummaryClick(oform,i) { if (i==0) { if (!((oform.showcmts[0].checked) || (oform.showcmts[1].checked) || (oform.showcmts[2].checked) || (oform.showcmts[3].checked) )) { oform.showcmts[0].checked=true; oform.statsbysubj.checked=false; oform.showobs.checked=false; oform.exunans.checked=false; oform.cndnme.checked=false; oform.cndeml.checked=false; oform.exnoresp.checked=false; if (\"$CLIENT{'clcnd1'}\" != \"\") { oform.cnd1.checked=false; } if (\"$CLIENT{'clcnd2'}\" != \"\") { oform.cnd2.checked=false; } if (\"$CLIENT{'clcnd3'}\" != \"\") { oform.cnd3.checked=false; } if (\"$CLIENT{'clcnd4'}\" != \"\") { oform.cnd4.checked=false; } oform.cndscr.checked=false; } } else { if (i==1) { oform.showcmts[0].checked=false; oform.showcmts[1].checked=false; oform.showcmts[2].checked=false; oform.showcmts[3].checked=false; oform.statsbysubj.checked=false; oform.showobs.checked=false; oform.exunans.checked=false; oform.exnoresp.checked=false; oform.cndnme.checked=false; oform.cndeml.checked=false; if (\"$CLIENT{'clcnd1'}\" != \"\") { oform.cnd1.checked=false; } if (\"$CLIENT{'clcnd2'}\" != \"\") { oform.cnd2.checked=false; } if (\"$CLIENT{'clcnd3'}\" != \"\") { oform.cnd3.checked=false; } if (\"$CLIENT{'clcnd4'}\" != \"\") { oform.cnd4.checked=false; } oform.cndscr.checked=false; } else { if (i==2) { oform.showcmts[0].checked=false; oform.showcmts[1].checked=false; oform.showcmts[2].checked=false; oform.showcmts[3].checked=false; oform.statsbysubj.checked=false; oform.showobs.checked=false; oform.exunans.checked=false; oform.exnoresp.checked=false; } } } return true; } function showcmtsClick(oform,i) { if (!(oform.testsummary[0].checked)) { oform.testsummary[0].checked=true; oform.statsbysubj.checked=false; oform.showobs.checked=false; oform.exunans.checked=false; oform.exnoresp.checked=false; } return true; } function statsbysubjClick(oform,chkd) { if (chkd) { if (!(oform.testsummary[1].checked)) { oform.testsummary[1].checked=true; oform.showcmts[0].checked=false; oform.showcmts[1].checked=false; oform.showcmts[2].checked=false; oform.showcmts[3].checked=false; oform.showobs.checked=false; oform.exunans.checked=false; oform.exnoresp.checked=false; } } return true; } function showobsClick(oform,chkd) { if (chkd) { if (!(oform.testsummary[0].checked)) { oform.testsummary[0].checked=true; oform.showcmts[0].checked=true; oform.statsbysubj.checked=false; } } return true; } function exportClick(oform,chkd) { return true; } window.onload=onWdwLoad; "; } else { # C_006 $dform=0; $fjscript=""; $finputs=""; } print "<HTML> <HEAD> <TITLE>$REPORT{'rptid'} - $REPORT{'rptdesc'}</TITLE> <SCRIPT language=\"JavaScript\"> <!-- $fjscript function right(e) { if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2)) { alert(\"This source and all graphics are proprietary and may not be viewed or copied.\"); return false; } else { if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3)) { alert(\"This source and all graphics are proprietary and may not be viewed or copied.\"); 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'}\"> "; if ($dform) { print "<FORM name=\"rptform1\" action=\"$faction\" METHOD=POST target=\"$ftarget\">\n$fparms\n"; } if (($REPORT{'rptid'} eq 'ACT-C-004') || ($REPORT{'rptid'} eq 'ACT-C-003')) { print "<TABLE cellpadding=0 cellspacing=0 border=0 width=100\%> <TR> <TD VALIGN=\"top\">$CLIENT{'logo'}</TD> <TD ALIGN=\"right\"> <FONT COLOR=\"$SYSTEM{'HEADERCOLOR'}\" size=2> <B>$REPORT{'rptdesc'}\ -\ $REPORT{'rptid'}</B><BR> </FONT> </TD> </TR> </TABLE> "; } else { if (($REPORT{'rptid'} ne 'ACT-C-002') || (($REPORT{'rptid'} eq 'ACT-C-002') && ($FORM{'frm'} ne '1'))) { print "<TABLE cellpadding=0 cellspacing=0 border=0 width=100\%> <TR> <TD VALIGN=\"top\">$CLIENT{'logo'}</TD> </TR> <TR> <TD ALIGN=\"center\"> <FONT COLOR=\"$SYSTEM{'HEADERCOLOR'}\" size=2> <B>$REPORT{'rptdesc'}\ -\ $REPORT{'rptid'}</B><BR> </FONT> </TD> </TR> </TABLE> "; } if (($REPORT{'rptid'} eq 'ACT-C-002') && ($FORM{'frm'} eq '5')) { print "$foptions\n"; } } } sub print_report_footer() { if ($dform) { print "</FORM>\n";} print "</BODY>\n</HTML>\n"; } sub print_report_C_001 { if ($FORM{"frm"} == 5) { # print the chooser # Filter by date my ($j); print "<Table><tr><td>"; #print "Filter by user <input type=checkbox name=\"specfilter\" onClick=\"return filterCheck(this.form)\"><br>\n"; #print "</td>\n<td>"; print "$xlatphrase[929]: <select name=\"mofm\">\n"; $i = 526; $j = $i-525; print "<option value=\"$j\" selected>$xlatphrase[$i]\n"; for $i (527 .. 537) { $j=$i-525; print "<option value=\"$j\">$xlatphrase[$i]\n"; } print "</select><select name=\"dyfm\">\n"; $i=1; print "<option value=\"$i\" selected>$i\n"; for $i (2 .. 31) { print "<option value=\"$i\">$i\n"; } print "</select><select name=\"yrfm\">\n"; $i = 2000; print "<option value=\"$i\" selected>$i\n"; for $i (2001 .. 2099) { print "<option value=\"$i\">$i\n"; } print "</select></td>\n<td>"; print "$xlatphrase[433]: <select name=\"moto\">\n"; for $i (526 .. 536) { $j=$i-525; print "<option value=\"$j\">$xlatphrase[$i]\n"; } $i = 537; $j = $i-525; print "<option value=\"$j\" selected>$xlatphrase[$i]\n"; print "</select><select name=\"dyto\">\n"; for $i (1 .. 30) { print "<option value=\"$i\">$i\n"; } $i=31; print "<option value=\"$i\" selected>$i\n"; print "</select><select name=\"yrto\">\n"; for $i (2000 .. 2036) { print "<option value=\"$i\">$i\n"; } $i = 2037; print "<option value=\"$i\" selected>$i\n"; print "</select></td></tr>\n"; # Filter by user/canidate # Code taken from creports003.pl sub show_index_candidates. # Unfortunately we couldn't use the subroutine directly since # it writes the entire webpage, not just the section we need. my @clrecs = &get_client_cnd_list($CLIENT{'clid'}); my @clnamesort=(); my @clidsort=(); my $namesort; my $idsort; for (1 .. $#clrecs) { $clrecs[$_] =~ s/\n//g; ($id, $pwd, $sal, $nmf, $nmm, $nml) = split(/&/, $clrecs[$_]); unless (($id eq '') || ($nml eq '')) { $namesort=join('&',$nml,$nmf,$nmm,$id); #print STDERR "$SESSION{'clid'}, $SESSION{'uid'}, $SESS{'clid'}, $SESS{'uid'}, $id is the super string\n"; $imaregistrar = &get_a_key("cnd.$SESSION{'clid'}", $SESSION{'uid'}, "registrar"); if ($imaregistrar eq 'Y') { $mycreator = &get_a_key("cnd.$SESSION{'clid'}", $id, "createdby"); if ($SESSION{'uid'} eq $mycreator) { push @clnamesort, $namesort; } } else { push @clnamesort, $namesort; } } } @clrecs = &get_client_admin_list($CLIENT{'clid'}); foreach (@clrecs) { s/\n//g; ($uid) = split(/&/, $_); unless ($uid eq '') { $namesort = "Admin User&&&$uid"; push @clnamesort, $namesort unless $imaregistrar eq 'Y';; } } @clrecs = sort @clnamesort; @clnamesort=(); print "<tr><td>\n"; print "$xlatphrase[279]:<SELECT name=\"cndnamesort\" onChange=\"return nameSelect(this.form)\">\n"; print "<OPTION value=\"0\"> </OPTION>\n"; for (0 .. $#clrecs) { ($nml, $nmf, $nmm, $id) = split(/&/, $clrecs[$_]); $idsort=join('&',$id,$nml,$nmf,$nmm); push @clidsort, $idsort; print "<OPTION value=\"$id\">$nml, $nmf $nmm ($id)</OPTION>\n"; } print "</SELECT>\n"; @clrecs = sort @clidsort; @clidsort=(); print "</td>\n<td>ID:<SELECT name=\"cndidsort\" onChange=\"return idSelect(this.form)\">\n"; print "<OPTION value=\"0\"> </OPTION>\n"; for (0 .. $#clrecs) { ($id,$nml,$nmf,$nmm) = split(/&/, $clrecs[$_]); print "<OPTION value=\"$id\">$id - $nml, $nmf $nmm\n"; } print "</SELECT>\n"; print "</td></tr></table>\n"; print "<input type=\"submit\" value=\"Display\">\n"; } else { # print the index opendir(DIR, "$logroot"); @dircon = readdir(DIR); closedir DIR; #print STDERR Dumper(\@dircon); @sdircon = sort {substr($a,5) <=> substr($b,5)} grep(/^sess\./,@dircon); #print STDERR Dumper(\@sdircon); my $from = timelocal(0,0,0,$FORM{'dyfm'},$FORM{'mofm'}-1,$FORM{'yrfm'}); my $to = timelocal(0,0,0,$FORM{'dyto'},$FORM{'moto'}-1,$FORM{'yrto'}); foreach $diritem (@sdircon) { chomp ($diritem); if ($diritem =~ /sess\.[0-9]/i ) { @lines = &get_log($diritem); foreach $line (@lines) { chomp ($line); ($nm,$vlu)=split(/=/, $line); $SESS{$nm}=$vlu; } if ($FORM{"inc$SESS{'uid'}"}) { next; } my $time = substr($SESS{'tid'}, 0, -4); if ($time < $from or $time > $to) { next; } if ($FORM{'cndnamesort'} or $FORM{'cndidsort'}) { if ($SESS{'uid'} ne $FORM{'cndnamesort'} and $SESS{'uid'} ne $FORM{'cndidsort'}) { next; } } if ($SESS{'clid'} eq $SESSION{'clid'}) { $tmstr = &format_date_time("yy-mm-dd hh:nn", "1", "-10000", $time); print "<FONT SIZE=2>$tmstr <A HREF=\"javascript:parmsC001(document.rptform1,\'$SESS{'clid'}.$SESS{'uid'}\',\'$SESS{'tid'}\')\;\">$SESS{'uid'}.$SESS{'clid'}</A></FONT><BR>\n"; } } } } } sub candidateNameFromFile { my ($diritem,$dirid) = @_; my $cndid; my $testid; my $clid; my $fname; my @retvals; my @testinfo; if ($dirid == 2) { $fname=join($pathsep,$testcomplete,$diritem); } elsif ($dirid == 1) { $fname=join($pathsep,$testinprog,$diritem); } elsif ($dirid == 0) { $fname=join($pathsep,$testpending,$diritem); } $retvals[0]=0; $retvals[1]=""; $retvals[2]=""; $retvals[3]=""; #print STDERR "$fname\n"; if (-e $fname and open(TSTFILE, "<$fname")) { @testinfo = <TSTFILE>; close TSTFILE; ($clid,$cndid,$testid,$etc) = split(/&/,$testinfo[0]); #print STDERR "($clid,$cndid,$testid,$etc)\n"; if ((&get_candidate_profile( $clid, $cndid))) { $retvals[0]=1; $retvals[1]="$CANDIDATE{'nml'}, $CANDIDATE{'nmf'} $CANDIDATE{'nmm'}"; $retvals[2]=$cndid; $retvals[3]=$testid; $retvals[4]=$CANDIDATE{'eml'}; } } return @retvals; } sub print_report_C_002O { return; } sub print_report_C_002I { my $dirname; my $diritem; my @dircon; my @sdircon; my @cndflds; my @lines; my @sorted; my $trec; my $curtst; my $dirtitle; my @testdates; my $iopt; my $j; my $optval; my $qcor; my $qinc; my $tscore; my $filterok; print "<TABLE border=0 cellpadding=0 cellspacing=0 width=100\%>\n"; if ($FORM{'cbcomplete'} eq '0') { $dirname=$testpending; $dirtitle="Tests Pending"; } elsif ($FORM{'cbcomplete'} eq '1') { $dirname=$testinprog; $dirtitle="Tests In Progress"; } else { $dirname=$testcomplete; $dirtitle="Completed Tests"; } opendir(DIR, $dirname); @dircon = readdir(DIR); closedir DIR; @sdircon = sort @dircon; #print STDERR "print_report_C_002I - ".time."\n"; my @cnds = &get_data("cnd.".$SESSION{'clid'}); shift @cnds; my %cnds; foreach (@cnds) { my @flds = split(/&/,$_); $cnds{$flds[0]} = "$flds[5], $flds[3], $flds[4]"; } #print STDERR Dumper(\%cnds); $registrarkey = &get_a_key("cnd.$SESSION{'clid'}", $SESSION{'uid'}, "registrar"); foreach $diritem (@sdircon) { if ($diritem =~ /\.(tim|history)$/) {next;} $filterok=0; chomp ($diritem); @registrarchk = split(/\./, $diritem); $percnd_creator = &get_a_key("cnd.$SESSION{'clid'}", $registrarchk[1], "createdby"); if ($registrarkey eq 'Y') { next unless $SESSION{'uid'} eq $percnd_creator; } @cndflds = (0,'','',''); if ($diritem =~ /$SESSION{'clid'}\.([\-\w]+\.[\-\w]+\.[\-\w]+\.[\-\w]+)\.([\-\w]+)/i ) { ($cndflds[2],$cndflds[3]) = ($1,$2); $filterok=1; } elsif ($diritem =~ /$SESSION{'clid'}\.([\-\w]+\.[\-\w]+\.[\-\w]+)\.([\-\w]+)/i ) { ($cndflds[2],$cndflds[3]) = ($1,$2); $filterok=1; } elsif ($diritem =~ /$SESSION{'clid'}\.([\-\w+\.\-\w]+)\.([\-\w]+)/i ) { ($cndflds[2],$cndflds[3]) = ($1,$2); $filterok=1; } elsif ($diritem =~ /$SESSION{'clid'}\.([\-\w]+)\.([\-\w]+)/i ) { ($cndflds[2],$cndflds[3]) = ($1,$2); $filterok=1; } if ($filterok == 1) { #@cndflds=&candidateNameFromFile($diritem,$FORM{'cbcomplete'}); #$filterok=($cndflds[0] != 0) ? 1 : 0; if (exists $cnds{$cndflds[2]}) { $filterok=1; $cndflds[1] = $cnds{$cndflds[2]}; $cndflds[0] = 1; } else { $filterok=0; } } if ($filterok == 1 && $FORM{'groupfilter'} ne '') { my @grpcnds = &get_group_cnds($SESSION{'clid'}, $FORM{'groupfilter'}); $grpcnds = join(':', @grpcnds); @grpcnds = (); $grpcnds = ":$grpcnds:"; } if ($filterok == 1) { if ($FORM{'testfilter'} ne '') { $filterok=($cndflds[3] eq $FORM{'testfilter'}) ? 1 : 0; } if ($filterok == 1) { if ($FORM{'userfilter'} ne '') { $filterok=($cndflds[2] eq $FORM{'userfilter'}) ? 1 : 0; } } if ($filterok == 1) { if ($FORM{'groupfilter'} ne '') { $filterok=($grpcnds =~ /:$cndflds[2]:/i) ? 1 : 0; } } if ($filterok == 1) { if ($FORM{'emailmask'} ne '') { $filterok=($cndflds[4] =~ /$FORM{'emailmask'}/i) ? 1 : 0; } } if ($filterok == 1) { if (($FORM{'yearfilter'} ne '') || ($FORM{'monthfilter'} ne '') || ($FORM{'dayfilter'} ne '')) { $filterok=1; } } } if ($filterok == 1) { if ($FORM{'cbsort'} eq '0') { $trec = join('&',$cndflds[3],$cndflds[1],$diritem,$cndflds[2]); push @lines, $trec; } elsif ($FORM{'cbsort'} eq '1') { $trec = join('&',$cndflds[1],$cndflds[3],$diritem,$cndflds[2]); push @lines, $trec; } else { if ($FORM{'cbcomplete'} eq '2') { #print "<!-- getHistoricTests $testcomplete,$CLIENT{'clid'},$cndflds[3],$cndflds[2] -->\n"; @testdates = getHistoricTests($testcomplete,$CLIENT{'clid'},$cndflds[3],$cndflds[2]); for $iopt (0 .. $#testdates) { $j=$#testdates-$iopt; ($optval,$qcor,$qinc,$tscore) = split(/&/, $testdates[$j]); $optdesc = $optval; $optval =~ s/ /_/g; $optdesc =~ s/ GMT//g; $trec = join('&',$cndflds[3],$cndflds[1],$diritem,$cndflds[2],$optdesc); push @lines, $trec; #print "<!-- $trec -->\n"; } @testdates = (); } else { $trec = join('&',$cndflds[1],$cndflds[3],$diritem,$cndflds[2]); push @lines, $trec; } } } } #print STDERR " - ".time."\n"; @sorted = sort @lines; @lines = (); print "<TR><TD align=center><B>$dirtitle</B></td></tr>\n"; if ($FORM{'cbsort'} eq '1') { print "<TR>\n"; print "<TD>User Name</TD>\n"; print "<TD align=left><FONT SIZE=2>Test/Survey ID</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>Date</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>User ID</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>File Name</FONT></TD>\n"; print "</TR>\n"; } else { print "<TR>\n"; print "<TD>Test/Survey ID</TD>\n"; print "<TD align=left><FONT SIZE=2>User Name</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>Date</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>User ID</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>File Name</FONT></TD>\n"; print "</TR>\n"; } my $curtst = ""; for $i (0 .. $#sorted) { @cndflds = split(/&/,$sorted[$i]); if ($curtst ne $cndflds[0]) { print "<TR><TD>$cndflds[0]</TD></TR>\n"; $curtst=$cndflds[0]; } print "<TR>\n"; print "<TD>\ </TD>\n"; print "<TD align=left><FONT SIZE=2><A HREF=\"javascript:parmsC002(document.rptform1,\'$cndflds[2]\',\'$FORM{'cbcomplete'}\')\;\">$cndflds[1]</A></FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>$cndflds[4]</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>$cndflds[3]</FONT></TD>\n"; print "<TD align=left><FONT SIZE=2>$cndflds[2]</FONT></TD>\n"; print "</TR>\n"; } print "</TABLE>\n"; #print STDERR " - ".time."\n"; } sub print_report_C_003 { &get_candidate_profile( $SESSION{'clid'}, $SESSION{'uid'} ); if( $CANDIDATE{'grpowner'} eq 'Y' ) { $isGroupOwner = 1; } else { $isGroupOwner = 0; } if( $isGroupOwner ) { @ownerGroups = &get_gradebooks_list( $SESSION{'clid'}, $SESSION{'uid'} ); foreach $group ( @ownerGroups ) { chop( $group ); # Remove newline character @fields = split( /&/, $group ); # Separate into fields $groupId = $fields[1]; push( @groups, $groupId ); $groupNames{$groupId} = $fields[2]; foreach $candidate ( split( /,/, $fields[3] ) ) { $tempName = join( ':', $groupId, $candidate ); $groupCand{$tempName} = 1; } } } @cndrecs = &get_data("cnd.$SESSION{'clid'}"); $flds = shift @cndrecs; chop ($flds); @flds = split(/&/, $flds); $nflds = $#flds; @myunalphaidx=(); foreach $cndrec (@cndrecs) { chop ($cndrec); @fldvals = split(/&/, $cndrec); for (0 .. $nflds) { $RECFLD{$flds[$_]} = $fldvals[$_];} $idxline = $RECFLD{'nml'}; # v sac report alpha indexing $myalpha=uc(substr($idxline,0,1)); unless ( $myalphaindex =~ /.$myalpha/) { $myalphaindex=join('',$myalphaindex,$myalpha); push @myunalphaidx, $myalpha; } # ^ sac report alpha indexing $idxline = join('', $idxline, ", ", $RECFLD{'nmf'}, " ", $RECFLD{'nmm'}); $idxline = join('', $idxline, ", ", $RECFLD{'sal'}); $idxline = join('&', $idxline, $RECFLD{'uid'}); if( $isGroupOwner ) { $cntr = 0; foreach $group ( @groups ) { $tempName = join( ':', $group, $RECFLD{'uid'} ); if( defined( $groupCand{$tempName} ) ) { $idxline2 = join( '&', $group, $idxline ); push( @cndlist, $idxline2 ); } } } else { push( @cndlist, $idxline ); } } #end foreach # v sac report alpha indexing @myalphaidx=sort @myunalphaidx; @myunalphaidx=(); $myalphaindex=""; foreach $myalpha (@myalphaidx) { $myalphaindex=join(' ',$myalphaindex,"<a href=\"\#alpha$myalpha\">$myalpha</a>"); } $myalpha=""; # ^ sac report alpha indexing print "<CENTER><B>Test/Survey Results by Candidate</B><br>\n"; print "$finputs"; print "<TABLE cellpadding=1 cellspacing=1 border=0 width=\"100\%\">\n"; print "<tr>\n"; print "\t<td colspan=5><HR WIDTH=\"100\%\"></td>\n"; print "</tr>\n"; print "<TR>\n"; print "\t<TD valign=top><B><FONT SIZE=2>Candidate Name</FONT></B></TD>\n"; print "\t<TD valign=top><B><FONT SIZE=2>ID</FONT></B></TD>\n"; print "\t<TD align=right valign=top><B><FONT SIZE=2>Cmp</FONT></B></TD>\n"; print "\t<TD align=right valign=top><B><FONT SIZE=2>InP</FONT></B></TD>\n"; print "\t<TD align=right valign=top><B><FONT SIZE=2>Pnd</FONT></B></TD>\n"; print "</TR>\n"; if( !$isGroupOwner ) { print "<TR>\n"; print "\t<TD colspan=5><HR WIDTH=\"100\%\"></TD>\n"; print "</TR>\n"; } @sortedlist = sort {uc($a) cmp uc($b)} @cndlist; @cndlist = (); @cndrecs = (); foreach $cndrec (@sortedlist) { if( $isGroupOwner ) { ($groupId, $href, $id) = split(/&/, $cndrec); } else { ($href, $id) = split(/&/, $cndrec); } # v sac report alpha indexing unless (uc(substr($href,0,1)) eq $myalpha ) { if ($#myalphaidx != -1) { $myalpha=shift @myalphaidx; print "<tr><td colspan=5>"; print "<a name=\"alpha$myalpha\">Index:</a>$myalphaindex"; print "</td></tr>"; } } # ^ sac report alpha indexing $testscompleted = CountCndTests($testcomplete, $CLIENT{'clid'},$id); $testscompleted = CountCndFiles($testcomplete, $CLIENT{'clid'},$id); $testsinprogress = CountCndFiles($testinprog, $CLIENT{'clid'},$id); $testspending = CountCndFiles($testpending, $CLIENT{'clid'},$id); if( ( $isGroupOwner ) && ( $groupId ne $prevGroup ) ) { $groupName = $groupNames{$groupId}; print "<TR>\n"; print "\t<TD colspan=5><HR WIDTH=\"100\%\"><font size=2><b>Course ID:</b> $groupId<br><b>Course Name:</b>$groupName</font></TD>\n"; print "</TR>\n"; } print "<TR>\n"; print "\t<TD valign=top><FONT SIZE=2><A HREF=\"javascript:parmsC003(document.rptform1,\'$id\')\;\">$href</A></FONT></td>\n"; print "\t<TD valign=top><FONT SIZE=2>$id</FONT></TD>\n"; print "\t<TD align=right valign=top><FONT SIZE=2>$testscompleted</FONT></TD>\n"; print "\t<TD align=right valign=top><FONT SIZE=2>$testsinprogress</FONT></TD>\n"; print "\t<TD align=right valign=top><FONT SIZE=2>$testspending</FONT></TD>\n"; print "</TR>\n"; $prevGroup = $groupId; } @sortedlist = (); print "</table>\n\n"; } sub print_report_C_004 { @trecs = &get_test_list($CLIENT{'clid'}); #tests in an array @tmptrecs = (); for (1 .. $#trecs) { ($id, $desc) = split(/&/, $trecs[$_]); #id=testid, descr=test description $trecs[$_] = join('&', "$desc", "$id"); #reverses the order for some reason push @tmptrecs, $trecs[$_]; } @trecs = sort @tmptrecs; for (0 .. $#trecs) { ($desc,$id) = split(/&/, $trecs[$_]); $testscompleted = CountTestFiles($testcomplete,$CLIENT{'clid'},$id); $testsinprogress = CountTestFiles($testinprog, $CLIENT{'clid'},$id); $testspending = CountTestFiles($testpending, $CLIENT{'clid'},$id); $href="javascript:parmsC004(document.rptform1,\'$id\')\;"; $tstoption =" <TR> <TD valign=top><FONT SIZE=2><a href=\"$href\">$id</a></FONT></TD> <TD valign=top><FONT SIZE=2>$desc</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testscompleted</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testsinprogress</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testspending</FONT></TD> </TR>\n"; $tstoptions = join('', $tstoptions, $tstoption); } print "<CENTER><B>$xlatphrase[919] $xlatphrase[800] $xlatphrase[923]</B><br> $finputs <TABLE cellpadding=1 cellspacing=1 border=0 width=\"100\%\"> <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> <TR> <TD valign=top><B><FONT SIZE=1>Test ID</FONT></B></TD> <TD valign=top><B><FONT SIZE=1>Description</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>Cmp</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>InP</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>Pnd</FONT></B></TD> </TR> <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> $tstoptions <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> </TABLE> "; } sub print_report_C_007 { @trecs = &get_test_list($CLIENT{'clid'}); @tmptrecs = (); for (1 .. $#trecs) { ($id, $desc) = split(/&/, $trecs[$_]); $trecs[$_] = join('&', "$desc", "$id"); push @tmptrecs, $trecs[$_]; } @trecs = sort @tmptrecs; for (0 .. $#trecs) { ($desc,$id) = split(/&/, $trecs[$_]); $testscompleted = CountTestFiles($testcomplete,$CLIENT{'clid'},$id); $testsinprogress = CountTestFiles($testinprog, $CLIENT{'clid'},$id); $testspending = CountTestFiles($testpending, $CLIENT{'clid'},$id); $href="javascript:parmsC004(document.rptform1,\'$id\')\;"; $tstoption =" <TR> <TD valign=top><FONT SIZE=2><a href=\"$href\">$id</a></FONT></TD> <TD valign=top><FONT SIZE=2>$desc</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testscompleted</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testsinprogress</FONT></TD> <TD align=right valign=top><FONT SIZE=2>$testspending</FONT></TD> </TR>\n"; $tstoptions = join('', $tstoptions, $tstoption); } print "<CENTER><B>Test Question Timing Statistics</B><br> $finputs <TABLE cellpadding=1 cellspacing=1 border=0 width=\"100\%\"> <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> <TR> <TD valign=top><B><FONT SIZE=1>Test ID</FONT></B></TD> <TD valign=top><B><FONT SIZE=1>Description</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>Cmp</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>InP</FONT></B></TD> <TD align=right valign=top><B><FONT SIZE=1>Pnd</FONT></B></TD> </TR> <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> $tstoptions <TR><TD colspan=5><HR WIDTH=\"100\%\"></TD></TR> </TABLE> "; } sub show_index { &log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Exec Report $FORM{'rptno'}"); &get_client_profile($SESSION{'clid'}); &print_report_header(); if ($REPORT{'rptid'} eq 'ACT-C-001') { &print_report_C_001(); } elsif ($REPORT{'rptid'} eq 'ACT-C-002') { if ($FORM{'frm'} eq '5') { &print_report_C_002O(); } else { &print_report_C_002I(); } } elsif ($REPORT{'rptid'} eq 'ACT-C-003') { &print_report_C_003(); } elsif ($REPORT{'rptid'} eq 'ACT-C-004') { &print_report_C_004(); } elsif ($REPORT{'rptid'} eq 'ACT-C-007') { &print_report_C_007(); } else { print "<CENTER>\n"; print "Nothing Selected or Report $FORM{rptno} is not yet available.\n"; print "Please select a report to view from the list.\n"; print "</CENTER>\n"; } &print_report_footer(); &log_entry($SESSION{'clid'}, $SESSION{'uid'}, "3", "Exec Report $FORM{'rptno'} completed"); } # ACT-C-001&Login Activity Report # ACT-C-005&Login Activity by User # ACT-C-002&Test Activity Report # ACT-C-003&Test Reports by Candidate # ACT-C-004&Test Statistics by Test # ACT-C-006&Test Report by User sub show_detail { my $sTitle; if ($REPORT{'rptid'} eq 'ACT-C-001') { $sTitle="$REPORT{'rptid'} - Log File $FORM{'dbfile'}"; &print_detail_header($sTitle); &print_detail_C_001(); } elsif ($REPORT{'rptid'} eq 'ACT-C-002') { $sTitle="$REPORT{'rptid'} - Test File $FORM{'dbfile'}"; &print_detail_header($sTitle); &print_detail_C_002(); } elsif ($REPORT{'rptid'} eq 'ACT-C-003') { $sTitle="$REPORT{'rptid'} - Test Results Summary"; &print_detail_header($sTitle); &print_detail_C_003(); } elsif ($REPORT{'rptid'} eq 'ACT-C-006') { $sTitle="$REPORT{'rptid'} - Test Results Summary"; &print_detail_header($sTitle); &print_detail_C_006(); } else { $sTitle="$REPORT{'rptid'}"; &print_detail_header($sTitle); print "Please Select a Report to View from the frame to the left.<BR>\n"; } &print_report_footer(); } sub print_detail_header { my ($sTitle) = @_; print "<HTML> <HEAD> <TITLE>$sTitle</TITLE> <SCRIPT language=\"JavaScript\"> <!-- function right(e) { if (navigator.appName == 'Netscape' && (e.which == 3 || e.which == 2)) { alert(\"This source and all graphics are proprietary and may not be viewed or copied.\"); return false; } else { if (navigator.appName == 'Microsoft Internet Explorer' && (event.button == 2 || event.button == 3)) { alert(\"This source and all graphics are proprietary and may not be viewed or copied.\"); 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'}\"> \n"; } sub print_detail_C_001 { &log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Exec Log Report $FORM{'dbfile'}"); print "<H4>$REPORT{'rptid'} - $REPORT{'rptdesc'}</H4><BR>\n"; if ($FORM{'filter'}!='') { print "<B>Session $FORM{'filter'}</B><BR>\n"; @lines = &get_log("sess.$FORM{'filter'}"); foreach $line (@lines) { chomp ($line); print "$line<BR>\n"; } print "<HR WIDTH=\"100\%\">\n"; } @lines = &get_log($FORM{'dbfile'}); foreach $line (@lines) { chomp ($line); if ($FORM{'filter'}!='') { if ($line =~ /,$FORM{'filter'},/ ) { print "$line<BR>\n"; } } else { print "$line<BR>\n"; } } &log_entry($SESSION{'clid'}, $SESSION{'uid'}, "2", "Exec Log Report $FORM{'dbfile'} completed"); } sub print_detail_C_002 { $msg = ""; @locations = ( $testpending, $testinprog, $testcomplete); $trash = join($pathsep, $locations[$FORM{'location'}], $FORM{'dbfile'}); open (TESTFILE, "<$trash") or $msg="failed"; if ($msg eq 'failed') { print "Unable to open file."; } else { @lines = <TESTFILE>; close TESTFILE; if ($trash =~ /$testinprog/ ) { print "<A HREF=\"\#terminate\">TERMINATE THIS TEST</A><BR>\n"; } foreach $line (@lines) { chomp ($line); print "$line<BR>\n"; } if ($trash =~ /$testinprog/ ) { print "<FORM METHOD=POST ACTION=\"$cgiroot/testterm.pl\">\n"; print "<INPUT TYPE=HIDDEN NAME=\"tid\" VALUE=\"$SESSION{'tid'}\">\n"; print "<INPUT TYPE=HIDDEN NAME=\"dbfile\" VALUE=\"$FORM{'dbfile'}\">\n"; print "<A NAME=\"terminate\">Reason for Terminating The Test:</A><BR>\n"; print "<TEXTAREA NAME=\"reason\" ROWS=\"4\" COLS=\"40\"></TEXTAREA><BR>\n"; print "<INPUT TYPE=SUBMIT VALUE=\"Terminate Test\">\n"; print "</FORM>\n"; } } } sub print_detail_C_003 { &get_client_profile($SESSION{'clid'}); my @testList = &GetTestsByOwner( $CLIENT{'clid'}, $SESSION{'uid' } ); my @testFields = &GetTestHeader( $CLIENT{'clid'} ); my $searchStr = ""; my $currHash; my @found=(); &get_candidate_profile( $SESSION{'clid'}, $SESSION{'uid'} ); if( $CANDIDATE{'grpowner'} eq 'Y' ) { foreach $test ( @testList ) { #print "$test<p>\n"; chop( $test ); @currField = split( '&', $test ); for( 0 .. $#testFields ) { $currHash{$testFields[$_]} = $currField[$_]; } $searchStr = "$searchStr|$currHash{'id'}"; } $searchStr = substr( $searchStr, 1 ); } &get_candidate_profile( $SESSION{'clid'}, $FORM{'cndid'}); print "<CENTER><B>Test Results Summary</B><BR>\n"; print "<TABLE cellpadding=\"0\" cellspacing=\"0\" border=0 width=\"100%\">\n"; print "<TR>\n"; print "<TD>\n"; print "$CANDIDATE{'sal'} $CANDIDATE{'nmf'} $CANDIDATE{'nmm'} $CANDIDATE{'nml'}<BR>\n"; print "$CANDIDATE{'adr'}<BR>\n"; print "$CANDIDATE{'cty'}, $CANDIDATE{'ste'} $CANDIDATE{'pst'}<BR>\n"; print "$CANDIDATE{'ctry'}<BR>\n"; print "<\TD>\n"; print "<TD>\n"; print "$CANDIDATE{'eml'}<BR>\n"; print "$CANDIDATE{'cnd1'}<BR>\n"; print "$CANDIDATE{'cnd2'}<BR>\n"; print "$CANDIDATE{'cnd3'}<BR>\n"; print "$CANDIDATE{'cnd4'}<BR>\n"; print "<\TD>\n"; print "<\TR>\n"; print "</TABLE>\n"; print "<TABLE cellpadding=\"3\" cellspacing=\"2\" border=0 width = 100\%>\n"; print "<TR>\n"; print "<TD colspan=7><HR WIDTH=\"100%\"></TD>\n"; print "<\TR>\n"; print "<TR>\n"; print "<TD><B>Date</B></TD>\n"; print "<TD><B>Status</B></TD>\n"; print "<TD><B>Time Stats</B></TD>\n"; print "<TD><B>Test Description</B></TD>\n"; print "<TD align=center NOWRAP><B>$xlatphrase[137]</B></TD>\n"; print "<TD align=center NOWRAP><B>Incorrect</B></TD>\n"; print "<TD align=center NOWRAP><B>Score</B></TD>\n"; print "<\TR>\n"; print "<TR>\n"; print "<TD colspan=7><HR WIDTH=\"100%\"></TD>\n"; print "<\TR>\n"; @tstoptions = (); opendir (GDIR, $testinprog); @rdots = readdir(GDIR); closedir GDIR; #ADT v limit groupowner viewing of testids, copied code section from 106 $replaceStr = "$CLIENT{'clid'}.$CANDIDATE{'uid'}."; $myRmMask = "$CLIENT{'clid'}.$CANDIDATE{'uid'}.($searchStr)"; $rrmmask = $myRmMask; @found = grep(/^$rrmmask/i, @rdots); @rdots = sort @found; @found=(); foreach $rmfile (@rdots) { if ($rmfile =~ /$rrmmask/i ) { #print "<font color=\"#ff0000\">$rmfile - $rrmmask</font><br>\n"; $trash = join($pathsep, $testinprog, $rmfile); open (TMPFILE, "<$trash"); $mtime = (stat(TMPFILE))[9]; close TMPFILE; $completedat = &format_date_time("yyyy-mm-dd hh:nn", "2", "-10000", $mtime); $tstid = $rmfile; $tstid =~ s/$replaceStr//g; #ADT ^ #$trash = join($pathsep, $testcomplete, "$CLIENT{'clid'}.$CANDIDATE{'uid'}.$tstid.tim"); #$timestats = "<a href=\"$cgiroot/creports007.pl?tid=$SESSION{'tid'}&clid=$CLIENT{'clid'}&cndid=$CANDIDATE{'uid'}&tstid=$tstid&frm=4\" TARGET=\"testreport\">Times</a>"; #open (TMPFILE, "<$trash") or $timestats=""; #close TMPFILE; &get_test_sequence( $CLIENT{'clid'}, $CANDIDATE{'uid'}, $tstid, $testinprog); $state = $TEST_SESSION{'state'}; ($tstate, $tseq, $tqst) = split(/\./, $state); &get_test_profile($CLIENT{'clid'}, $TEST{'id'}); $tstoption = "<TR> <TD valign=top NOWRAP>$completedat</TD> <TD valign=top>$TEST_STATE_DESCRIPTION{$tstate}<BR>Segment:$TEST_SEGMENT_DESCRIPTION{$tseq}<BR>Question:$tqst</TD> <TD valign=top NOWRAP>$timestats</TD> <TD valign=top NOWRAP>$TEST{'desc'}</TD> <TD valign=top align=center></TD> <TD valign=top align=center></TD> <TD valign=top align=center></TD> <\TR>\n"; push @tstoptions, $tstoption; } } opendir (GDIR, $testpending); @rdots = readdir(GDIR); closedir GDIR; #ADT v groupowner filter #$rrmmask = "$CLIENT{'clid'}.$CANDIDATE{'uid'}."; $replaceStr = "$CLIENT{'clid'}.$CANDIDATE{'uid'}."; $rrmmask = $myRmMask; @found = grep(/^$rrmmask/i, @rdots); @rdots = sort @found; @found=(); foreach $rmfile (@rdots) { if ($rmfile =~ /$rrmmask/i ) { #print "<font color=\"#ff0000\">$rmfile - $rrmmask</font><br>\n"; $trash = join($pathsep, $testpending, $rmfile); #print "$trash<p>\n"; open (TMPFILE, "<$trash"); $mtime = (stat(TMPFILE))[9]; close TMPFILE; $completedat = &format_date_time("yyyy-mm-dd hh:nn", "2", "-10000", $mtime); $tstid = $rmfile; $tstid =~ s/$replaceStr//g; #ADT ^ #wac merge ^ (selected lines, since rrmfile wasn't part of original code) &get_test_sequence( $CLIENT{'clid'}, $CANDIDATE{'uid'}, $tstid, $testpending); &get_test_profile($CLIENT{'clid'}, $TEST{'id'}); $tstoption = "<TR> <TD valign=top NOWRAP>$completedat</TD> <TD valign=top>$TEST_STATE_DESCRIPTION{0}</TD> <TD valign=top NOWRAP></TD> <TD valign=top NOWRAP>$TEST{'desc'}</TD> <TD colspan=3 valign=top align=left> Print\ \; <A HREF=\"$cgiroot/tmaster.pl?tid=$SESSION{'tid'}&clid=$CLIENT{'clid'}&cndid=$CANDIDATE{'uid'}&tstid=$TEST{'id'}\" TARGET=\"prtwindow\">Master/Key</A> </TD> <\TR>\n"; push @tstoptions, $tstoption; } } opendir (GDIR, $testcomplete); @rdots = readdir(GDIR); closedir GDIR; #ADT v groupowner filter #$rrmmask = "$CLIENT{'clid'}.$CANDIDATE{'uid'}."; $replaceStr = "$CLIENT{'clid'}.$CANDIDATE{'uid'}."; $rrmmask = $myRmMask; @found = grep(/^$rrmmask/i, @rdots); @rdots = sort @found; @found=(); foreach $rmfile (@rdots) { if ($rmfile =~ /$rrmmask/i ) { #print "<font color=\"#ff0000\">$rmfile - $rrmmask</font><br>\n"; $trash = join($pathsep, $testcomplete, $rmfile); open (TMPFILE, "<$trash"); $mtime = (stat(TMPFILE))[9]; close TMPFILE; $completedat = &format_date_time("yyyy-mm-dd hh:nn", "2", "-10000", $mtime); $tstid = $rmfile; ##### @mysegs=split(/\./, $rmfile); $mysegcnt = $#mysegs; @myclidsegs=split(/\./, $CLIENT{'clid'}); $myclidsegcnt=$#myclidsegs+1; @myclidsegs=(); $myclid=$mysegs[0]; $mytstid=$mysegs[$mysegcnt]; $mysegcnt--; $mycndid=""; $mysegjoint=""; for ($myclidsegcnt .. $mysegcnt) { $mycndid=join($mysegjoint,$mycndid,$mysegs[$_]); $mysegjoint="."; } $CANDIDATE{'uid'}=$mycndid; $tstid=$mytstid; #ADT ^ #$trash = join($pathsep, $testcomplete, "$CLIENT{'clid'}.$CANDIDATE{'uid'}.$tstid.tim"); #$timestats = "<a href=\"$cgiroot/creports007.pl?tid=$SESSION{'tid'}&clid=$CLIENT{'clid'}&cndid=$CANDIDATE{'uid'}&tstid=$tstid&frm=4\" TARGET=\"testreport\">Times</a>"; #open (TMPFILE, "<$trash") or $timestats=""; #close TMPFILE; #wac ^ merge selected lines. &get_test_sequence( $CLIENT{'clid'}, $CANDIDATE{'uid'}, $tstid, $testcomplete); ($correctans, $incorrectans, $score, $trash) = split(/&/, $SUBTEST_SUMMARY{2}); $state = $TEST_SESSION{'state'}; ($tstate, $tseq, $tqst) = split(/\./, $state); &get_test_profile($CLIENT{'clid'}, $TEST{'id'}); $tstoption = "<TR> <TD valign=top NOWRAP>$completedat</TD> <TD valign=top>$TEST_STATE_DESCRIPTION{$tstate}</TD> <TD valign=top NOWRAP>$timestats</TD> <TD valign=top NOWRAP><a href=\"$cgiroot/testreport.pl?tid=$SESSION{'tid'}&clid=$CLIENT{'clid'}&cndid=$CANDIDATE{'uid'}&tstid=$tstid\" TARGET=\"testreport\">$TEST{'desc'}</a></TD> <TD valign=top align=center>$correctans</TD> <TD valign=top align=center>$incorrectans</TD> <TD valign=top align=center>$score\%</TD> <\TR>\n"; push @tstoptions, $tstoption; } } @sorted = sort @tstoptions; @tstoptions = (); for (0 .. $#sorted) { print $sorted[$_]; } @sorted = (); print "</TABLE>\n"; } sub print_detail_C_006 { &get_client_profile($SESSION{'clid'}); &get_candidate_profile( $SESSION{'clid'}, $FORM{'cndid'}); print "<CENTER><B>Test Results Summary</B><BR>\n"; print "<TABLE cellpadding=\"0\" cellspacing=\"0\" border=0 width=\"100%\">\n"; print "<TR>\n"; print "<TD>\n"; print "$CANDIDATE{'sal'} $CANDIDATE{'nmf'} $CANDIDATE{'nmm'} $CANDIDATE{'nml'}<BR>\n"; print "$CANDIDATE{'adr'}<BR>\n"; print "$CANDIDATE{'cty'}, $CANDIDATE{'ste'} $CANDIDATE{'pst'}<BR>\n"; print "$CANDIDATE{'ctry'}<BR>\n"; print "<\TD>\n"; print "<TD>\n"; print "$CANDIDATE{'eml'}<BR>\n"; print "$CANDIDATE{'cnd1'}<BR>\n"; print "$CANDIDATE{'cnd2'}<BR>\n"; print "$CANDIDATE{'cnd3'}<BR>\n"; print "$CANDIDATE{'cnd4'}<BR>\n"; print "<\TD>\n"; print "<\TR>\n"; print "</TABLE>\n"; print "<TABLE cellpadding=\"3\" cellspacing=\"2\" border=0 width = 100\%>\n"; print "<TR>\n"; print "<TD colspan=6><HR WIDTH=\"100%\"></TD>\n"; print "<\TR>\n"; print "<TR>\n"; print "<TD><B>Date</B></TD>\n"; print "<TD><B>Status Information</B></TD>\n"; print "<TD><B>Test Description</B></TD>\n"; print "<TD align=center NOWRAP><B>$xlatphrase[137]</B></TD>\n"; print "<TD align=center NOWRAP><B>Incorrect</B></TD>\n"; print "<TD align=center NOWRAP><B>Score</B></TD>\n"; print "<\TR>\n"; print "<TR>\n"; print "<TD colspan=6><HR WIDTH=\"100%\"></TD>\n"; print "<\TR>\n"; @tstoptions = (); opendir (GDIR, $testcomplete); @rdots = readdir(GDIR); closedir GDIR; $rrmmask = "$CLIENT{'clid'}.$CANDIDATE{'uid'}."; foreach $rrmfile (@rdots) { if ($rrmfile =~ /$rrmmask/ ) { $trash = join($pathsep, $testcomplete, $rrmfile); open (TMPFILE, "<$trash"); $mtime = (stat(TMPFILE))[9]; close TMPFILE; $completedat = &format_date_time("yyyy-mm-dd hh:nn", "2", "-10000", $mtime); $tstid = $rrmfile; $tstid =~ s/$rrmmask//g; &get_test_sequence( $CLIENT{'clid'}, $CANDIDATE{'uid'}, $tstid, $testcomplete); ($correctans, $incorrectans, $score, $trash) = split(/&/, $SUBTEST_SUMMARY{2}); $state = $TEST_SESSION{'state'}; ($tstate, $tseq, $tqst) = split(/\./, $state); &get_test_profile($CLIENT{'clid'}, $TEST{'id'}); $tstoption = "<TR> <TD valign=top NOWRAP>$completedat</TD> <TD valign=top>$TEST_STATE_DESCRIPTION{$tstate}</TD> <TD valign=top NOWRAP><a href=\"$cgiroot/testreport.pl?tid=$SESSION{'tid'}&clid=$CLIENT{'clid'}&cndid=$CANDIDATE{'uid'}&tstid=$tstid\" TARGET=\"rptdetail\">$TEST{'desc'}</a></TD> <TD valign=top align=center>$correctans</TD> <TD valign=top align=center>$incorrectans</TD> <TD valign=top align=center>$score\%</TD> <\TR>\n"; push @tstoptions, $tstoption; } } @sorted = sort @tstoptions; @tstoptions = (); for (0 .. $#sorted) { print $sorted[$_]; } @sorted = (); print "</TABLE>\n"; } ################################################################################ # # Subroutine Name # GetTestHeader # # Description # This subroutine returns the header of the test file # # Inputs # $clientId -- The id of the client to search through # # Outputs # None # # Returns # @testFields -- An array of fields in the header # #adt080401############################################################################### sub GetTestHeader { my $clientId = $_[0]; my @testList = &get_data("tests.$clientId"); my $testHdr = $testList[0]; my $testFields; chop( $testHdr ); @testFields = split( /&/, $testHdr ); return @testFields; } #adt080401############################################################################### # # Subroutine Name # GetTestsByOwner # # Description # This subroutine searches through the test definition file of the given # client for all the tests that are owned by the given user id or are public # # Inputs # $clientId -- The id of the client to search through # $ownedBy -- The name of the owner of the test to search for # # Outputs # None # # Returns # @tests -- An array of tests owned by the given user id # ################################################################################ sub GetTestsByOwner { my $clientId = $_[0]; my $ownedBy = $_[1]; my %currHash; my @testList = &get_data("tests.$clientId"); my @currField; my @tests; my $testHdr = $testList[0]; my $testFields; my $testCntr; @testFields = &GetTestHeader( $clientId ); for( $testCntr = 1; $testCntr < $#testList; $testCntr++ ) { #print "<b>$testList[$testCntr]</b><br>\n"; chop( $testList[$testCntr] ); @currField = split( '&', $testList[$testCntr] ); for( 0 .. $#testFields ) { $currHash{$testFields[$_]} = $currField[$_]; } #print "$currHash{'ownedby'} - $ownedBy<p>"; if( ( $currHash{'ownedby'} eq $ownedBy ) || ( $currHash{'ownedby'} eq "" ) ) { push( @tests, $testList[$testCntr] ); #print "<font color=\"#ff0000\"><b>$testList[$testCntr]</b></font><br>\n"; } } return @tests; }