| … | |
… | |
| 11 | |
11 | |
| 12 | =cut |
12 | =cut |
| 13 | |
13 | |
| 14 | use strict; |
14 | use strict; |
| 15 | use warnings; |
15 | use warnings; |
|
|
16 | use File::Temp qw(tempdir); |
| 16 | use WeBWorK::DB::Classlist; |
17 | use WeBWorK::DB::Classlist; |
| 17 | use WeBWorK::DB::WW; |
18 | use WeBWorK::DB::WW; |
| 18 | use WeBWorK::PG::Translator; |
19 | use WeBWorK::PG::Translator; |
| 19 | use WeBWorK::Problem; |
20 | use WeBWorK::Problem; |
| 20 | use WeBWorK::Utils qw(readFile formatDateTime); |
21 | use WeBWorK::Utils qw(readFile formatDateTime); |
| … | |
… | |
| 126 | # store the problem source |
127 | # store the problem source |
| 127 | warn "PG: storing the problem source\n"; |
128 | warn "PG: storing the problem source\n"; |
| 128 | my $sourceFile = $problem->source_file; |
129 | my $sourceFile = $problem->source_file; |
| 129 | $sourceFile = $courseEnv->{courseDirs}->{templates}."/".$sourceFile |
130 | $sourceFile = $courseEnv->{courseDirs}->{templates}."/".$sourceFile |
| 130 | unless ($sourceFile =~ /^\//); |
131 | unless ($sourceFile =~ /^\//); |
| 131 | $translator->source_string(readFile($sourceFile)); |
132 | eval { $translator->source_string(readFile($sourceFile)) }; |
|
|
133 | if ($@) { |
|
|
134 | # well, we couldn't get the problem source, for some reason. |
|
|
135 | return bless { |
|
|
136 | translator => $translator, |
|
|
137 | head_text => "", |
|
|
138 | body_text => <<EOF, |
|
|
139 | WeBWorK::Utils::readFile($sourceFile) says: |
|
|
140 | $@ |
|
|
141 | EOF |
|
|
142 | answers => {}, |
|
|
143 | result => {}, |
|
|
144 | state => {}, |
|
|
145 | errors => "Failed to read the problem source file.", |
|
|
146 | warnings => undef, |
|
|
147 | flags => {error_flag => 1}, |
|
|
148 | }, $class; |
|
|
149 | } |
| 132 | |
150 | |
| 133 | # install a safety filter (&safetyFilter) |
151 | # install a safety filter (&safetyFilter) |
| 134 | warn "PG: installing a safety filter\n"; |
152 | warn "PG: installing a safety filter\n"; |
| 135 | $translator->rf_safety_filter(\&safetyFilter); |
153 | $translator->rf_safety_filter(\&safetyFilter); |
| 136 | |
154 | |
| … | |
… | |
| 268 | # REMOVED: refSubmittedAnswers |
286 | # REMOVED: refSubmittedAnswers |
| 269 | |
287 | |
| 270 | $envir{inputs_ref} = $formFields; |
288 | $envir{inputs_ref} = $formFields; |
| 271 | |
289 | |
| 272 | # External Programs |
290 | # External Programs |
|
|
291 | # ADDED: externalLaTeXPath, externalDvipngPath, externalMath2imgPath |
| 273 | |
292 | |
| 274 | $envir{externalTTHPath} = $courseEnv->{externalPrograms}->{tth}; |
293 | $envir{externalTTHPath} = $courseEnv->{externalPrograms}->{tth}; |
|
|
294 | $envir{externalLaTeXPath} = $courseEnv->{externalPrograms}->{latex}; |
|
|
295 | $envir{externalDvipngPath} = $courseEnv->{externalPrograms}->{dvipng}; |
| 275 | $envir{externalMath2imgPath} = $courseEnv->{externalPrograms}->{math2img}; |
296 | $envir{externalMath2imgPath} = $courseEnv->{externalPrograms}->{math2img}; |
| 276 | |
297 | |
| 277 | # Directories and URLs |
298 | # Directories and URLs |
| 278 | # REMOVED: courseName |
299 | # REMOVED: courseName |
|
|
300 | # ADDED: dvipngTempDir |
|
|
301 | |
| 279 | |
302 | |
| 280 | $envir{cgiDirectory} = undef; |
303 | $envir{cgiDirectory} = undef; |
| 281 | $envir{cgiURL} = undef; |
304 | $envir{cgiURL} = undef; |
| 282 | $envir{classDirectory} = undef; |
305 | $envir{classDirectory} = undef; |
| 283 | $envir{courseScriptsDirectory} = $courseEnv->{webworkDirs}->{macros}."/"; |
306 | $envir{courseScriptsDirectory} = $courseEnv->{webworkDirs}->{macros}."/"; |
| … | |
… | |
| 287 | $envir{templateDirectory} = $courseEnv->{courseDirs}->{templates}."/"; |
310 | $envir{templateDirectory} = $courseEnv->{courseDirs}->{templates}."/"; |
| 288 | $envir{tempDirectory} = $courseEnv->{courseDirs}->{html_temp}."/"; |
311 | $envir{tempDirectory} = $courseEnv->{courseDirs}->{html_temp}."/"; |
| 289 | $envir{tempURL} = $courseEnv->{courseURLs}->{html_temp}; |
312 | $envir{tempURL} = $courseEnv->{courseURLs}->{html_temp}; |
| 290 | $envir{scriptDirectory} = undef; |
313 | $envir{scriptDirectory} = undef; |
| 291 | $envir{webworkDocsURL} = $courseEnv->{webworkURLs}->{docs}; |
314 | $envir{webworkDocsURL} = $courseEnv->{webworkURLs}->{docs}; |
|
|
315 | $envir{dvipngTempDir} = tempdir("webwork-dvipng-XXXXXXXX", TMPDIR => 1); |
| 292 | |
316 | |
| 293 | # Default values for evaluating answers |
317 | # Default values for evaluating answers |
| 294 | |
318 | |
| 295 | my $ansEvalDefaults = $courseEnv->{pg}->{ansEvalDefaults}; |
319 | my $ansEvalDefaults = $courseEnv->{pg}->{ansEvalDefaults}; |
| 296 | $envir{$_} = $ansEvalDefaults->{$_} foreach (keys %$ansEvalDefaults); |
320 | $envir{$_} = $ansEvalDefaults->{$_} foreach (keys %$ansEvalDefaults); |
| … | |
… | |
| 407 | |
431 | |
| 408 | a WeBWorK::Set object |
432 | a WeBWorK::Set object |
| 409 | |
433 | |
| 410 | =item PROBLEM |
434 | =item PROBLEM |
| 411 | |
435 | |
| 412 | a WeBWorK::Problem object |
436 | a WeBWorK::Problem object. The contents of the source_file field can specify a |
|
|
437 | PG file either by absolute path or path relative to the "templates" directory. |
|
|
438 | I<The caller should remove taint from this value before passing!> |
| 413 | |
439 | |
| 414 | =item PSVN |
440 | =item PSVN |
| 415 | |
441 | |
| 416 | the problem set version number |
442 | the problem set version number |
| 417 | |
443 | |