[system] / trunk / webwork / system / cgi / cgi-scripts / profCourseRecData.pl Repository:
ViewVC logotype

Annotation of /trunk/webwork/system/cgi/cgi-scripts/profCourseRecData.pl

Parent Directory Parent Directory | Revision Log Revision Log


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

1 : gage 8 #!/usr/local/bin/webwork-perl
2 : sam 2
3 :     ## This file is profCourseRecData.pl
4 :     ## It displays overall data on how students in various recitations
5 :     ## are doing on problems. E.g. the instructor can spot difficult
6 :     ## problems.
7 :     ##
8 :    
9 :     ####################################################################
10 :     # Copyright @ 1995-1998 University of Rochester
11 :     # All Rights Reserved
12 :     ####################################################################
13 :    
14 : gage 8 use lib '.'; use webworkInit; # WeBWorKInitLine
15 : sam 2 use strict;
16 :     use Global;
17 :     use Auth;
18 :     use CGI qw(:standard);
19 :    
20 :     # Timing code
21 :     use Benchmark;
22 :     my $beginTime = new Benchmark;
23 :     # end Timing code
24 :    
25 :    
26 :     my %inputs;
27 :     my ($classID, $setNumber,$User,$Session_key,$batchMode);
28 :    
29 :    
30 :     &CGI::ReadParse;
31 :     %inputs = %main::in;
32 :    
33 :     # get information from CGI inputs (see also below for additional information)
34 :     $classID = $inputs{'course'};
35 :     $setNumber = $inputs{'setNo'};
36 :     $User = $inputs{'user'};
37 :     $Session_key = $inputs{'key'};
38 :    
39 :     unless ($classID && $User && $Session_key) {
40 :     &wwerror("$0","The script profCourseRecData.pl did not receive the proper input data.","","", query_string());
41 :     }
42 :    
43 :     # CAUTION: FOR THIS SCRIPT TO WORK CORRECTLTY, ALL STUDENTS
44 :     # MUST HAVE BEEN ASSIGNED THE SAME NUMBER OF PROBLREMS
45 :    
46 :     # print "set is $setNumber";
47 :     # print "classID is $classID";
48 :    
49 :     &getCourseEnvironment($classID);
50 :    
51 :     my $scriptDirectory = getWebworkScriptDirectory;
52 :     my $databaseDirectory = getCourseDatabaseDirectory;
53 :     my $templateDirectory = getCourseTemplateDirectory;
54 :     my $cgiURL = getWebworkCgiURL;
55 :    
56 :     require "${scriptDirectory}$Global::DBglue_pl";
57 : gage 6 require "${scriptDirectory}$Global::classlist_DBglue_pl";
58 : sam 2 require "${scriptDirectory}$Global::FILE_pl";
59 :     require "${scriptDirectory}$Global::SCRtools_pl";
60 :     require "${scriptDirectory}$Global::HTMLglue_pl";
61 :    
62 :     my $keyFile = &Global::getCourseKeyFile($classID);
63 :     &verify_key($User, $Session_key, $keyFile, $classID);
64 :     my $permissionsFile = &Global::getCoursePermissionsFile($classID);
65 :     my $permissions = &get_permissions($User, $permissionsFile);
66 :    
67 :     if (($permissions != $Global::instructor_permissions) and ($permissions != $Global::TA_permissions) ) {
68 :     print "permissions = $permissions instructor_permissions= $Global::instructor_permissions\n";
69 :     print &html_NO_PERMISSION;
70 :     exit(0);
71 :     }
72 :     my $DELIM = $Global::delim;
73 :    
74 :     ## get rest of data from cgi form
75 :     $batchMode = $inputs{'batchMode'}; ## if 1 it means user has choosen to ignore warning message
76 :    
77 :     # get list of problems and values from the database. Warn user if different students
78 :     #have different numbers of problems or different valuse for the same problem
79 :     my $cgiMode = 1;
80 :     my ($warningMsg,$dueDate, $problemListref,$problemValueListref)
81 :     = &readProblemsAndValuesFromDB($setNumber,0,$cgiMode,$batchMode);
82 :    
83 :     if ($warningMsg ne '') { &warningMsgPage(\%inputs,$warningMsg);}
84 :    
85 :     my @problemList = @$problemListref;
86 :     my @problemValueList = @$problemValueListref;
87 :     my $noOfProbs = @problemList;
88 :     unshift @problemValueList, 0; ##off by 1 problem
89 :    
90 :     my (%NHash,%YHash,%attemptedProbHash);
91 :     my (%totalScoreHash,%attemptedSetHash,%allStudentsHash);
92 :     my $total_possible;
93 : gage 6 my @recitationNameArray = keys (%{getAllRecitations()});
94 : sam 2 my @excludedRecitationNameArray = ();
95 :     @excludedRecitationNameArray = @Global::excluse_these_recitations_from_overall_statistics
96 :     if defined @Global::excluse_these_recitations_from_overall_statistics;
97 :    
98 :     &processRecitationNameArrays(); ##separate included and excluded Recitations
99 :    
100 :     ## initialize hashes and load up data
101 :    
102 :     my $all = &uniqueCourseName();
103 :     &initializeAndLoadUp(\@recitationNameArray,$all);
104 :    
105 :     # begin printing HTML text
106 :     print &htmlTOP("WeBWorK Course Data");
107 :    
108 :     # print navigation buttons
109 :     print qq!
110 :     <A HREF="${cgiURL}profLogin.pl?user=$inputs{'user'}&key=$inputs{'key'}&course=$inputs{'course'}">
111 :     <IMG SRC="${Global::upImgUrl}" align="right" BORDER=1 ALT="[Up]"></A><p>
112 :     !;
113 :    
114 :     print <<EOF;
115 :     <HR><BR>
116 :    
117 :     <h3 align="left">Current Statistics for set $setNumber in $classID</h3>
118 :    
119 :     On this page, you can monitor the average progress of students for all recitations or
120 :     by individual recitations. You can identify difficult problems by the percentage of students
121 : gage 6 who have answered the problem correctly and/or by the average number of incorrect attempts
122 :     per problem. All percentages and averages (except \% attempting) are based on the number of
123 : sam 2 students who have attempted a set or problem, not on the total number of students in the recitation
124 : gage 6 or course. Note that 50\% correct on a partial credit question could mean all students got half
125 : sam 2 credit or half the students got full credit and half got no credit.<p>
126 : gage 6 The first two tables do not contain data from "excluded" recitations. Excluded recitations
127 : sam 2 typically contain practices uses, T.A.'s, prof's etc. Data for excluded recitations is displayed
128 :     at the bottom of the page.
129 :     <p>
130 :     EOF
131 :    
132 :    
133 :    
134 :     ## create $dat arrays with the info. on average scores, etc
135 :    
136 :     my ($recitationName,$i, $dataRow,$item);
137 :     my @dataArray =();
138 :    
139 :     ## first row
140 :    
141 :     $dataRow = "recitations$DELIM \# of students$DELIM \% attempting set $setNumber$DELIM average score$DELIM possible score";
142 :     push @dataArray, $dataRow;
143 :    
144 : gage 6 ## display whole course data
145 : sam 2
146 :     $dataRow = "$all $DELIM $allStudentsHash{$all} $DELIM"; ## all Recitations and total # of students
147 :    
148 :     $item =0; ## % of students who have attempted at least one problem in set
149 :     $item = int(100*$attemptedSetHash{$all}/$allStudentsHash{$all}+.5) if $allStudentsHash{$all};
150 :     $dataRow .= "$item $DELIM";
151 :    
152 :     $item =0; ## avg score of students who have attempted at least one problem in set
153 :     $item = (int($totalScoreHash{$all} *10/$attemptedSetHash{$all}+.5))/10 if $attemptedSetHash{$all};
154 :     $item = sprintf '%.1f', $item;
155 :     $dataRow .= "$item $DELIM";
156 :     $dataRow .= "$total_possible";
157 :    
158 :     push @dataArray, $dataRow;
159 :    
160 :    
161 :     ## display data for Recitations
162 :     foreach $recitationName (@recitationNameArray) {
163 :     $dataRow = "$recitationName $DELIM $allStudentsHash{$recitationName} $DELIM"; ## all recitations and total # of students
164 :    
165 :     $item =0; ## % of students who have attempted at least one problem in set
166 :     $item = int(100*$attemptedSetHash{$recitationName}/$allStudentsHash{$recitationName}+.5) if $allStudentsHash{$recitationName};
167 :     $dataRow .= "$item $DELIM";
168 :    
169 :     $item =0; ## avg score of students who have attempted at least one problem in set
170 :     $item = (int($totalScoreHash{$recitationName} *10/$attemptedSetHash{$recitationName}+.5))/10 if $attemptedSetHash{$recitationName};
171 :     $item = sprintf '%.1f', $item;
172 :     $dataRow .= "$item $DELIM";
173 :     $dataRow .= "$total_possible";
174 :     push @dataArray, $dataRow;
175 : gage 6 }
176 : sam 2 # print "<pre> @dataArray <\pre>";
177 :    
178 :     print <<EOF;
179 :     <HR><BR>
180 :     <h3 align="left">Overall Scores by recitation. $all is the total for all included recitations</h3>
181 :     EOF
182 :    
183 :     ## output the html table
184 :     my $string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
185 :     print "${string}<BR>";
186 :    
187 :     ## now output the info on individaul problems
188 :    
189 :    
190 : gage 6 ### display whole course data
191 : sam 2 @dataArray =();
192 :     $dataRow = "$all $DELIM";
193 :     for ($i=1;$i<=$noOfProbs;$i++) {
194 :     $dataRow .= "\# $i $DELIM";
195 :     }
196 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
197 : sam 2
198 :     push @dataArray, $dataRow;
199 :    
200 :     $dataRow = "\% attempting $DELIM";
201 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
202 :     $item =0; ## percent of students who have attempted this problem
203 : sam 2 $item = int(100*$attemptedProbHash{$all}[$i]/$allStudentsHash{$all}+.5) if $allStudentsHash{$all};
204 :     $dataRow .= "$item $DELIM";
205 : gage 6
206 : sam 2 }
207 :    
208 :    
209 :    
210 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
211 :     push @dataArray, $dataRow;
212 :    
213 :    
214 : gage 6
215 : sam 2 $dataRow = "percent correct $DELIM"; ## all recitations and total # of students
216 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
217 :     $item =0; ## % of students who have attempted this problem
218 : sam 2 $item = int(100*$YHash{$all}[$i]/$attemptedProbHash{$all}[$i]+.5) if $attemptedProbHash{$all}[$i];
219 :     $dataRow .= "$item $DELIM";
220 :     }
221 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
222 :     push @dataArray, $dataRow;
223 :    
224 :     $dataRow = "average incorrect $DELIM"; ## all recitations and total # of students
225 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
226 : sam 2
227 : gage 6 $item =0; ## avg # of incorrect attempts of students who have attempted this problem
228 : sam 2 $item = (int(10*$NHash{$all}[$i]/$attemptedProbHash{$all}[$i]+.5))/10 if $attemptedProbHash{$all}[$i];
229 :     $item = sprintf '%.1f', $item;
230 :     $dataRow .= "$item $DELIM";
231 :     }
232 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
233 : sam 2 push @dataArray, $dataRow;
234 :    
235 :     print <<EOF;
236 :    
237 :     <h3 align="left">Data on individual problems by recitation. $all is the total for all included recitations</h3>
238 :     EOF
239 :     ### output the html table
240 :     #$string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
241 :     #print "${string}<BR>";
242 :    
243 :    
244 :     ## display data for recitations
245 :    
246 :     foreach $recitationName (@recitationNameArray) {
247 : gage 6
248 : sam 2 ## add blank row to table to seperate recitations
249 :     $dataRow = '<BR>';
250 :     push @dataArray, $dataRow;
251 :     # @dataArray =();
252 :     $dataRow = "$recitationName $DELIM";
253 :     for ($i=1;$i<=$noOfProbs;$i++) {
254 :     $dataRow .= "\# $i $DELIM";
255 :     }
256 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
257 : sam 2
258 :     push @dataArray, $dataRow;
259 : gage 6
260 : sam 2 $dataRow = "\% attempting $DELIM";
261 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
262 :     $item =0; ## percent of students who have attempted this problem
263 : sam 2 $item = int(100*$attemptedProbHash{$recitationName}[$i]/$allStudentsHash{$recitationName}+.5) if $allStudentsHash{$recitationName};
264 :     $dataRow .= "$item $DELIM";
265 :     }
266 :    
267 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
268 :     push @dataArray, $dataRow;
269 :    
270 : gage 6
271 :    
272 :    
273 : sam 2 $dataRow = "percent correct $DELIM"; ## all recitations and total # of students
274 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
275 :     $item =0; ## % of students who have attempted this problem
276 : sam 2 $item = int(100*$YHash{$recitationName}[$i]/$attemptedProbHash{$recitationName}[$i]+.5) if $attemptedProbHash{$recitationName}[$i];
277 :     $dataRow .= "$item $DELIM";
278 :     }
279 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
280 :     push @dataArray, $dataRow;
281 :    
282 :     $dataRow = "average incorrect $DELIM"; ## all recitations and total # of students
283 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
284 : sam 2
285 : gage 6 $item =0; ## avg # of incorrect attempts of students who have attempted this problem
286 : sam 2 $item = (int(10*$NHash{$recitationName}[$i]/$attemptedProbHash{$recitationName}[$i]+.5))/10 if $attemptedProbHash{$recitationName}[$i];
287 :     $item = sprintf '%.1f', $item;
288 :     $dataRow .= "$item $DELIM";
289 :     }
290 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
291 : sam 2 push @dataArray, $dataRow;
292 :    
293 :     # ## output the html table
294 :     # my $string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
295 :     # print "${string}<BR>";
296 :    
297 : gage 6 }
298 : sam 2
299 :     ## output the html table
300 :     $string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
301 :     print "${string}<BR>";
302 :    
303 :    
304 :    
305 :     ## Now print everything again for excluded recitations
306 :    
307 :     ##################################################################################################
308 :    
309 :     print <<EOF;
310 :     <HR><HR><BR>
311 :    
312 :     <h3 align="left">Current Statistics for Excluded Recitations</h3>
313 :    
314 :     Excluded recitations typically contain practices uses, T.A.'s, prof's etc. The list
315 :     of excluded recitations in contained in the webworkCourse.ph file and typically consists
316 :     of a recitation with an empty name.
317 :     <p>
318 :     EOF
319 :    
320 :    
321 :    
322 :     &initializeAndLoadUp(\@excludedRecitationNameArray,'Excluded');
323 :     $all = 'Excluded';
324 :    
325 :     ## create $dat arrays with the info. on average scores, etc
326 :    
327 :    
328 :     @dataArray =();
329 :    
330 :     ## first row
331 :    
332 :     $dataRow = "recitations$DELIM \# of students$DELIM \% attempting set $setNumber$DELIM average score$DELIM possible score";
333 :     push @dataArray, $dataRow;
334 :    
335 : gage 6 ## display whole course data
336 : sam 2
337 :     $dataRow = "$all $DELIM $allStudentsHash{$all} $DELIM"; ## all recitations and total # of students
338 :    
339 :     $item =0; ## % of students who have attempted at least one problem in set
340 :     $item = int(100*$attemptedSetHash{$all}/$allStudentsHash{$all}+.5) if $allStudentsHash{$all};
341 :     $dataRow .= "$item $DELIM";
342 :    
343 :     $item =0; ## avg score of students who have attempted at least one problem in set
344 :     $item = (int($totalScoreHash{$all} *10/$attemptedSetHash{$all}+.5))/10 if $attemptedSetHash{$all};
345 :     $item = sprintf '%.1f', $item;
346 :     $dataRow .= "$item $DELIM";
347 :     $dataRow .= "$total_possible";
348 :    
349 :     push @dataArray, $dataRow;
350 :    
351 :    
352 :     ## display data for recitations
353 :     foreach $recitationName (@excludedRecitationNameArray) {
354 :     $dataRow = "$recitationName $DELIM $allStudentsHash{$recitationName} $DELIM"; ## all recitations and total # of students
355 :    
356 :     $item =0; ## % of students who have attempted at least one problem in set
357 :     $item = int(100*$attemptedSetHash{$recitationName}/$allStudentsHash{$recitationName}+.5) if $allStudentsHash{$recitationName};
358 :     $dataRow .= "$item $DELIM";
359 :    
360 :     $item =0; ## avg score of students who have attempted at least one problem in set
361 :     $item = (int($totalScoreHash{$recitationName} *10/$attemptedSetHash{$recitationName}+.5))/10 if $attemptedSetHash{$recitationName};
362 :     $item = sprintf '%.1f', $item;
363 :     $dataRow .= "$item $DELIM";
364 :     $dataRow .= "$total_possible";
365 :     push @dataArray, $dataRow;
366 : gage 6 }
367 : sam 2 # print "<pre> @dataArray <\pre>";
368 :    
369 :     print <<EOF;
370 :     <HR><BR>
371 :     <h3 align="left">Overall Scores by recitation. $all is the total for all excluded recitations</h3>
372 :     EOF
373 :    
374 :     ## output the html table
375 :     $string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
376 :     print "${string}<BR>";
377 :    
378 :     ## now output the info on individaul problems
379 :    
380 :    
381 : gage 6 ### display whole course data
382 : sam 2 @dataArray =();
383 :     $dataRow = "$all $DELIM";
384 :     for ($i=1;$i<=$noOfProbs;$i++) {
385 :     $dataRow .= "\# $i $DELIM";
386 :     }
387 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
388 : sam 2
389 :     push @dataArray, $dataRow;
390 :    
391 :     $dataRow = "\% attempting $DELIM";
392 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
393 :     $item =0; ## percent of students who have attempted this problem
394 : sam 2 $item = int(100*$attemptedProbHash{$all}[$i]/$allStudentsHash{$all}+.5) if $allStudentsHash{$all};
395 :     $dataRow .= "$item $DELIM";
396 : gage 6
397 : sam 2 }
398 :    
399 :    
400 :    
401 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
402 :     push @dataArray, $dataRow;
403 :    
404 :    
405 : gage 6
406 : sam 2 $dataRow = "percent correct $DELIM"; ## all recitations and total # of students
407 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
408 :     $item =0; ## % of students who have attempted this problem
409 : sam 2 $item = int(100*$YHash{$all}[$i]/$attemptedProbHash{$all}[$i]+.5) if $attemptedProbHash{$all}[$i];
410 :     $dataRow .= "$item $DELIM";
411 :     }
412 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
413 :     push @dataArray, $dataRow;
414 :    
415 :     $dataRow = "average incorrect $DELIM"; ## all recitations and total # of students
416 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
417 : sam 2
418 : gage 6 $item =0; ## avg # of incorrect attempts of students who have attempted this problem
419 : sam 2 $item = (int(10*$NHash{$all}[$i]/$attemptedProbHash{$all}[$i]+.5))/10 if $attemptedProbHash{$all}[$i];
420 :     $item = sprintf '%.1f', $item;
421 :     $dataRow .= "$item $DELIM";
422 :     }
423 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
424 : sam 2 push @dataArray, $dataRow;
425 :    
426 :     print <<EOF;
427 :    
428 :     <h3 align="left">Data on individual problems by recitation. $all is the total for all excluded recitations</h3>
429 :     EOF
430 :     ### output the html table
431 :     #$string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
432 :     #print "${string}<BR>";
433 :    
434 :    
435 :     ## display data for recitations
436 :    
437 :     foreach $recitationName (@excludedRecitationNameArray) {
438 : gage 6
439 : sam 2 ## add blank row to table to seperate recitations
440 :     $dataRow = '<BR>';
441 :     push @dataArray, $dataRow;
442 :     # @dataArray =();
443 :     $dataRow = "$recitationName $DELIM";
444 :     for ($i=1;$i<=$noOfProbs;$i++) {
445 :     $dataRow .= "\# $i $DELIM";
446 :     }
447 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
448 : sam 2
449 :     push @dataArray, $dataRow;
450 : gage 6
451 : sam 2 $dataRow = "\% attempting $DELIM";
452 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
453 :     $item =0; ## percent of students who have attempted this problem
454 : sam 2 $item = int(100*$attemptedProbHash{$recitationName}[$i]/$allStudentsHash{$recitationName}+.5) if $allStudentsHash{$recitationName};
455 :     $dataRow .= "$item $DELIM";
456 :     }
457 :    
458 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
459 :     push @dataArray, $dataRow;
460 :    
461 : gage 6
462 :    
463 :    
464 : sam 2 $dataRow = "percent correct $DELIM"; ## all recitations and total # of students
465 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
466 :     $item =0; ## % of students who have attempted this problem
467 : sam 2 $item = int(100*$YHash{$recitationName}[$i]/$attemptedProbHash{$recitationName}[$i]+.5) if $attemptedProbHash{$recitationName}[$i];
468 :     $dataRow .= "$item $DELIM";
469 :     }
470 :     $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
471 :     push @dataArray, $dataRow;
472 :    
473 :     $dataRow = "average incorrect $DELIM"; ## all recitations and total # of students
474 : gage 6 for ($i=1;$i<=$noOfProbs;$i++) {
475 : sam 2
476 : gage 6 $item =0; ## avg # of incorrect attempts of students who have attempted this problem
477 : sam 2 $item = (int(10*$NHash{$recitationName}[$i]/$attemptedProbHash{$recitationName}[$i]+.5))/10 if $attemptedProbHash{$recitationName}[$i];
478 :     $item = sprintf '%.1f', $item;
479 :     $dataRow .= "$item $DELIM";
480 :     }
481 : gage 6 $dataRow =~ s|$DELIM$||; ## remove last \$DELIM
482 : sam 2 push @dataArray, $dataRow;
483 :    
484 :     # ## output the html table
485 :     # my $string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
486 :     # print "${string}<BR>";
487 :    
488 : gage 6 }
489 : sam 2
490 :     ## output the html table
491 :     $string = &delimitedArray2htmlTable(\@dataArray, 'htmltable');
492 :     print "${string}<BR>";
493 :    
494 :    
495 :    
496 :    
497 :    
498 :    
499 :     ####################################################################################################
500 : gage 6
501 : sam 2 print &htmlBOTTOM("profCourseRecData.pl", \%inputs, 'profCourseRecDataHelp.html');
502 :    
503 :     # begin Timing code
504 :     my $endTime = new Benchmark;
505 :     &Global::logTimingInfo($beginTime,$endTime,"profCourseRecData.pl",$inputs{'course'},$inputs{'user'});
506 :     # end Timing code
507 :     exit;
508 :    
509 :    
510 :     ##subroutines
511 :    
512 :     sub processRecitationNameArrays {
513 : gage 6 ## first consider all blank entries (i.e. empty or white space) in excludedRecitationNameArray
514 : sam 2 ## to be the same recitation, namely ' '
515 :     my %temp_hash =();
516 :     my $recitationName;
517 :     foreach $recitationName (@excludedRecitationNameArray) {
518 :     if ((!defined ($recitationName)) or ($recitationName =~ m|^\s*$|)) {$recitationName = ' ';}
519 :     $temp_hash{$recitationName} =1;
520 :     }
521 :     @excludedRecitationNameArray = keys %temp_hash;
522 : gage 6
523 : sam 2 ## Make sure excludedRecitationNameArray is a subset of recitationNameArray
524 :     %temp_hash =();
525 :     grep($temp_hash{$_}++,@recitationNameArray);
526 : gage 6 @excludedRecitationNameArray = grep($temp_hash{$_},@excludedRecitationNameArray);
527 :    
528 : sam 2 ## Now remove excluded recitations from recitation list
529 :     %temp_hash =();
530 :     grep($temp_hash{$_}++,@excludedRecitationNameArray);
531 : gage 6 @recitationNameArray = grep(!$temp_hash{$_},@recitationNameArray);
532 : sam 2
533 :     @recitationNameArray = sort @recitationNameArray;
534 :     @excludedRecitationNameArray = sort @excludedRecitationNameArray;
535 :     }
536 :    
537 :     sub initializeAndLoadUp {
538 :     my ($recitationNameArrayref, $wholeCourseName) = @_;
539 :     my @recitationNameArray = @$recitationNameArrayref;
540 :     my $all = $wholeCourseName;
541 :     my ($recitationName,$i,$score);
542 : gage 6
543 : sam 2 ## compute total possible points
544 : gage 6 $total_possible = 0;
545 :     for ($i=1;$i<=$noOfProbs;$i++) {$total_possible += $problemValueList[$i];}
546 : sam 2
547 :     foreach $recitationName (@recitationNameArray) {
548 :     $totalScoreHash{$recitationName} = 0;
549 :     $attemptedSetHash{$recitationName} = 0;
550 :     $allStudentsHash{$recitationName} = 0;
551 :     for ($i=1;$i<=$noOfProbs;$i++) {
552 :     $NHash{$recitationName}[$i]=0; ## contains number of incorrect responses
553 : gage 6 $YHash{$recitationName}[$i]=0; ## contains totals of problem scores (i.e. a
554 :     ## number in [0,1] for each problem
555 : sam 2 $attemptedProbHash{$recitationName}[$i]=0;
556 :     }
557 :     }
558 : gage 6
559 : sam 2 ## load up hashes with data
560 : gage 6
561 : sam 2 my @pinNumbersArray = &getAllProbSetKeysForSet($setNumber);
562 : gage 6 my ($studentAttemptedAProblem, $numIncorr, $pin, $status,$login_name_for_psvn);
563 : sam 2 foreach $pin (@pinNumbersArray) {
564 : gage 6 attachProbSetRecord($pin);
565 :     $login_name_for_psvn = &getStudentLogin($pin);
566 :     attachCLRecord($login_name_for_psvn);
567 :     $status = CL_getStudentStatus($login_name_for_psvn);
568 :     next if dropStatus($status);
569 : sam 2 $studentAttemptedAProblem = 0;
570 : gage 6 $recitationName = &CL_getClassRecitation($login_name_for_psvn);
571 : sam 2 if ((!defined ($recitationName)) or ($recitationName =~ m|^\s*$|)){
572 :     $recitationName = ' ';
573 :     }
574 :     $allStudentsHash{$recitationName} += 1;
575 : gage 6
576 : sam 2 for ($i=1;$i<=$noOfProbs;$i++) {
577 :     if (&getProblemAttempted($i,$pin)) {
578 : gage 6 $studentAttemptedAProblem = 1;
579 : sam 2 $numIncorr = &getProblemNumOfIncorrectAns($i,$pin);
580 :     $numIncorr =0 unless defined $numIncorr;
581 :     $numIncorr = &min($numIncorr,99);
582 :     $NHash{$recitationName}[$i] += $numIncorr;
583 :     $attemptedProbHash{$recitationName}[$i] += 1;
584 :     $score = &getProblemStatus($i,$pin);
585 :     $YHash{$recitationName}[$i] += $score;
586 :     $totalScoreHash{$recitationName} += round_score($score*$problemValueList[$i]);
587 : gage 6 }
588 : sam 2 }
589 :     if ($studentAttemptedAProblem) {$attemptedSetHash{$recitationName} += 1;}
590 :     }
591 :    
592 :     ## initialize whole course data
593 :     $totalScoreHash{$all} = 0;
594 :     $attemptedSetHash{$all} = 0;
595 :     $allStudentsHash{$all} = 0;
596 :     for ($i=1;$i<=$noOfProbs;$i++) {
597 :     $NHash{$all}[$i]=0;
598 :     $YHash{$all}[$i]=0;
599 :     $attemptedProbHash{$all}[$i]=0;
600 :     }
601 : gage 6
602 : sam 2 ## compute whole course data
603 :     foreach $recitationName (@recitationNameArray) {
604 :     $totalScoreHash{$all} += $totalScoreHash{$recitationName};
605 :     $attemptedSetHash{$all} += $attemptedSetHash{$recitationName};
606 :     $allStudentsHash{$all} += $allStudentsHash{$recitationName};
607 :     for ($i=1;$i<=$noOfProbs;$i++) {
608 :     $NHash{$all}[$i] += $NHash{$recitationName}[$i];
609 :     $YHash{$all}[$i] += $YHash{$recitationName}[$i];
610 :     $attemptedProbHash{$all}[$i] += $attemptedProbHash{$recitationName}[$i];
611 :     }
612 :     }
613 :     }
614 : gage 6 ## find unique name
615 :     sub uniqueCourseName {
616 : sam 2 my $all = $classID;
617 :     if (exists $allStudentsHash{$all}) {
618 :     my $j = 1;
619 :     $all = "${all}$j";
620 :     while (exists $allStudentsHash{$all}) {
621 :     $j++;
622 :     $all = "${all}$j";
623 :     }
624 : gage 6 }
625 :     $all
626 : sam 2 }
627 :    
628 :    
629 :    
630 :     sub warningMsgPage {
631 :    
632 :     my ($inputref,$warningMsg) = @_;
633 :     my %inputs = %$inputref;
634 :     # print HTML text
635 :     print &htmlTOP("Scoring Utilities");
636 :    
637 :     # print navigation buttons
638 :     print qq!
639 :     <A HREF="${Global::cgiWebworkURL}profLogin.pl?user=$inputs{'user'}&key=$inputs{'key'}&course=$inputs{'course'}">
640 :     <IMG SRC="${Global::upImgUrl}" align="right" BORDER=1 ALT="[Up]"></A><p>
641 :     !;
642 :    
643 :     print <<EOF;
644 :     <HR><BR>
645 :     <h3 align="left">WeBWorK scoring WARNING message for $classID:</h3>
646 :     EOF
647 :     print "<pre>";
648 :     print $warningMsg;
649 :     print "</pre>";
650 :     print "To Continue displaying data for $setNumber, check the \"Continue\" check box and then select
651 :     \"Continue displaying data for $setNumber\". <BR> To Quit and return to the Scoring page, select the \"Up\"
652 :     buttom.";
653 :    
654 :     ## profScoring form -- allows you to score problem sets
655 :     print <<EOF;
656 :     <P>
657 :    
658 :     <FORM METHOD = "POST" ACTION= "${cgiURL}profCourseRecData.pl">
659 :     <INPUT TYPE="SUBMIT" VALUE="Continue displaying data for $setNumber">
660 :    
661 :     EOF
662 :    
663 :    
664 :     print qq{
665 : gage 6 <BR><INPUT TYPE=CHECKBOX NAME="batchMode" VALUE=1 >Continue
666 : sam 2 };
667 : gage 6
668 : sam 2 # resume printing the rest of the form
669 :    
670 :     print <<EOF;
671 :     <INPUT TYPE="HIDDEN" NAME="user" VALUE="$inputs{'user'}">
672 :     <INPUT TYPE="HIDDEN" NAME="key" VALUE="$inputs{'key'}">
673 : gage 6 <INPUT TYPE="HIDDEN" NAME="course" VALUE="$inputs{'course'}">
674 :     <INPUT TYPE="HIDDEN" NAME="setNo" VALUE="$inputs{'setNo'}">
675 :     </FORM>
676 : sam 2 EOF
677 :    
678 :    
679 :     print &htmlBOTTOM("profLogin.pl", \%inputs);
680 :     exit;
681 :     } #end of warning Page
682 :    
683 :    
684 :    
685 :    
686 :    
687 :    

aubreyja at gmail dot com
ViewVC Help
Powered by ViewVC 1.0.9