[system] / branches / rel-2-4-patches / webwork2 / lib / WeBWorK / PG.pm Repository:
ViewVC logotype

Diff of /branches/rel-2-4-patches/webwork2/lib/WeBWorK/PG.pm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

Revision 607 Revision 815
13 13
14use strict; 14use strict;
15use warnings; 15use warnings;
16use File::Path qw(rmtree); 16use File::Path qw(rmtree);
17use File::Temp qw(tempdir); 17use File::Temp qw(tempdir);
18use WeBWorK::DB::Classlist;
19use WeBWorK::DB::WW;
20use WeBWorK::PG::Translator; 18use WeBWorK::PG::Translator;
21use WeBWorK::Problem; 19use WeBWorK::Problem;
22use WeBWorK::Utils qw(readFile formatDateTime writeTimingLogEntry); 20use WeBWorK::Utils qw(readFile formatDateTime writeTimingLogEntry);
23 21
24sub new($$$$$$$$) { 22sub new($$$$$$$$) {
42 "user=".$user->id.",problem=".$courseEnv->{courseName}."/".$set->id."/".$problem->id.",mode=".$translationOptions->{displayMode}, 40 "user=".$user->id.",problem=".$courseEnv->{courseName}."/".$set->id."/".$problem->id.",mode=".$translationOptions->{displayMode},
43 "begin"); 41 "begin");
44 42
45 # install a local warn handler to collect warnings 43 # install a local warn handler to collect warnings
46 my $warnings = ""; 44 my $warnings = "";
47 local $SIG{__WARN__} = sub { $warnings .= shift }; 45 local $SIG{__WARN__} = sub { $warnings .= shift }
46 if $courseEnv->{pg}->{options}->{catchWarnings};
48 47
49 # create a Translator 48 # create a Translator
50 #warn "PG: creating a Translator\n"; 49 #warn "PG: creating a Translator\n";
51 my $translator = WeBWorK::PG::Translator->new; 50 my $translator = WeBWorK::PG::Translator->new;
52 51
86 85
87 # initialize the Translator 86 # initialize the Translator
88 #warn "PG: initializing the Translator\n"; 87 #warn "PG: initializing the Translator\n";
89 $translator->initialize(); 88 $translator->initialize();
90 89
91 # load PG.pl and dangerousMacros.pl using unrestricted_load 90 # load IO.pl, PG.pl, and dangerousMacros.pl using unrestricted_load
92 # i'd like to change this at some point to have the same sort of interface to global.conf 91 # i'd like to change this at some point to have the same sort of interface to global.conf
93 # that the module loading does -- have a list of macros to load unrestrictedly. 92 # that the module loading does -- have a list of macros to load unrestrictedly.
94 #warn "PG: loading PG.pl and dangerousMacros.pl using unrestricted_load\n"; 93 #warn "PG: loading IO.pl, PG.pl, and dangerousMacros.pl using unrestricted_load\n";
95 my $pg_pl = $courseEnv->{webworkDirs}->{macros} . "/PG.pl"; 94 foreach (qw(IO.pl PG.pl dangerousMacros.pl)) {
96 my $dangerousMacros_pl = $courseEnv->{webworkDirs}->{macros} . "/dangerousMacros.pl";
97 my $io_pl = $courseEnv->{webworkDirs}->{macros} . "/IO.pl"; 95 my $macroPath = $courseEnv->{webworkDirs}->{macros} . "/$_";
98 my $err = $translator->unrestricted_load($pg_pl); 96 my $err = $translator->unrestricted_load($macroPath);
99 warn "Error while loading $pg_pl: $err" if $err;
100 $err = $translator->unrestricted_load($dangerousMacros_pl);
101 warn "Error while loading $dangerousMacros_pl: $err" if $err;
102 $err = $translator->unrestricted_load($io_pl);
103 warn "Error while loading $io_pl: $err" if $err; 97 warn "Error while loading $macroPath: $err" if $err;
98 }
104 99
105 # set the opcode mask (using default values) 100 # set the opcode mask (using default values)
106 #warn "PG: setting the opcode mask (using default values)\n"; 101 #warn "PG: setting the opcode mask (using default values)\n";
107 $translator->set_mask(); 102 $translator->set_mask();
108 103
132 127
133 # install a safety filter (&safetyFilter) 128 # install a safety filter (&safetyFilter)
134 #warn "PG: installing a safety filter\n"; 129 #warn "PG: installing a safety filter\n";
135 $translator->rf_safety_filter(\&safetyFilter); 130 $translator->rf_safety_filter(\&safetyFilter);
136 131
132 # write timing log entry -- the translator is now all set up
133 writeTimingLogEntry($courseEnv, "WeBWorK::PG::new",
134 "initialized",
135 "intermediate");
136
137 # translate the PG source into text 137 # translate the PG source into text
138 #warn "PG: translating the PG source into text\n"; 138 #warn "PG: translating the PG source into text\n";
139 $translator->translate(); 139 $translator->translate();
140 140
141 # after we're done translating, we may have to clean up after the translator. 141 # after we're done translating, we may have to clean up after the translator.
230 # PG environment variables 230 # PG environment variables
231 # from docs/pglanguage/pgreference/environmentvariables as of 06/25/2002 231 # from docs/pglanguage/pgreference/environmentvariables as of 06/25/2002
232 # any changes are noted by "ADDED:" or "REMOVED:" 232 # any changes are noted by "ADDED:" or "REMOVED:"
233 233
234 # Vital state information 234 # Vital state information
235 # ADDED: displayHintsQ, displaySolutionsQ, refreshMath2img 235 # ADDED: displayHintsQ, displaySolutionsQ, refreshMath2img,
236 # texDisposition
236 237
237 $envir{psvn} = $psvn; 238 $envir{psvn} = $psvn;
238 $envir{psvnNumber} = $envir{psvn}; 239 $envir{psvnNumber} = $envir{psvn};
239 $envir{probNum} = $problem->id; 240 $envir{probNum} = $problem->id;
240 $envir{questionNumber} = $envir{probNum}; 241 $envir{questionNumber} = $envir{probNum};
242 $envir{probFileName} = $envir{fileName}; 243 $envir{probFileName} = $envir{fileName};
243 $envir{problemSeed} = $problem->problem_seed; 244 $envir{problemSeed} = $problem->problem_seed;
244 $envir{displayMode} = translateDisplayModeNames($options->{displayMode}); 245 $envir{displayMode} = translateDisplayModeNames($options->{displayMode});
245 $envir{languageMode} = $envir{displayMode}; 246 $envir{languageMode} = $envir{displayMode};
246 $envir{outputMode} = $envir{displayMode}; 247 $envir{outputMode} = $envir{displayMode};
247 $envir{displayHintsQ} = $options->{hints}; 248 $envir{displayHintsQ} = $options->{showHints};
248 $envir{displaySolutionsQ} = $options->{solutions}; 249 $envir{displaySolutionsQ} = $options->{showSolutions};
249 $envir{refreshMath2img} = $options->{refreshMath2img}; 250 $envir{refreshMath2img} = $options->{refreshMath2img};
251 $envir{texDisposition} = "pdf"; # in webwork-modperl, we use pdflatex
250 252
251 # Problem Information 253 # Problem Information
252 # ADDED: courseName 254 # ADDED: courseName, formatedDueDate
253 255
254 $envir{openDate} = $set->open_date; 256 $envir{openDate} = $set->open_date;
255 $envir{formattedOpenDate} = formatDateTime($envir{openDate}); 257 $envir{formattedOpenDate} = formatDateTime($envir{openDate});
256 $envir{dueDate} = $set->due_date; 258 $envir{dueDate} = $set->due_date;
257 $envir{formattedDueDate} = formatDateTime($envir{dueDate}); 259 $envir{formattedDueDate} = formatDateTime($envir{dueDate});
260 $envir{formatedDueDate} = $envir{formattedDueDate}; # typo in many header files
258 $envir{answerDate} = $set->answer_date; 261 $envir{answerDate} = $set->answer_date;
259 $envir{formattedAnswerDate} = formatDateTime($envir{answerDate}); 262 $envir{formattedAnswerDate} = formatDateTime($envir{answerDate});
260 $envir{numOfAttempts} = ($problem->num_correct || 0) + ($problem->num_incorrect || 0); 263 $envir{numOfAttempts} = ($problem->num_correct || 0) + ($problem->num_incorrect || 0);
261 $envir{problemValue} = $problem->value; 264 $envir{problemValue} = $problem->value;
262 $envir{sessionKey} = $key; 265 $envir{sessionKey} = $key;
286 $envir{externalTTHPath} = $courseEnv->{externalPrograms}->{tth}; 289 $envir{externalTTHPath} = $courseEnv->{externalPrograms}->{tth};
287 $envir{externalLaTeXPath} = $courseEnv->{externalPrograms}->{latex}; 290 $envir{externalLaTeXPath} = $courseEnv->{externalPrograms}->{latex};
288 $envir{externalDvipngPath} = $courseEnv->{externalPrograms}->{dvipng}; 291 $envir{externalDvipngPath} = $courseEnv->{externalPrograms}->{dvipng};
289 $envir{externalGif2EpsPath} = $courseEnv->{externalPrograms}->{gif2eps}; 292 $envir{externalGif2EpsPath} = $courseEnv->{externalPrograms}->{gif2eps};
290 $envir{externalPng2EpsPath} = $courseEnv->{externalPrograms}->{png2eps}; 293 $envir{externalPng2EpsPath} = $courseEnv->{externalPrograms}->{png2eps};
294 $envir{externalGif2PngPath} = $courseEnv->{externalPrograms}->{gif2png};
291 295
292 # Directories and URLs 296 # Directories and URLs
293 # REMOVED: courseName 297 # REMOVED: courseName
294 # ADDED: dvipngTempDir 298 # ADDED: dvipngTempDir
295
296 299
297 $envir{cgiDirectory} = undef; 300 $envir{cgiDirectory} = undef;
298 $envir{cgiURL} = undef; 301 $envir{cgiURL} = undef;
299 $envir{classDirectory} = undef; 302 $envir{classDirectory} = undef;
300 $envir{courseScriptsDirectory} = $courseEnv->{webworkDirs}->{macros}."/"; 303 $envir{courseScriptsDirectory} = $courseEnv->{webworkDirs}->{macros}."/";
308 $envir{webworkDocsURL} = $courseEnv->{webworkURLs}->{docs}."/"; 311 $envir{webworkDocsURL} = $courseEnv->{webworkURLs}->{docs}."/";
309 $envir{dvipngTempDir} = $options->{displayMode} eq 'images' 312 $envir{dvipngTempDir} = $options->{displayMode} eq 'images'
310 ? tempdir("webwork-dvipng-XXXXXXXX", DIR => $envir{tempDirectory}) 313 ? tempdir("webwork-dvipng-XXXXXXXX", DIR => $envir{tempDirectory})
311 : undef; 314 : undef;
312 315
316 # Information for sending mail
317
318 $envir{mailSmtpServer} = $courseEnv->{mail}->{smtpServer};
319 $envir{mailSmtpSender} = $courseEnv->{mail}->{smtpSender};
320 $envir{ALLOW_MAIL_TO} = $courseEnv->{mail}->{allowedRecipients};
321
313 # Default values for evaluating answers 322 # Default values for evaluating answers
314 323
315 my $ansEvalDefaults = $courseEnv->{pg}->{ansEvalDefaults}; 324 my $ansEvalDefaults = $courseEnv->{pg}->{ansEvalDefaults};
316 $envir{$_} = $ansEvalDefaults->{$_} foreach (keys %$ansEvalDefaults); 325 $envir{$_} = $ansEvalDefaults->{$_} foreach (keys %$ansEvalDefaults);
317 326
344 $errorno = 0; ## don't report blank answer as error 353 $errorno = 0; ## don't report blank answer as error
345 return ($answer,$errorno); 354 return ($answer,$errorno);
346 } 355 }
347 # replace ^ with ** (for exponentiation) 356 # replace ^ with ** (for exponentiation)
348 # $answer =~ s/\^/**/g; 357 # $answer =~ s/\^/**/g;
349 # Return if forbidden characters are found 358 # Return if forbidden characters are found
350 unless ($answer =~ /^[a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)]+$/ ) { 359 unless ($answer =~ /^[a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)]+$/ ) {
351 $answer =~ tr/a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)/#/c; 360 $answer =~ tr/a-zA-Z0-9_\-\+ \t\/@%\*\.\n^\(\)/#/c;
352 $errorno = "<BR>There are forbidden characters in your answer: $submittedAnswer<BR>"; 361 $errorno = "<BR>There are forbidden characters in your answer: $submittedAnswer<BR>";
353 return ($answer,$errorno); 362 return ($answer,$errorno);
354 } 363 }

Legend:
Removed from v.607  
changed lines
  Added in v.815

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9