--- loncom/interface/lonquickgrades.pm 2002/11/22 20:07:11 1.5 +++ loncom/interface/lonquickgrades.pm 2002/12/02 10:14:57 1.8 @@ -68,6 +68,12 @@ sub real_handler { $ENV{"request.course.fn"}.".db", $ENV{"request.course.fn"}."_parms.db", 1, 0); + if (!defined($navmap)) { + my $requrl = $r->uri; + $ENV{'user.error.msg'} = "$requrl:bre:0:0:Navamp initialization failed."; + return HTTP_NOT_ACCEPTABLE; + } + # Keep this hash in sync with %statusIconMap in lonnavmaps; they # should match color/icon my $res = $navmap->firstResource(); # temp resource to access constants @@ -82,6 +88,12 @@ sub real_handler { $r->print(&Apache::loncommon::bodytag('Quick Score Display','', '')); + $r->print(<This screen shows how many problems (or problem parts) you have completed, and +how many you have not yet done. You can also look at a detailed +score sheet.

+HEADER + $navmap->init(); # End navmap using boilerplate @@ -107,7 +119,7 @@ sub real_handler { if ($curRes == $iterator->BEGIN_MAP()) {$depth++;} if ($curRes == $iterator->END_MAP()) { $depth--; } - if (ref($curRes) && $curRes->is_problem()) + if (ref($curRes) && $curRes->is_problem() && !$curRes->randomout) { # Get number of correct, incorrect parts my $parts = $curRes->parts(); @@ -151,11 +163,14 @@ sub real_handler { $iterator->next(); # ignore first BEGIN_MAP my $curRes = $iterator->next(); - my @start = (255, 255, 0); + my @start = (255, 255, 192); my @end = (0, 192, 0); my $indentString = '     '; + my $unaccountedTotal = $totalParts; + my $unaccountedCorrect = $totalRight; + # Second pass: Print the maps. $r->print(''); $r->print('' . "\n\n"); @@ -176,25 +191,38 @@ sub real_handler { my $correct = $curRes->{DATA}->{CHILD_CORRECT}; my $total = $curRes->{DATA}->{CHILD_PARTS}; - my $ratio; - $ratio = $total==0 ? 1 : $correct / $total; - my $color = mixColors(\@start, \@end, $ratio); - $r->print(""); - $r->print("\n"); + if ($total > 0) { + my $ratio; + $ratio = $correct / $total; + my $color = mixColors(\@start, \@end, $ratio); + $r->print(""); + $r->print("\n"); + } } $curRes = $iterator->next(); } + # If there were any problems at the top level, print an extra "catchall" + if ($unaccountedTotal > 0) { + my $ratio = $unaccountedCorrect / $unaccountedTotal; + my $color = mixColors(\@start, \@end, $ratio); + $r->print(""); + } - $r->print("\n\n\n"); + my $maxHelpLink = Apache::loncommon::help_open_topic("Quick_Grades_Possibly_Correct"); $r->print("\n\n");
SequenceCorrect / Total
"); - - for (my $i = 1; $i < $depth; $i++) { $r->print($indentString); } + $unaccountedTotal -= $total; + $unaccountedCorrect -= $correct; - $r->print("$title$correct / $total
"); + + for (my $i = 1; $i < $depth; $i++) { $r->print($indentString); } + + $r->print("$title$correct / $total
"); + $r->print("Problems Not Contained In Sequences"); + $r->print("$unaccountedCorrect / $unaccountedTotal
Total Parts Correct: $totalRight
"); - $r->print("Number Of Parts Possibly Correct: $totalPossible
"); + $r->print("Max Possible To Date $maxHelpLink: $totalPossible
"); $r->print("Total Parts In Course: $totalParts