#!/usr/bin/perl use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); use strict; use warnings; use vars qw($fullname $anslength @allselections $file $fname $lname $time $reviewtime $idinput $id $courselocation $useripaddress $questionno @log $clocktime $log $type $value @answers $buttonname %selections @options); my @allquestions; my @allanswers; my @explain; print header; # ********************************* DEFINE VARIABLES $time = param('time'); $reviewtime = param('reviewtime'); $file = param('file'); $idinput = param('idinput'); $fullname = param('fullname'); $fname = param('fname'); $lname = param('lname'); $courselocation = substr($file, 0, 6); $useripaddress = $ENV{REMOTE_ADDR}; $questionno = 0; print ""; print "Exam"; print ""; print qq//; makeexam(); # ******************* START SUBROUTINE MAKEEXAM sub makeexam() { local $/ = "~\n"; # ** CHANGES INPUT RECORD SEPARATOR TO ~line break # ************************** THIS SECTION CREATES THE HTML FOR THE EXAM. chop($fname); $fname = lc($fname); $lname = lc($lname); $fname = ucfirst($fname); $lname = ucfirst($lname); # ********************************** RECORD ACCESS TO THE EXAM $clocktime = localtime; @log = split(/\//, $file); @log = split(/\./, $log[1]); $log = $log[0]; $log = $log.".log"; open ACCESS, ">>$log" || die "Cannot open $log: $!"; print ACCESS $idinput . " " . $lname . " " . $fname . " " . $clocktime . " " . $useripaddress . " " . $time . "\n"; close(ACCESS); # ********************************** END SCRIPT TO RECORD ACCESS TO THE EXAM print "

Hello $fullname!

"; print start_form (-name=>'makequiz', -method=>'POST', -action=>"http://ist221.nsm.tridenttech.edu/perl/gradequiz.cgi"); chdir("/perl/web"); open FILE, "$file" || die "Cannot open $file: $!"; while () { # ** READS EACH LINE OF TEXT FROM FILE chomp; # ** BY DEFAULT, CHOMPS OFF $/ FROM EACH LINE ($type, $value) = split (/:#\s*/, $_); # ***** SPLITS EACH LINE BY TYPE AND CONTENT if ($type =~ m/i/i) { # ** CHECKS FOR IMAGE print ""; print "

"; }elsif ($type =~ m/q/i) { # ** CHECKS FOR QUESTION LINE & PRINTS QUESTION $questionno++; print "$questionno. $value
"; push(@allquestions, $value); }elsif ($type =~ m/a/i) { # ** CHECKS FOR ANSWER LINE @answers = split (/`\s*/, $value); $anslength = @answers; # ** LENGTH OF @ANSWERS push(@allanswers, $value); }elsif ($type =~ m/s/i) { # ** CHECKS FOR SELECTION LINE $buttonname = $type . $questionno; push(@allselections, $value); %selections = split (/`\s*/, $value); @options = keys (%selections); if ($anslength > 1) { # ** DETERMINES TO USE RADIO OR CHECKBOX print "
"; print checkbox_group(-name=>$buttonname, -values=>\@options, -linebreak=>'true', -labels=>\%selections); }else { print "
"; print radio_group(-name=>$buttonname, -values=>\@options, -linebreak=>'true', -labels=>\%selections, -default=>'-'); } print "



"; }elsif ($type =~ m/e/i) {# ** CHECKS FOR EXPLAINATION LINE push (@explain, $questionno, $value); } # END ELSIF STATEMENTS } # ** END WHILE STATEMENT close (FILE); print "
"; # ** THIS SECTION SENDS THREE ARRAYS TO THE GRADEQUIZ.CGI print hidden(-name=>"answers", -default=>\@allanswers); print hidden(-name=>"questions", -default=>\@allquestions); print hidden(-name=>"selections", -default=>\@allselections); print hidden(-name=>"explain", -default=>\@explain); print hidden(-name=>'fname', -value=>$fname); print hidden(-name=>'lname', -value=>$lname); print hidden(-name=>'reviewtime', -value=>$reviewtime); print hidden(-name=>'file', -value=>$file); print hidden(-name=>'id', -value=>$idinput); print submit (-value=>'Grade'); print "
"; print end_form; } print "The last element in the questions array is $#allquestions

"; # ************************* END SUBROUTINE MAKEEXAM print end_html;