From: Matt L. v. a. <we...@ma...> - 2007-09-09 02:51:20
|
Log Message: ----------- Version 3 Released. Modified Files: -------------- ww_question_server: README ww_question_server/bin/setup: global.conf.base setup.pl ww_question_server/lib: ProblemServer.pm ww_question_server/lib/ProblemServer: ProblemRequest.pm Added Files: ----------- ww_question_server: CHANGES Revision Data ------------- --- /dev/null +++ CHANGES @@ -0,0 +1,11 @@ +CHANGES LOG: + +Version 2: (August 2007) +* Simple install with script. +* Code refactoring +* One translator per child, (speed boost) +* Fixed WSDL errors +* Minor bug fixes + +Version 1: (July 2007) +* Initial Release \ No newline at end of file Index: README =================================================================== RCS file: /webwork/cvs/system/ww_question_server/README,v retrieving revision 1.6 retrieving revision 1.7 diff -LREADME -LREADME -u -r1.6 -r1.7 --- README +++ README @@ -1,6 +1,6 @@ Webwork Question Server ---------------------- -Version: 0.2 (stable) +Version: 0.3 (stable) Maintainer: Matthew Leventi <mle...@gm...> CVS: cvs.webwork.rochester.edu:/webwork/cvs/system ww_question_server @@ -9,7 +9,12 @@ Note: You don't need to install the WeBWorK system for this server to function. All you need are the PG libraries. Whats new: -* Simple install with script. +* Safe compartment errors fixed. +* Automatic downloading of external files for PG questions. +* Many bug fixes +* Added tth support. +-- +* Simple install with script. * Code refactoring * One translator per child, (speed boost) * Fixed WSDL errors @@ -20,13 +25,16 @@ * Apache 1 or 2 * mod_perl * Apache::SOAP CPAN Module for apache 1, or Apache2::SOAP CPAN Module for apache2 -* latex and dvipng installed +* LWP::Simple module +* latex,dvipng,tth installed * WeBWorK PG libraries installed Setup: 1) Change permissions for directories writable by server chmod -R 777 htdocs/tmp + chown -R www-data:www-data htdocs/tmp chmod -R 777 tmp + chown -R www-data:www-data tmp 2) Run the setup program in bin/setup perl setup.pl Write down the WSDL path that the setup program gives you. It is what you use in the Moodle - WeBWorK Question Type. @@ -38,4 +46,3 @@ Note: The problemserver.apache-config works for both apache 1 and 2. ex) Include /home/you/problemserver/conf/problemserver.apache-config 6) Restart Apache - Index: global.conf.base =================================================================== RCS file: /webwork/cvs/system/ww_question_server/bin/setup/global.conf.base,v retrieving revision 1.3 retrieving revision 1.4 diff -Lbin/setup/global.conf.base -Lbin/setup/global.conf.base -u -r1.3 -r1.4 --- bin/setup/global.conf.base +++ bin/setup/global.conf.base @@ -64,6 +64,7 @@ # equation rendering/hardcopy utiltiies $externalPrograms{latex} = "MARKER_FOR_LATEX"; $externalPrograms{dvipng} = "MARKER_FOR_DVIPNG"; +$externalPrograms{tth} = "MARKER_FOR_TTH"; ################################################################################ @@ -249,15 +250,16 @@ #define the problem environment #psvn -$problemEnviron{psvn} = "1"; +$problemEnviron{psvn} = "PSVN"; $problemEnviron{psvnNumber} = $problemEnviron{psvn}; +$problemEnviron{setNumber} = $problemEnviron{psvn}; #problemNum -$problemEnviron{probNum} = "1"; +$problemEnviron{probNum} = "PROBNUM"; $problemEnviron{questionNumber} = $problemEnviron{probNum}; #fileName -$problemEnviron{fileName} = "ServerFile"; +$problemEnviron{fileName} = "FILENAME"; $problemEnviron{probFileName} = $problemEnviron{fileName}; #seed @@ -301,6 +303,17 @@ $problemEnviron{asciimathURL} = $problemServerURLs{asciimath}; $problemEnviron{LaTeXMathMLURL} = $problemServerURLs{LaTeXMathML}; +#More Problem Environment Configuration +$problemEnviron{htmlDirectory} = ' '; +$problemEnviron{htmlURL} = ' '; +$problemEnviron{tempURL} = $problemServerURLs{htdocs_temp} . '/'; +$problemEnviron{tempDirectory} = $problemServerDirs{htdocs_temp} . '/'; +$problemEnviron{templateDirectory} = $problemServerDirs{htdocs_temp} . '/'; + +$problemEnviron{setName} = "QuestionServer"; +$problemEnviron{studentLogin} = "guest"; + + #Default answers to fill blanks with. my $ansEvalDefaults = $pg{ansEvalDefaults}; Index: setup.pl =================================================================== RCS file: /webwork/cvs/system/ww_question_server/bin/setup/setup.pl,v retrieving revision 1.2 retrieving revision 1.3 diff -Lbin/setup/setup.pl -Lbin/setup/setup.pl -u -r1.2 -r1.3 --- bin/setup/setup.pl +++ bin/setup/setup.pl @@ -63,6 +63,15 @@ $dvipng = "/usr/bin/dvipng"; } +print "Please enter the path to 'tth' command. Leave blank for default. \n"; +print "Default '/usr/bin/tth'\n"; +print ">"; +$tth = <STDIN>; +chop $tth; +if($tth eq "") { + $tth = "/usr/bin/tth"; +} + @@ -133,6 +142,7 @@ close INPUT2; $content =~ s/MARKER_FOR_DVIPNG/$dvipng/; $content =~ s/MARKER_FOR_LATEX/$latex/; +$content =~ s/MARKER_FOR_TTH/$tth/; print " Writing...\n"; open(OUTP3, ">global.conf") or die("Cannot open file 'global.conf' for writing.\n"); print OUTP3 $content; Index: ProblemServer.pm =================================================================== RCS file: /webwork/cvs/system/ww_question_server/lib/ProblemServer.pm,v retrieving revision 1.9 retrieving revision 1.10 diff -Llib/ProblemServer.pm -Llib/ProblemServer.pm -u -r1.9 -r1.10 --- lib/ProblemServer.pm +++ lib/ProblemServer.pm @@ -6,6 +6,10 @@ use MIME::Base64 qw( encode_base64 decode_base64); +use Safe; + +use LWP::Simple; + use ProblemServer::Environment; use ProblemServer::Utils::RestrictedClosureClass; @@ -47,6 +51,7 @@ #Construct the Server Environment my $serverEnviron = new ProblemServer::Environment(); + $SIG{__WARN__} = sub { $self->{warnings} .= shift }; #Keep the Default Server Environment $self->{serverEnviron} = $serverEnviron; @@ -54,15 +59,16 @@ #Keep the Default Problem Environment $self->{problemEnviron} = ($self->{serverEnviron}{problemEnviron}); - #Create Safe Compartment - $self->{safe} = new Safe; - bless $self; return $self; } sub setupTranslator { my $self = shift; + + #Warnings are passed into self + #local $SIG{__WARN__} = sub { $self->{warnings} .= shift }; + #Create Translator Object my $translator = WeBWorK::PG::Translator->new; @@ -95,6 +101,9 @@ sub setupImageGenerator { my $self = shift; + #Warnings are passed into self + #local $SIG{__WARN__} = sub { $self->{warnings} .= shift }; + my $image_generator; my %imagesModeOptions = %{$self->{serverEnviron}->{pg}{displayModeOptions}{images}}; $image_generator = WeBWorK::PG::ImageGenerator->new( @@ -121,22 +130,43 @@ $ProblemServer::theServer->setupImageGenerator(); } +sub downloadFiles { + my ($self,$files) = @_; + foreach(@{$files}) { + my $fileurl = decode_base64($_); + my $lastslash = rindex($fileurl,'/'); + my $filepath = $self->{serverEnviron}->{problemServerDirs}->{htdocs_temp} . substr($fileurl,$lastslash); + mirror($fileurl,$filepath); + } +} + sub runTranslator { my ($self,$source,$seed) = @_; + #Warnings are passed into sel local $SIG{__WARN__} = sub { $self->{warnings} .= shift }; + $source = decode_base64($source); #Assigning Seed $self->{problemEnviron}{problemSeed} = $seed; + #Clear some stuff + $self->{translator}->{safe} = undef; + $self->{translator}->{envir} = undef; + + $self->{translator}->{safe} = new Safe; + #Setting Environment $self->{translator}->environment($self->{problemEnviron}); #Initializing $self->{translator}->initialize(); + #Safe + #$self->{safe} = new Safe; + #PRE-LOAD MACRO FILES eval{$self->{translator}->pre_load_macro_files( - $self->{safe}, + new Safe, $self->{serverEnviron}->{pg}->{directories}->{macros}, 'PG.pl', 'dangerousMacros.pl','IO.pl','PGbasicmacros.pl','PGanswermacros.pl' )}; @@ -164,6 +194,10 @@ sub runChecker { my $self = shift; + + #Warnings are passed into self + #local $SIG{__WARN__} = sub { $self->{warnings} .= shift }; + my $answerArray = shift; my $answerHash = {}; @@ -237,16 +271,28 @@ sub runImageGenerator { my $self = shift; + + #Warnings are passed into self + #local $SIG{__WARN__} = sub { $self->{warnings} .= shift }; + $self->{imageGenerator}->render(body_text => $self->{translator}->r_text); } sub runImageGeneratorAnswers { my $self = shift; + + #Warnings are passed into self + #local $SIG{__WARN__} = sub { $self->{warnings} .= shift }; + $self->{imageGenerator}->render(); } sub buildProblemResponse { my $self = shift; + + #Warnings are passed into self + #local $SIG{__WARN__} = sub { $self->{warnings} .= shift }; + my $response = new ProblemServer::ProblemResponse; $response->{errors} = $self->{translator}->errors; $response->{warnings} = $self->{warnings}; @@ -257,6 +303,7 @@ sub clean { my $self = shift; $self->{translator}->{errors} = undef; + $self->{warnings} = ""; } @@ -288,7 +335,7 @@ sub renderProblem { my ($self,$request) = @_; my $server = $ProblemServer::theServer; - + $server->downloadFiles($request->{files}); $server->runTranslator($request->{code},$request->{seed}); $server->runImageGenerator(); @@ -311,6 +358,7 @@ foreach($requests) { my $request = $_; + $server->downloadFiles($request->{files}); $server->runTranslator($request->{code},$request->{seed}); $server->runImageGenerator(); my $response = $server->buildProblemResponse(); @@ -333,6 +381,9 @@ my $trials = $request->{trials}; my $problem = $request->{problem}; + + $server->downloadFiles($problem->{files}); + my @derivedProblems; my $found; my $problemResponse; @@ -370,6 +421,7 @@ my $request = $_; my $trials = $request->{trials}; my $problem = $request->{problem}; + $server->downloadFiles($problem->{files}); my @derivedProblems; my $found; for(my $itr = 0; $itr < $trials ; $itr++ ) { Index: ProblemRequest.pm =================================================================== RCS file: /webwork/cvs/system/ww_question_server/lib/ProblemServer/ProblemRequest.pm,v retrieving revision 1.3 retrieving revision 1.4 diff -Llib/ProblemServer/ProblemRequest.pm -Llib/ProblemServer/ProblemRequest.pm -u -r1.3 -r1.4 --- lib/ProblemServer/ProblemRequest.pm +++ lib/ProblemServer/ProblemRequest.pm @@ -3,8 +3,9 @@ =pod =begin WSDL - _ATTR code $string The PG code to be translated - _ATTR seed $string The seed to be used for randomization + _ATTR code $string The PG code to be translated. + _ATTR seed $string The seed to be used for randomization. + _ATTR files @string The external files needed. =end WSDL =cut sub new { @@ -13,6 +14,7 @@ $self = {}; $self->{code} = $data->{code}; $self->{seed} = $data->{seed}; + $self->{files} = $data->{files}; bless $self; return $self; } |