[LON-CAPA-cvs] cvs: loncom /interface lonnavmaps.pm lonquickgrades.pm

bowersj2 lon-capa-cvs@mail.lon-capa.org
Tue, 26 Nov 2002 14:45:25 -0000


bowersj2		Tue Nov 26 09:45:25 2002 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm lonquickgrades.pm 
  Log:
  * Slight color change; yellow now more pastel. Less unpleasent to look
    at and I think the shading is more clear now, since more of the color
    is changing.
  * Now correctly doesn't count randomout-hidden parts. (Oops.)
  * Added a message on top pointing the student to the spreadsheet, fixing
    half of 995 (I think that's the bug num...).
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.114 loncom/interface/lonnavmaps.pm:1.115
--- loncom/interface/lonnavmaps.pm:1.114	Mon Nov 18 16:12:39 2002
+++ loncom/interface/lonnavmaps.pm	Tue Nov 26 09:45:24 2002
@@ -2,7 +2,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.114 2002/11/18 21:12:39 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.115 2002/11/26 14:45:24 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -171,6 +171,8 @@
     # is not yet done and due in less then 24 hours
     my $hurryUpColor = "#FF0000";
 
+    # Keep these mappings in sync with lonquickgrades, which uses the colors
+    # instead of the icons.
     my %statusIconMap = 
         ( $res->NETWORK_FAILURE    => '',
           $res->NOTHING_SET        => '',
@@ -478,27 +480,13 @@
                 my $colorizer = "";
                 my $color;
                 if ($curRes->is_problem()) {
-                    my $status = $curRes->status($part);
-                    $color = $colormap{$status};
+                    $color = $colormap{$curRes->status};
 
-                    # Special case in the navmaps: If in less then
-                    # 24 hours, give it a bit of urgency
-                    if (($status == $curRes->OPEN() || $status == $curRes->ATTEMPTED() ||
-                         $status == $curRes->TRIES_LEFT())
-                        && $curRes->duedate() &&
-                        $curRes->duedate() < time()+(24*60*60) && 
-                        $curRes->duedate() > time()) {
-                        $color = $hurryUpColor;
-                    }
-                    # Special case: If this is the last try, and there is
-                    # more then one available, and it's not due yet, give a bit of urgency
-                    my $tries = $curRes->tries($part);
-                    my $maxtries = $curRes->maxtries($part);
-                    if ($tries && $maxtries && $maxtries > 1 &&
-                        $maxtries - $tries == 1 && $curRes->duedate() &&
-                        $curRes->duedate() > time()) {
+                    if (dueInLessThen24Hours($curRes, $part) ||
+                        lastTry($curRes, $part)) {
                         $color = $hurryUpColor;
                     }
+
                     if ($color ne "") {
                         $colorizer = "bgcolor=\"$color\"";
                     }
@@ -731,6 +719,33 @@
     }
 }
 
+# Convenience function, so others can use it: Is the problem due in less then
+# 24 hours, and still can be done?
+
+sub dueInLessThen24Hours {
+    my $res = shift;
+    my $part = shift;
+    my $status = $res->status($part);
+
+    return ($status == $res->OPEN() || $status == $res->ATTEMPTED() ||
+            $status == $res->TRIES_LEFT()) &&
+           $res->duedate() && $res->duedate() < time()+(24*60*60) &&
+           $res->duedate() > time();
+}
+
+# Convenience function, so others can use it: Is there only one try remaining for the
+# part, with more then one try to begin with, not due yet and still can be done?
+sub lastTry {
+    my $res = shift;
+    my $part = shift;
+
+    my $tries = $res->tries($part);
+    my $maxtries = $res->maxtries($part);
+    return $tries && $maxtries && $maxtries > 1 &&
+        $maxtries - $tries == 1 && $res->duedate() &&
+        $res->duedate() > time();
+}
+
 # This puts a human-readable name on the ENV variable.
 sub advancedUser {
     return $ENV{'user.adv'};
@@ -896,7 +911,6 @@
               &GDBM_READER(), 0640))) {
         return undef;
     }
