[system] / trunk / webwork / system / scripts / l2hPrecreateProb.pl Repository:
ViewVC logotype

Annotation of /trunk/webwork/system/scripts/l2hPrecreateProb.pl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 10 - (view) (download) (as text)

1 : sam 10 #!/usr/local/bin/perl
2 : sam 2
3 :     use strict;
4 :     ## $Id$
5 :    
6 :    
7 :     ################################################################
8 :     # Copyright @1995-1998 by Michael E. Gage, Arnold K. Pizer and
9 :     # WeBWorK at the University of Rochester. All rights reserved.
10 :     ################################################################
11 :    
12 : gage 8 use lib '.'; use webworkInit; # WeBWorKInitLine
13 : sam 2
14 :     ## l2hPrecreateProb.pl
15 :     ##
16 :     ## pre-creates latex2html output for each student for a single problem
17 :     ## so that WeBWorK doesn't have to run latex2html in processProblems
18 :    
19 :     ## NOTE: problem set has to be built before precreating...
20 :    
21 :     ## this is called with arguments classID setdefinitionfile probnumber
22 :     ## e.g. l2hPrecreateSet.pl demoCourse set1.def 7
23 :    
24 :     use CGI;
25 :     use Global;
26 :     use TimeLocal;
27 :     use PGtranslator;
28 :     my ($courseID,$fileName, $probNumber, $lowerLimit, $upperLimit) = @ARGV;
29 :    
30 :     if( (@ARGV < 3) or (@ARGV > 5) ) {
31 :     print "\nSyntax is: l2hPrecreateProb.pl course_name set_definition_filename prob_number or\n";
32 :     print " l2hPrecreateProb.pl course_name set_definition_filename prob_number lowerLimit or\n";
33 :     print " l2hPrecreateProb.pl course_name set_definition_filename prob_number lowerLimit upperLimit\n\n";
34 :     print " (e.g. l2hPrecreateProb.pl demoCourse set1.def 2 or\n";
35 :     print " (e.g. l2hPrecreateProb.pl demoCourse set1.def 2 30000 or\n";
36 :     print " (e.g. l2hPrecreateProb.pl demoCourse set1.def 2 30000 60000\n\n";
37 :    
38 :     print "The Problem is pre created for all psvn's between lower and upper limits if the limits\n";
39 :     print " are given.\n\n";
40 :     exit(0);
41 :     }
42 :    
43 :    
44 :     &Global::getCourseEnvironment($courseID);
45 :    
46 : gage 6 my $databaseDirectory = getCourseDatabaseDirectory();
47 :     my $htmlDirectory = getCourseHtmlDirectory();
48 :     my $htmlURL = getCourseHtmlURL();
49 :     my $scriptDirectory = getWebworkScriptDirectory();
50 :     my $templateDirectory = getCourseTemplateDirectory();
51 :     my $courseScriptsDirectory = getCourseScriptsDirectory();
52 : sam 2 my $tempDirectory = getCourseTempDirectory();
53 :    
54 :     require "${courseScriptsDirectory}$Global::displayMacros_pl";
55 :     require "${scriptDirectory}$Global::DBglue_pl";
56 : gage 6 require "${scriptDirectory}$Global::classlist_DBglue_pl";
57 : sam 2 require "${scriptDirectory}$Global::FILE_pl";
58 :     require "${scriptDirectory}$Global::HTMLglue_pl";
59 :    
60 : gage 6 ####################################################################
61 : sam 2 # load the modules to be used in PGtranslator
62 :     require "${courseScriptsDirectory}PG_module_list.pl";
63 :     ####################################################################
64 :    
65 :     $fileName = ${templateDirectory} . $fileName;
66 :    
67 :     my $starttime = time;
68 :     my ($name);
69 :     my ($setNumber,$setHeaderFileName,$probHeaderFileName,$dueDate,$openDate,$answerDate,$problemListref,$problemValueListref,$problemAttemptLimitListref)
70 :     = &readSetDef($fileName);
71 :     my @problemList = @$problemListref;
72 :     my @problemValueList = @$problemValueListref;
73 :     my @problemAttemptLimitList = @$problemAttemptLimitListref;
74 :    
75 :    
76 :     my $numProbs=0;
77 :     foreach $name (@problemList)
78 :     {$numProbs++;}
79 :    
80 :     my @setProbSetKeys = &getAllProbSetKeysForSet($setNumber);
81 :     #sort the ProbSetKeys to make it easier to keep track of what's happening
82 :     @setProbSetKeys = sort {$a <=> $b} @setProbSetKeys;
83 :    
84 :     my $mode = 'Latex2HTML';
85 :     my ($ii,$psvn);
86 :     my @saveSubmittedAnswerList = ();
87 : gage 6 my ($seed, $login_name_for_psvn);
88 :    
89 : sam 2 foreach $psvn (@setProbSetKeys) {
90 :     next if ((defined $lowerLimit) and ($psvn < $lowerLimit));
91 : gage 6 next if ((defined $upperLimit) and ($psvn > $upperLimit));
92 :    
93 : sam 2 &attachProbSetRecord($psvn);
94 :    
95 : gage 6 $login_name_for_psvn = &getStudentLogin($psvn);
96 :     attachCLRecord($login_name_for_psvn);
97 :     print "In foreach: key = $psvn\n";
98 :     for($ii=1; $ii<=$numProbs; $ii++) {
99 :     next unless $ii == $probNumber;
100 :     print "In for key = $psvn .... i = $ii\n";
101 : sam 2
102 : gage 6 my $source;
103 :     my $probFileName = &getProblemFileName($ii,$psvn);;
104 :     if (-e "${templateDirectory}$probFileName" ) {
105 :     unless (-r "${templateDirectory}$probFileName") {
106 :     wwerror($0, "Can't read ${templateDirectory}$probFileName");
107 :     }
108 :     open(PROB,"<${templateDirectory}$probFileName");
109 :     $source = join("",<PROB>);
110 :     close(PROB);
111 :     }
112 :     ###############################################
113 :     # Create problem text
114 :     ###############################################
115 :     my %envir=defineProblemEnvir($mode,$ii,$psvn,$courseID,\@saveSubmittedAnswerList);
116 : sam 2
117 : gage 6 ###### New Code contributed by Bill Wheeler ############
118 :     ### to fix memory leak
119 :     my $pid=fork();
120 :     if ($pid) {wait ;}
121 :     else {
122 :    
123 : sam 2 my $pt = new PGtranslator; #pt stands for problem translator;
124 :     $pt->environment(\%envir);
125 :     $pt->initialize();
126 :     $pt-> set_mask();
127 :     # $pt -> evaluate_modules(qw( Exporter DynaLoader GD WWPlot Fun Circle Label PGrandom Units ) );
128 :     # The modules to be loaded are now defined in PG_modules_list.pl
129 :     $pt->source_string($source);
130 :     $pt -> unrestricted_load("${courseScriptsDirectory}PG.pl");
131 :     $pt -> unrestricted_load("${courseScriptsDirectory}dangerousMacros.pl");
132 :     $pt ->translate();
133 : gage 6 &createDisplayedProblem($setNumber,$ii,$psvn,$pt->ra_text(), $pt->rh_flags());
134 :    
135 :     undef($pt);
136 :     ## remove any links to gifs. These are not needed and when created by a script run from
137 :     ## the command, they are invalid if the webserver is in a chroot enviroment
138 :     unlink(<$tempDirectory/gif/*${psvn}-set${setNumber}-prob${ii}-*>);
139 :     ############## New Code ########################
140 :     exit(0);
141 :     }
142 :     }
143 : sam 2 }
144 :    
145 :    
146 :    
147 :    
148 :     my $endtime = time;
149 :     my $totaltime = ($endtime - $starttime)/60;
150 :    
151 :     print "\n\nThis took $totaltime minutes to precreate $fileName \n\n";
152 :    
153 :    
154 :    
155 :     sub defineProblemEnvir {
156 :     my ($mode,$probNum,$psvn,$courseName,$refSubmittedAnswers) = @_;
157 :     my %envir=();
158 : gage 6 my $loginName = &getStudentLogin($psvn);
159 : sam 2 ##how to put an array submittedAnswers in a hash??
160 :     $envir{'refSubmittedAnswers'} = $refSubmittedAnswers if defined($refSubmittedAnswers);
161 :     $envir{'psvnNumber'} = $psvn;
162 :     $envir{'psvn'} = $psvn;
163 : gage 6 $envir{'studentName'} = &CL_getStudentName($loginName);
164 :     $envir{'studentLogin'} = $loginName;
165 :     $envir{'sectionName'} = &CL_getClassSection($loginName);
166 :     $envir{'sectionNumber'} = &CL_getClassSection($loginName);
167 :     $envir{'recitationName'} = &CL_getClassRecitation($loginName);
168 :     $envir{'recitationNumber'} = &CL_getClassRecitation($loginName);
169 : sam 2 $envir{'setNumber'} = &getSetNumber($psvn);
170 :     $envir{'questionNumber'} = $probNum;
171 :     $envir{'probNum'} = $probNum;
172 :     $envir{'openDate'} = &getOpenDate($psvn);
173 :     $envir{'formattedOpenDate'} = &formatDateAndTime(&getOpenDate($psvn));
174 :     $envir{'dueDate'} = &getDueDate($psvn);
175 :     $envir{'formattedDueDate'} = &formatDateAndTime(&getDueDate($psvn));
176 :     $envir{'answerDate'} = &getAnswerDate($psvn);
177 :     $envir{'formattedAnswerDate'} = &formatDateAndTime(&getAnswerDate($psvn));
178 :     $envir{'problemValue'} = &getProblemValue($probNum,$psvn);
179 :     $envir{'fileName'} = &getProblemFileName($probNum,$psvn);
180 :     $envir{'probFileName'} = &getProblemFileName($probNum,$psvn );
181 :     $envir{'displayMode'} = $mode;
182 :     $envir{'languageMode'} = $mode;
183 :     $envir{'outputMode'} = $mode;
184 :     $envir{'courseName'} = $courseName;
185 :     $envir{'sessionKey'} = ( defined($main::in{'key'}) ) ?$main::in{'key'} : " ";
186 : gage 6
187 :    
188 : sam 2 # initialize constants for PGanswermacros.pl
189 :     $envir{'numRelPercentTolDefault'} = getNumRelPercentTolDefault();
190 :     $envir{'numZeroLevelDefault'} = getNumZeroLevelDefault();
191 :     $envir{'numZeroLevelTolDefault'} = getNumZeroLevelTolDefault();
192 :     $envir{'numAbsTolDefault'} = getNumAbsTolDefault();
193 :     $envir{'numFormatDefault'} = getNumFormatDefault();
194 :     $envir{'functRelPercentTolDefault'} = getFunctRelPercentTolDefault();
195 :     $envir{'functZeroLevelDefault'} = getFunctZeroLevelDefault();
196 :     $envir{'functZeroLevelTolDefault'} = getFunctZeroLevelTolDefault();
197 :     $envir{'functAbsTolDefault'} = getFunctAbsTolDefault();
198 :     $envir{'functNumOfPoints'} = getFunctNumOfPoints();
199 :     $envir{'functVarDefault'} = getFunctVarDefault();
200 :     $envir{'functLLimitDefault'} = getFunctLLimitDefault();
201 :     $envir{'functULimitDefault'} = getFunctULimitDefault();
202 :     $envir{'functMaxConstantOfIntegration'} = getFunctMaxConstantOfIntegration();
203 :     $envir{'numOfAttempts'} = undef;
204 : gage 6
205 : sam 2 # defining directorys and URLs
206 :     $envir{'templateDirectory'} = &getCourseTemplateDirectory();
207 :     $envir{'classDirectory'} = $Global::classDirectory;
208 :     $envir{'cgiDirectory'} = $Global::cgiDirectory;
209 :     $envir{'cgiURL'} = getWebworkCgiURL();
210 :     $envir{'macroDirectory'} = getCourseMacroDirectory();
211 :     $envir{'courseScriptsDirectory'} = getCourseScriptsDirectory();
212 :     $envir{'htmlDirectory'} = getCourseHtmlDirectory();
213 :     $envir{'htmlURL'} = getCourseHtmlURL();
214 :     $envir{'tempDirectory'} = getCourseTempDirectory();
215 :     $envir{'tempURL'} = getCourseTempURL();
216 :     $envir{'scriptDirectory'} = $Global::scriptDirectory;
217 :     $envir{'webworkDocsURL'} = $Global::webworkDocsURL;
218 :    
219 : gage 6 $envir{'inputs_ref'} = {user => 'practice1',course => 'demoCourse', key => ' '};
220 : sam 2 # no inputs when in this mode
221 :    
222 :     $seed = &getProblemSeed($probNum, $psvn);
223 :     $seed = 0 unless defined($seed);
224 :    
225 :     $envir{'problemSeed'} = $seed if defined($seed);
226 : gage 6
227 : sam 2 my $k;
228 :     foreach $k (keys %Global::PG_environment ) {
229 :     $envir{$k} = $Global::PG_environment{$k};
230 :     }
231 :     %envir;
232 : gage 6 }

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9