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

bowersj2 lon-capa-cvs@mail.lon-capa.org
Tue, 24 Sep 2002 03:48:18 -0000


bowersj2		Mon Sep 23 23:48:18 2002 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  mostly a commit to get this off my home system onto s17 tommorow, but:
  
  * cleaned up status function to be consistent with parenthesis
  * added problem status "nothing set", which I think is necessary to
    correctly handle multi-part problems
  * added a seperate function to determine the "description string" for
    the problems, which is the "Due: DATE", "Answer: DATE", etc. It's
    not working right yet, but I'll get there when I'm not tired.
  * added a stub function for a "humanized" date representation
  * a few other minor cleanups
  
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.52 loncom/interface/lonnavmaps.pm:1.53
--- loncom/interface/lonnavmaps.pm:1.52	Mon Sep 23 22:41:21 2002
+++ loncom/interface/lonnavmaps.pm	Mon Sep 23 23:48:18 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.52 2002/09/24 02:41:21 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.53 2002/09/24 03:48:18 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -841,7 +841,8 @@
       $res->OPEN_LATER         => '',
       $res->TRIES_LEFT         => '#FFFF00',
       $res->INCORRECT          => '#FFAA00',
-      $res->OPEN               => '#FFFF88' );
+      $res->OPEN               => '#FFFF88',
+      $res->NOTHING_SET        => ''        );
 
     if (!defined($navmap)) {
         my $requrl = $r->uri;
@@ -863,6 +864,7 @@
 
     my $mapIterator = $navmap->getIterator(undef, undef, \%filterHash);
     my $curRes = $mapIterator->next();
+    undef $res; # so we don't accidentally use it later
     my $indentLevel = -1;
     my $indentString = "        ";
 
@@ -966,7 +968,7 @@
                 
                 if ($curRes->kind() eq "res" and 
                     $curRes->is_problem() ) {
-                    $r->print (" Due: " . localtime($curRes->duedate()));
+                    $r->print (getDescription($curRes, $part));
                 }
             }
         }
@@ -1024,6 +1026,43 @@
     return $res->src();
 }
 
+# Convenience function: This seperates the logic of how to create
+# the problem text strings ("Due: DATE", "Open: DATE", "Not yet assigned",
+# etc.) into a seperate function. It takes a resource object as the
+# first parameter, and the part number of the resource as the second.
+# It's basically a big switch statement on the status of the resource.
+
+sub getDescription {
+    my $res = shift;
+    my $part = shift;
+    my $status = $res->getDateStatus();
+
+    if ($status == $res->NETWORK_FAILURE) { return ""; }
+    if ($status == $res->NOTHING_SET) {
+        return "Not currently assigned.";
+    }
+    if ($status == $res->OPEN_LATER) {
+        return "Opens: " . timeToHumanString($res->opendate($part));
+    }
+    if ($status == $res->OPEN) {
+        return "Due: " . timeToHumanString($res->duedate($part));
+    }
+    if ($status == $res->PAST_DUE) {
+        return "Answer: " . timeToHumanString($res->duedate($part));
+    }
+    if ($status == $res->ANSWER_OPEN) {
+        return "Answer available";
+    }
+
+}
+
+# I want to change this into something more human-friendly. For
+# now, this is a simple call to localtime. The final function
+# probably belongs in loncommon.
+sub timeToHumanString {
+    return localtime(shift);
+}
+
 1;
 
 package Apache::lonnavmaps::navmap;
@@ -2000,6 +2039,7 @@
 sub OPEN            { return 1; }
 sub PAST_DUE        { return 2; }
 sub ANSWER_OPEN     { return 3; }
+sub NOTHING_SET     { return 4; } 
 sub NETWORK_FAILURE { return 100; }
 
 sub getDateStatus {
@@ -2010,13 +2050,18 @@
 
     my $now = time();
 
-    my $o = $now - $self->opendate($part);
-    my $d = $now - $self->duedate($part);
-    my $a = $now - $self->answerdate($part);
-
-    if ($o < 0) {return $self->OPEN_LATER};
-    if ($d < 0) {return $self->OPEN};
-    if ($a < 0) {return $self->PAST_DUE};
+    my $open = $self->opendate($part);
+    my $due = $self->duedate($part);
+    my $answer = $self->answerdate($part);
+
+    if ($open && $now < $open) {return $self->OPEN_LATER};
+    if ($due && $now < $due) {return $self->OPEN};
+    if ($answer && $now < $answer) {return $self->PAST_DUE};
+    if (!$open && !$due && !$answer) {
+        # no data on the problem at all
+        # should this be the same as "open later"? think multipart.
+        return $self->NOTHING_SET;
+    }
     return $self->ANSWER_OPEN;
 }
 
