| … | |
… | |
| 42 | "user=".$user->id.",problem=".$courseEnv->{courseName}."/".$set->id."/".$problem->id.",mode=".$translationOptions->{displayMode}, |
42 | "user=".$user->id.",problem=".$courseEnv->{courseName}."/".$set->id."/".$problem->id.",mode=".$translationOptions->{displayMode}, |
| 43 | "begin"); |
43 | "begin"); |
| 44 | |
44 | |
| 45 | # install a local warn handler to collect warnings |
45 | # install a local warn handler to collect warnings |
| 46 | my $warnings = ""; |
46 | my $warnings = ""; |
| 47 | if ($courseEnv->{pg}->{options}->{catchWarnings}) { |
|
|
| 48 | warn "PG: about to install a warnings handler...\n"; # *** |
|
|
| 49 | local $SIG{__WARN__} = sub { $warnings .= shift }; |
47 | local $SIG{__WARN__} = sub { $warnings .= shift } |
| 50 | } |
48 | if $courseEnv->{pg}->{options}->{catchWarnings}; |
| 51 | |
49 | |
| 52 | # create a Translator |
50 | # create a Translator |
| 53 | #warn "PG: creating a Translator\n"; |
51 | #warn "PG: creating a Translator\n"; |
| 54 | my $translator = WeBWorK::PG::Translator->new; |
52 | my $translator = WeBWorK::PG::Translator->new; |
| 55 | |
53 | |
| … | |
… | |
| 140 | |
138 | |
| 141 | # install a safety filter (&safetyFilter) |
139 | # install a safety filter (&safetyFilter) |
| 142 | #warn "PG: installing a safety filter\n"; |
140 | #warn "PG: installing a safety filter\n"; |
| 143 | $translator->rf_safety_filter(\&safetyFilter); |
141 | $translator->rf_safety_filter(\&safetyFilter); |
| 144 | |
142 | |
|
|
143 | # write timing log entry -- the translator is now all set up |
|
|
144 | writeTimingLogEntry($courseEnv, "WeBWorK::PG::new", |
|
|
145 | "initialized", |
|
|
146 | "intermediate"); |
|
|
147 | |
| 145 | # translate the PG source into text |
148 | # translate the PG source into text |
| 146 | #warn "PG: translating the PG source into text\n"; |
149 | #warn "PG: translating the PG source into text\n"; |
| 147 | $translator->translate(); |
150 | $translator->translate(); |
| 148 | |
151 | |
| 149 | # after we're done translating, we may have to clean up after the translator. |
152 | # after we're done translating, we may have to clean up after the translator. |
| … | |
… | |
| 251 | $envir{probFileName} = $envir{fileName}; |
254 | $envir{probFileName} = $envir{fileName}; |
| 252 | $envir{problemSeed} = $problem->problem_seed; |
255 | $envir{problemSeed} = $problem->problem_seed; |
| 253 | $envir{displayMode} = translateDisplayModeNames($options->{displayMode}); |
256 | $envir{displayMode} = translateDisplayModeNames($options->{displayMode}); |
| 254 | $envir{languageMode} = $envir{displayMode}; |
257 | $envir{languageMode} = $envir{displayMode}; |
| 255 | $envir{outputMode} = $envir{displayMode}; |
258 | $envir{outputMode} = $envir{displayMode}; |
| 256 | $envir{displayHintsQ} = $options->{hints}; |
259 | $envir{displayHintsQ} = $options->{showHints}; |
| 257 | $envir{displaySolutionsQ} = $options->{solutions}; |
260 | $envir{displaySolutionsQ} = $options->{showSolutions}; |
| 258 | $envir{refreshMath2img} = $options->{refreshMath2img}; |
261 | $envir{refreshMath2img} = $options->{refreshMath2img}; |
| 259 | $envir{texDisposition} = "pdf"; # in webwork-modperl, we use pdflatex |
262 | $envir{texDisposition} = "pdf"; # in webwork-modperl, we use pdflatex |
| 260 | |
263 | |
| 261 | # Problem Information |
264 | # Problem Information |
| 262 | # ADDED: courseName |
265 | # ADDED: courseName |
| … | |
… | |
| 318 | $envir{webworkDocsURL} = $courseEnv->{webworkURLs}->{docs}."/"; |
321 | $envir{webworkDocsURL} = $courseEnv->{webworkURLs}->{docs}."/"; |
| 319 | $envir{dvipngTempDir} = $options->{displayMode} eq 'images' |
322 | $envir{dvipngTempDir} = $options->{displayMode} eq 'images' |
| 320 | ? tempdir("webwork-dvipng-XXXXXXXX", DIR => $envir{tempDirectory}) |
323 | ? tempdir("webwork-dvipng-XXXXXXXX", DIR => $envir{tempDirectory}) |
| 321 | : undef; |
324 | : undef; |
| 322 | |
325 | |
|
|
326 | # Information for sending mail |
|
|
327 | |
|
|
328 | $envir{mailSmtpServer} = $courseEnv->{mail}->{smtpServer}; |
|
|
329 | $envir{mailSmtpSender} = $courseEnv->{mail}->{smtpSender}; |
|
|
330 | |
| 323 | # Default values for evaluating answers |
331 | # Default values for evaluating answers |
| 324 | |
332 | |
| 325 | my $ansEvalDefaults = $courseEnv->{pg}->{ansEvalDefaults}; |
333 | my $ansEvalDefaults = $courseEnv->{pg}->{ansEvalDefaults}; |
| 326 | $envir{$_} = $ansEvalDefaults->{$_} foreach (keys %$ansEvalDefaults); |
334 | $envir{$_} = $ansEvalDefaults->{$_} foreach (keys %$ansEvalDefaults); |
| 327 | |
335 | |
| … | |
… | |
| 354 | $errorno = 0; ## don't report blank answer as error |
362 | $errorno = 0; ## don't report blank answer as error |
| 355 | return ($answer,$errorno); |
363 | return ($answer,$errorno); |
| 356 | } |
364 | } |
| 357 | # replace ^ with ** (for exponentiation) |
365 | # replace ^ with ** (for exponentiation) |
| 358 | # $answer =~ s/\^/**/g; |
366 | # $answer =~ s/\^/**/g; |
| 359 | # Return if forbidden characters are found |
367 | # Return if forbidden characters are found |
| 360 | unless ($answer =~ /^[a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)]+$/ ) { |
368 | unless ($answer =~ /^[a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)]+$/ ) { |
| 361 | $answer =~ tr/a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)/#/c; |
369 | $answer =~ tr/a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)/#/c; |
| 362 | $errorno = "<BR>There are forbidden characters in your answer: $submittedAnswer<BR>"; |
370 | $errorno = "<BR>There are forbidden characters in your answer: $submittedAnswer<BR>"; |
| 363 | return ($answer,$errorno); |
371 | return ($answer,$errorno); |
| 364 | } |
372 | } |