-    $self->{NAV_HASH} = \%navmaphash;
     
     my %parmhash;
     if (!(tie(%parmhash, 'GDBM_File', $self->{PARM_HASH_FILE},
@@ -905,10 +919,16 @@
         untie $self->{PARM_HASH};
         return undef;
     }
-    $self->{PARM_HASH} = \%parmhash;
-    $self->{HASH_TIED} = 1;
+
+    # Now copy the hashes for speed (?)
+    my %realnav; my %realparm;
+    foreach (%navmaphash) { $realnav{$_} = $navmaphash{$_}; }
+    foreach (%parmhash) { $realparm{$_} = $navmaphash{$_}; }
+    $self->{NAV_HASH} = \%realnav;
+    $self->{PARM_HASH} = \%realparm;
 
     bless($self);
+    $self->untieHashes();
         
     return $self;
 }
@@ -1022,13 +1042,20 @@
     $self->{PARM_CACHE} = {};
 }
 
+# Internal function: Takes a key to look up in the nav hash and implements internal
+# memory caching of that key.
+sub navhash {
+    my $self = shift; my $key = shift;
+    return $self->{NAV_HASH}->{$key};
+}
+
 # Checks to see if coursemap is defined, matching test in old lonnavmaps
 sub courseMapDefined {
     my $self = shift;
     my $uri = &Apache::lonnet::clutter($ENV{'request.course.uri'});
 
-    my $firstres = $self->{NAV_HASH}->{"map_start_$uri"};
-    my $lastres = $self->{NAV_HASH}->{"map_finish_$uri"};
+    my $firstres = $self->navhash("map_start_$uri");
+    my $lastres = $self->navhash("map_finish_$uri");
     return $firstres && $lastres;
 }
 
@@ -1108,8 +1135,8 @@
 
 sub firstResource {
     my $self = shift;
-    my $firstResource = $self->{NAV_HASH}->{'map_start_' .
-                     &Apache::lonnet::clutter($ENV{'request.course.uri'})};
+    my $firstResource = $self->navhash('map_start_' .
+                     &Apache::lonnet::clutter($ENV{'request.course.uri'}));
     return $self->getById($firstResource);
 }
 
@@ -1121,8 +1148,8 @@
 
 sub finishResource {
     my $self = shift;
-    my $firstResource = $self->{NAV_HASH}->{'map_finish_' .
-                     &Apache::lonnet::clutter($ENV{'request.course.uri'})};
+    my $firstResource = $self->navhash('map_finish_' .
+                     &Apache::lonnet::clutter($ENV{'request.course.uri'}));
     return $self->getById($firstResource);
 }
 
@@ -1781,7 +1808,7 @@
     my $self = shift;
     my $param = shift;
     my $id = shift;
-    return $self->{NAV_MAP}->{NAV_HASH}->{$param . ($id?$self->{ID}:"")};
+    return $self->{NAV_MAP}->navhash($param . ($id?$self->{ID}:""));
 }
 
 =pod
Index: loncom/interface/lonquickgrades.pm
diff -u loncom/interface/lonquickgrades.pm:1.6 loncom/interface/lonquickgrades.pm:1.7
--- loncom/interface/lonquickgrades.pm:1.6	Fri Nov 22 15:39:14 2002
+++ loncom/interface/lonquickgrades.pm	Tue Nov 26 09:45:25 2002
@@ -68,6 +68,12 @@
                         $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 @@
     $r->print(&Apache::loncommon::bodytag('Quick Score Display','',
                                           ''));
 
+    $r->print(<<HEADER);
+<p>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 href="/adm/classcalc">a detailed
+score sheet</a>.</p>
+HEADER
+
     $navmap->init();
 
     # End navmap using boilerplate
@@ -107,7 +119,7 @@
         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,7 +163,7 @@
     $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 = '&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;';