--- trunk/webwork2/lib/WeBWorK/PG.pm 2004/07/03 17:29:32 2440 +++ trunk/webwork2/lib/WeBWorK/PG.pm 2006/08/24 21:16:41 4397 @@ -1,7 +1,7 @@ ################################################################################ # WeBWorK Online Homework Delivery System -# Copyright © 2000-2003 The WeBWorK Project, http://openwebwork.sf.net/ -# $CVSHeader: webwork-modperl/lib/WeBWorK/PG.pm,v 1.55 2004/06/26 21:07:20 jj Exp $ +# Copyright © 2000-2006 The WeBWorK Project, http://openwebwork.sf.net/ +# $CVSHeader: webwork2/lib/WeBWorK/PG.pm,v 1.67 2006/08/17 23:54:09 dpvc Exp $ # # This program is free software; you can redistribute it and/or modify it under # the terms of either: (a) the GNU General Public License as published by the @@ -27,6 +27,7 @@ use warnings; use WeBWorK::PG::ImageGenerator; use WeBWorK::Utils qw(runtime_use formatDateTime makeTempDirectory); +use WeBWorK::Utils::RestrictedClosureClass; use constant DISPLAY_MODES => { # display name # mode name @@ -36,6 +37,7 @@ images => "HTML_dpng", jsMath => "HTML_jsMath", asciimath => "HTML_asciimath", + LaTeXMathML => "HTML_LaTeXMathML", }; sub new { @@ -61,6 +63,7 @@ $psvn, $formFields, $options, + $extras, ) = @_; my %envir; @@ -93,12 +96,12 @@ # ADDED: courseName, formatedDueDate $envir{openDate} = $set->open_date; - $envir{formattedOpenDate} = formatDateTime($envir{openDate}); + $envir{formattedOpenDate} = formatDateTime($envir{openDate}, $ce->{siteDefaults}{timezone}); $envir{dueDate} = $set->due_date; - $envir{formattedDueDate} = formatDateTime($envir{dueDate}); + $envir{formattedDueDate} = formatDateTime($envir{dueDate}, $ce->{siteDefaults}{timezone}); $envir{formatedDueDate} = $envir{formattedDueDate}; # typo in many header files $envir{answerDate} = $set->answer_date; - $envir{formattedAnswerDate} = formatDateTime($envir{answerDate}); + $envir{formattedAnswerDate} = formatDateTime($envir{answerDate}, $ce->{siteDefaults}{timezone}); $envir{numOfAttempts} = ($problem->num_correct || 0) + ($problem->num_incorrect || 0); $envir{problemValue} = $problem->value; $envir{sessionKey} = $key; @@ -131,28 +134,34 @@ $envir{externalGif2EpsPath} = $ce->{externalPrograms}->{gif2eps}; $envir{externalPng2EpsPath} = $ce->{externalPrograms}->{png2eps}; $envir{externalGif2PngPath} = $ce->{externalPrograms}->{gif2png}; - + $envir{externalCheckUrl} = $ce->{externalPrograms}->{checkurl}; # Directories and URLs # REMOVED: courseName # ADDED: dvipngTempDir # ADDED: jsMathURL # ADDED: asciimathURL + # ADDED: macrosPath + # REMOVED: macrosDirectory, courseScriptsDirectory + # ADDED: LaTeXMathML $envir{cgiDirectory} = undef; $envir{cgiURL} = undef; $envir{classDirectory} = undef; - $envir{courseScriptsDirectory} = $ce->{pg}->{directories}->{macros}."/"; + $envir{macrosPath} = $ce->{pg}->{directories}{macrosPath}; + $envir{appletPath} = $ce->{pg}->{directories}{appletPath}; + $envir{pgDirectories} = $ce->{pg}->{directories}; $envir{htmlDirectory} = $ce->{courseDirs}->{html}."/"; $envir{htmlURL} = $ce->{courseURLs}->{html}."/"; - $envir{macroDirectory} = $ce->{courseDirs}->{macros}."/"; $envir{templateDirectory} = $ce->{courseDirs}->{templates}."/"; $envir{tempDirectory} = $ce->{courseDirs}->{html_temp}."/"; $envir{tempURL} = $ce->{courseURLs}->{html_temp}."/"; $envir{scriptDirectory} = undef; $envir{webworkDocsURL} = $ce->{webworkURLs}->{docs}."/"; $envir{localHelpURL} = $ce->{webworkURLs}->{local_help}."/"; - $envir{jsMathURL} = $ce->{webworkURLs}->{jsMath}; + $envir{jsMathURL} = $ce->{webworkURLs}->{jsMath}; $envir{asciimathURL} = $ce->{webworkURLs}->{asciimath}; + $envir{LaTeXMathMLURL} = $ce->{webworkURLs}->{LaTeXMathML}; + $envir{server_root_url} = $ce->{apache_root_url}; # Information for sending mail @@ -167,30 +176,28 @@ # ---------------------------------------------------------------------- - my $basename = "equation-$envir{psvn}.$envir{probNum}"; - $basename .= ".$envir{problemSeed}" if $envir{problemSeed}; - - # to make grabbing these options easier, we'll pull them out now... - my %imagesModeOptions = %{$ce->{pg}->{displayModeOptions}->{images}}; + # ADDED: ImageGenerator for images mode + if (defined $extras->{image_generator}) { + $envir{imagegen} = $extras->{image_generator}; + # only allow access to the add() method + $envir{imagegen} = new WeBWorK::Utils::RestrictedClosureClass($extras->{image_generator}, "add"); + } - # Object for generating equation images - $envir{imagegen} = WeBWorK::PG::ImageGenerator->new( - tempDir => $ce->{webworkDirs}->{tmp}, # global temp dir - latex => $envir{externalLaTeXPath}, - dvipng => $envir{externalDvipngPath}, - useCache => 1, - cacheDir => $ce->{webworkDirs}->{equationCache}, - cacheURL => $ce->{webworkURLs}->{equationCache}, - cacheDB => $ce->{webworkFiles}->{equationCacheDB}, - useMarkers => ($imagesModeOptions{dvipng_align} && $imagesModeOptions{dvipng_align} eq 'mysql'), - dvipng_align => $imagesModeOptions{dvipng_align}, - dvipng_depth_db => $imagesModeOptions{dvipng_depth_db}, - ); + # ADDED: jsMath options + $envir{jsMath} = {%{$ce->{pg}{displayModeOptions}{jsMath}}}; # Other things... $envir{QUIZ_PREFIX} = $options->{QUIZ_PREFIX}; # used by quizzes $envir{PROBLEM_GRADER_TO_USE} = $ce->{pg}->{options}->{grader}; $envir{PRINT_FILE_NAMES_FOR} = $ce->{pg}->{specialPGEnvironmentVars}->{PRINT_FILE_NAMES_FOR}; + + # ADDED: __files__ + # an array for mapping (eval nnn) to filenames in error messages + $envir{__files__} = { + root => $ce->{webworkDirs}{root}, # used to shorten filenames + pg => $ce->{pg}{directories}{root}, # ditto + tmpl => $ce->{courseDirs}{templates}, # ditto + }; # variables for interpreting capa problems and other things to be # seen in a pg file