@@ -2052,12 +2097,12 @@
 
 =cut
 
-sub NOT_ATTEMPTED         { return 0; }
-sub INCORRECT             { return 1; }
-sub INCORRECT_BY_OVERRIDE { return 2; }
-sub CORRECT               { return 3; }
-sub CORRECT_BY_OVERRIDE   { return 4; }
-sub EXCUSED               { return 5; }
+sub NOT_ATTEMPTED         { return 10; }
+sub INCORRECT             { return 11; }
+sub INCORRECT_BY_OVERRIDE { return 12; }
+sub CORRECT               { return 13; }
+sub CORRECT_BY_OVERRIDE   { return 14; }
+sub EXCUSED               { return 15; }
 
 sub getCompletionStatus {
     my $self = shift;
@@ -2089,6 +2134,8 @@
 
 =item * NETWORK_FAILURE: The network has failed and the information is not available.
 
+=item * NOTHING_SET: No dates have been set for this problem (part) at all. (Because only certain parts of a multi-part problem may be assigned, this can not be collapsed into "open later", as we don't know a given part will EVER be opened.)
+
 =item * CORRECT: For any reason at all, the part is considered correct.
 
 =item * EXCUSED: For any reason at all, the problem is excused.
@@ -2120,56 +2167,54 @@
 
     # What we have is a two-dimensional matrix with 4 entries on one
     # dimension and 5 entries on the other, which we want to colorize,
-    # plus network failure.
+    # plus network failure and "no date data".
 
-    # Don't colorize on network failure.
-    if ($completionStatus == NETWORK_FAILURE()) { return $self->NETWORK_FAILURE(); }
+    if ($completionStatus == NETWORK_FAILURE) { return NETWORK_FAILURE; }
 
     # There are a few whole rows we can dispose of:
-    # If the problem is CORRECT, color it green no matter what
-    if ($completionStatus == CORRECT() ||
-        $completionStatus == CORRECT_BY_OVERRIDE() ) {
-        return $self->CORRECT(); # Return a nice green.
+    if ($completionStatus == CORRECT ||
+        $completionStatus == CORRECT_BY_OVERRIDE ) {
+        return CORRECT(); 
+    }
+
+    # If it's EXCUSED, then return that no matter what
+    if ($completionStatus == EXCUSED) {
+        return EXCUSED; 
     }
 
-    # If it's EXCUSED, then return something no matter what
-    if ($completionStatus == EXCUSED()) {
-        return $self->EXCUSED(); # return a nice blue
+    if ($dateStatus == NOTHING_SET) {
+        return NOTHING_SET;
     }
 
     # Now we're down to a 3 (incorrect, incorrect_override, not_attempted)
     # by 4 matrix (date status).
 
-    # If it's Past Due and we didn't bail earlier because it's correct,
-    # color it orange. (Red is sort inappropriate; too drastic a color
-    # for something the student can't fix.
-    if ($dateStatus == PAST_DUE()) {
-        return $self->PAST_DUE(); # return orange
+    if ($dateStatus == PAST_DUE) {
+        return PAST_DUE; 
     }
 
-    if ($dateStatus == ANSWER_OPEN()) {
-        return $self->ANSWER_OPEN();
+    if ($dateStatus == ANSWER_OPEN) {
+        return ANSWER_OPEN;
     }
 
     # Now: (incorrect, incorrect_override, not_attempted) x 
     # (open_later), (open)
     
-    # If it's open later, then don't colorize
-    if ($dateStatus == OPEN_LATER()) {
-        return $self->OPEN_LATER();
+    if ($dateStatus == OPEN_LATER) {
+        return OPEN_LATER;
     }
 
     # If it's WRONG...
-    if ($completionStatus == INCORRECT() || $completionStatus == INCORRECT_BY_OVERRIDE()) {
+    if ($completionStatus == INCORRECT || $completionStatus == INCORRECT_BY_OVERRIDE) {
         # and there are TRIES LEFT:
         if ($self->tries() < $self->maxtries()) {
-            return $self->TRIES_LEFT(); # return red: The student can fix this
+            return TRIES_LEFT;
         }
-        return $self->INCORRECT(); # otherwise, return orange; student can't fix this
+        return INCORRECT; # otherwise, return orange; student can't fix this
     }
 
     # Otherwise, it's untried and open
-    return $self->OPEN(); # Light yellow
+    return OPEN; 
 }
 
 =pod