--- trunk/webwork2/lib/WeBWorK/PG.pm 2002/11/01 22:57:25 620
+++ trunk/webwork2/lib/WeBWorK/PG.pm 2003/05/28 03:31:28 927
@@ -15,10 +15,7 @@
use warnings;
use File::Path qw(rmtree);
use File::Temp qw(tempdir);
-use WeBWorK::DB::Classlist;
-use WeBWorK::DB::WW;
use WeBWorK::PG::Translator;
-use WeBWorK::Problem;
use WeBWorK::Utils qw(readFile formatDateTime writeTimingLogEntry);
sub new($$$$$$$$) {
@@ -39,14 +36,13 @@
# write timing log entry
writeTimingLogEntry($courseEnv, "WeBWorK::PG::new",
- "user=".$user->id.",problem=".$courseEnv->{courseName}."/".$set->id."/".$problem->id.",mode=".$translationOptions->{displayMode},
+ "user=".$user->user_id.",problem=".$courseEnv->{courseName}."/".$set->set_id."/".$problem->problem_id.",mode=".$translationOptions->{displayMode},
"begin");
# install a local warn handler to collect warnings
my $warnings = "";
- if ($courseEnv->{pg}->{options}->{catchWarnings}) {
- local $SIG{__WARN__} = sub { $warnings .= shift };
- }
+ local $SIG{__WARN__} = sub { $warnings .= shift }
+ if $courseEnv->{pg}->{options}->{catchWarnings};
# create a Translator
#warn "PG: creating a Translator\n";
@@ -99,15 +95,6 @@
my $err = $translator->unrestricted_load($macroPath);
warn "Error while loading $macroPath: $err" if $err;
}
- #my $pg_pl = $courseEnv->{webworkDirs}->{macros} . "/PG.pl";
- #my $dangerousMacros_pl = $courseEnv->{webworkDirs}->{macros} . "/dangerousMacros.pl";
- #my $io_pl = $courseEnv->{webworkDirs}->{macros} . "/IO.pl";
- #my $err = $translator->unrestricted_load($pg_pl);
- #warn "Error while loading $pg_pl: $err" if $err;
- #$err = $translator->unrestricted_load($dangerousMacros_pl);
- #warn "Error while loading $dangerousMacros_pl: $err" if $err;
- #$err = $translator->unrestricted_load($io_pl);
- #warn "Error while loading $io_pl: $err" if $err;
# set the opcode mask (using default values)
#warn "PG: setting the opcode mask (using default values)\n";
@@ -115,7 +102,9 @@
# store the problem source
#warn "PG: storing the problem source\n";
- my $sourceFile = $problem->source_file;
+ my $sourceFile = ( defined($translationOptions->{override_problem_source}) ) ?
+ $translationOptions->{override_problem_source} :
+ $problem->source_file;
$sourceFile = $courseEnv->{courseDirs}->{templates}."/".$sourceFile
unless ($sourceFile =~ /^\//);
eval { $translator->source_string(readFile($sourceFile)) };
@@ -141,6 +130,11 @@
#warn "PG: installing a safety filter\n";
$translator->rf_safety_filter(\&safetyFilter);
+ # write timing log entry -- the translator is now all set up
+ writeTimingLogEntry($courseEnv, "WeBWorK::PG::new",
+ "initialized",
+ "intermediate");
+
# translate the PG source into text
#warn "PG: translating the PG source into text\n";
$translator->translate();
@@ -244,26 +238,27 @@
$envir{psvn} = $psvn;
$envir{psvnNumber} = $envir{psvn};
- $envir{probNum} = $problem->id;
+ $envir{probNum} = $problem->problem_id;
$envir{questionNumber} = $envir{probNum};
$envir{fileName} = $problem->source_file;
$envir{probFileName} = $envir{fileName};
- $envir{problemSeed} = $problem->problem_seed;
+ $envir{problemSeed} = (defined($options->{override_seed}) ) ? $options->{override_seed} :$problem->problem_seed;
$envir{displayMode} = translateDisplayModeNames($options->{displayMode});
$envir{languageMode} = $envir{displayMode};
$envir{outputMode} = $envir{displayMode};
- $envir{displayHintsQ} = $options->{hints};
- $envir{displaySolutionsQ} = $options->{solutions};
+ $envir{displayHintsQ} = $options->{showHints};
+ $envir{displaySolutionsQ} = $options->{showSolutions};
$envir{refreshMath2img} = $options->{refreshMath2img};
$envir{texDisposition} = "pdf"; # in webwork-modperl, we use pdflatex
# Problem Information
- # ADDED: courseName
+ # ADDED: courseName, formatedDueDate
$envir{openDate} = $set->open_date;
$envir{formattedOpenDate} = formatDateTime($envir{openDate});
$envir{dueDate} = $set->due_date;
$envir{formattedDueDate} = formatDateTime($envir{dueDate});
+ $envir{formatedDueDate} = $envir{formattedDueDate}; # typo in many header files
$envir{answerDate} = $set->answer_date;
$envir{formattedAnswerDate} = formatDateTime($envir{answerDate});
$envir{numOfAttempts} = ($problem->num_correct || 0) + ($problem->num_incorrect || 0);
@@ -278,8 +273,8 @@
$envir{sectionNumber} = $envir{sectionName};
$envir{recitationName} = $user->recitation;
$envir{recitationNumber} = $envir{recitationName};
- $envir{setNumber} = $set->id;
- $envir{studentLogin} = $user->id;
+ $envir{setNumber} = $set->set_id;
+ $envir{studentLogin} = $user->user_id;
$envir{studentName} = $user->first_name . " " . $user->last_name;
$envir{studentID} = $user->student_id;
@@ -319,6 +314,12 @@
? tempdir("webwork-dvipng-XXXXXXXX", DIR => $envir{tempDirectory})
: undef;
+ # Information for sending mail
+
+ $envir{mailSmtpServer} = $courseEnv->{mail}->{smtpServer};
+ $envir{mailSmtpSender} = $courseEnv->{mail}->{smtpSender};
+ $envir{ALLOW_MAIL_TO} = $courseEnv->{mail}->{allowedRecipients};
+
# Default values for evaluating answers
my $ansEvalDefaults = $courseEnv->{pg}->{ansEvalDefaults};
@@ -355,7 +356,7 @@
}
# replace ^ with ** (for exponentiation)
# $answer =~ s/\^/**/g;
- # Return if forbidden characters are found
+ # Return if forbidden characters are found
unless ($answer =~ /^[a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)]+$/ ) {
$answer =~ tr/a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)/#/c;
$errorno = "
There are forbidden characters in your answer: $submittedAnswer
";
@@ -373,10 +374,10 @@
$pg = WeBWorK::PG->new(
$courseEnv, # a WeBWorK::CourseEnvironment object
- $user, # a WeBWorK::User object
+ $user, # a WeBWorK::DB::Record::User object
$sessionKey,
- $set, # a WeBWorK::Set object
- $problem, # a WeBWorK::Problem object
+ $set, # a WeBWorK::DB::Record::UserSet object
+ $problem, # a WeBWorK::DB::Record::UserProblem object
$psvn,
$formFields # in &WeBWorK::Form::Vars format
{ # translation options
@@ -438,9 +439,10 @@
=item PROBLEM
-a WeBWorK::Problem object. The contents of the source_file field can specify a
-PG file either by absolute path or path relative to the "templates" directory.
-I
+a WeBWorK::DB::Record::UserProblem object. The contents of the source_file
+field can specify a PG file either by absolute path or path relative to the
+"templates" directory. I
=item PSVN