You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
492 lines
15 KiB
492 lines
15 KiB
#!/usr/bin/perl
|
|
#
|
|
# $Id: sadmin.pl,v 1.12 2006/11/28 21:07:48 psims Exp $
|
|
#
|
|
# Source File: sadmin.pl
|
|
|
|
#use strict;
|
|
use warnings;
|
|
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
|
|
|
|
#warningsToBrowser(1);
|
|
#fatalsToBrowser(1);
|
|
|
|
# Get config
|
|
|
|
require 'sitecfg.pl';
|
|
require 'testlib.pl';
|
|
|
|
&app_initialize;
|
|
|
|
print "Content-Type: text/html\n\n";
|
|
|
|
#print $logroot;
|
|
my $tid = $FORM{'tid'};
|
|
|
|
if (&get_session($tid)) {
|
|
&LanguageSupportInit();
|
|
unless ($SESSION{'clid'}) {
|
|
warn "ERROR: Empty Client ID in Session data for Session ID $FORM{'tid'} " ;
|
|
#&show_illegal_access_warning("user");
|
|
exit();
|
|
}
|
|
if ($SESSION{'clid'} ne 'std') {
|
|
&get_client_profile($SESSION{'clid'});
|
|
unless (%CLIENT) {
|
|
warn "ERROR: Invalid Client ID $SESSION{'clid'} in Session ID $FORM{'tid'} " ;
|
|
#&show_illegal_access_warning("user");
|
|
exit();
|
|
}
|
|
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'});
|
|
unless (%CANDIDATE) {
|
|
warn "ERROR: Invalid Candidate ID $SESSION{'uid'} for Client $SESSION{'clid'} in Session ID $FORM{'tid'} " ;
|
|
#&show_illegal_access_warning("user");
|
|
exit();
|
|
}
|
|
$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]\ \;
|
|
</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]\ \;
|
|
</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:\ \;</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:\ \;</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("else1");
|
|
}
|
|
} else {
|
|
&logger::logerr("Unable to get session with &get_session($FORM{'tid'})");
|
|
&show_illegal_access_warning("else2");
|
|
}
|
|
|
|
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 "<DIV>HERE</DIV></BODY>\n</HTML>\n";
|
|
}
|
|
|