--- 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