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

bowersj2 lon-capa-cvs@mail.lon-capa.org
Tue, 24 Sep 2002 20:01:05 -0000


bowersj2		Tue Sep 24 16:01:05 2002 EDT

  Modified files:              
    /loncom/interface	lonnavmaps.pm 
  Log:
  Corrected date status logic, added new distinction between "past due w/ answer
  opening eventually" and "past due w/o answer eventually", which affects the
  final message returned to the user.
  
  
Index: loncom/interface/lonnavmaps.pm
diff -u loncom/interface/lonnavmaps.pm:1.53 loncom/interface/lonnavmaps.pm:1.54
--- loncom/interface/lonnavmaps.pm:1.53	Mon Sep 23 23:48:18 2002
+++ loncom/interface/lonnavmaps.pm	Tue Sep 24 16:01:05 2002
@@ -1,7 +1,7 @@
 # The LearningOnline Network with CAPA
 # Navigate Maps Handler
 #
-# $Id: lonnavmaps.pm,v 1.53 2002/09/24 03:48:18 bowersj2 Exp $
+# $Id: lonnavmaps.pm,v 1.54 2002/09/24 20:01:05 bowersj2 Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -833,16 +833,17 @@
 
     # Defines a status->color mapping, null string means don't color
     my %colormap = 
-    ( $res->NETWORK_FAILURE    => '',
-      $res->CORRECT            => '#BBFFBB',
-      $res->EXCUSED            => '#BBBBFF',
-      $res->PAST_DUE           => '#FFAA00',
-      $res->ANSWER_OPEN        => '#FF00AA',
-      $res->OPEN_LATER         => '',
-      $res->TRIES_LEFT         => '#FFFF00',
-      $res->INCORRECT          => '#FFAA00',
-      $res->OPEN               => '#FFFF88',
-      $res->NOTHING_SET        => ''        );
+    ( $res->NETWORK_FAILURE        => '',
+      $res->CORRECT                => '#BBFFBB',
+      $res->EXCUSED                => '#BBBBFF',
+      $res->PAST_DUE_ANSWER_LATER  => '#FFAA00',
+      $res->PAST_DUE_NO_ANSWER     => '#FFAA00',
+      $res->ANSWER_OPEN            => '#FF00AA',
+      $res->OPEN_LATER             => '',
+      $res->TRIES_LEFT             => '#FFFF00',
+      $res->INCORRECT              => '#FFAA00',
+      $res->OPEN                   => '#FFFF88',
+      $res->NOTHING_SET            => ''        );
 
     if (!defined($navmap)) {
         my $requrl = $r->uri;
@@ -1045,15 +1046,17 @@
         return "Opens: " . timeToHumanString($res->opendate($part));
     }
     if ($status == $res->OPEN) {
-        return "Due: " . timeToHumanString($res->duedate($part));
+        return "Due: $status " . timeToHumanString($res->duedate($part));
     }
-    if ($status == $res->PAST_DUE) {
-        return "Answer: " . timeToHumanString($res->duedate($part));
+    if ($status == $res->PAST_DUE_ANSWER_LATER) {
+        return "Answer: " . timeToHumanString($res->answerdate($part));
+    }
+    if ($status == $res->PAST_DUE_NO_ANSWER) {
+        return "Was Due: " . timeToHumanString($res->duedate($part));
     }
     if ($status == $res->ANSWER_OPEN) {
         return "Answer available";
     }
-
 }
 
 # I want to change this into something more human-friendly. For
@@ -2024,7 +2027,9 @@
 
 =item * B<OPEN>: Open and not yet due.
 
-=item * B<PAST_DUE>: The due date has passed, but the answer date has not yet arrived.
+=item * B<PAST_DUE_ANSWER_LATER>: The due date has passed, but the answer date has not yet arrived.
+
+=item * B<PAST_DUE_NO_ANSWER>: The due date has passed and there is no answer opening date set.
 
 =item * B<ANSWER_OPEN>: The answer date is here.
 
@@ -2035,17 +2040,27 @@
 =cut
 
 # Apparently the compiler optimizes these into constants automatically
-sub OPEN_LATER      { return 0; }
-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 OPEN_LATER             { return 0; }
+sub OPEN                   { return 1; }
+sub PAST_DUE_NO_ANSWER     { return 2; }
+sub PAST_DUE_ANSWER_LATER  { return 3; }
+sub ANSWER_OPEN            { return 4; }
+sub NOTHING_SET            { return 5; } 
+sub NETWORK_FAILURE        { return 100; }
+
+# getDateStatus gets the date status for a given problem part. 
+# Because answer date, due date, and open date are fully independent
+# (i.e., it is perfectly possible to *only* have an answer date), 
+# we have to completely cover the 3x3 maxtrix of (answer, due, open) x
+# (past, future, none given). This function handles this with a decision
+# tree. Read the comments to follow the decision tree.
 
 sub getDateStatus {
     my $self = shift;
     my $part = shift;
     $part = "0" if (!defined($part));
+
+    # Always return network failure if there was one.
     return $self->NETWORK_FAILURE if ($self->{NAV_MAP}->{NETWORK_FAILURE});
 
     my $now = time();
@@ -2054,15 +2069,16 @@
     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;
+    if (!$open || $now < $open) {return $self->OPEN_LATER};
+    if (!$due || $now < $due) {return $self->OPEN};
+    if ($answer && $now < $answer) {return $self->PAST_DUE_ANSWER_LATER};
+    if ($answer) { return $self->ANSWER_OPEN; };
+    return PAST_DUE_NO_ANSWER;
 }
 
 =pod
@@ -2140,7 +2156,9 @@
 
 =item * EXCUSED: For any reason at all, the problem is excused.
 
-=item * PAST_DUE: The problem is past due, and not considered correct.
+=item * PAST_DUE_NO_ANSWER: The problem is past due, not considered correct, and no answer date is set.
+
+=item * PAST_DUE_ANSWER_LATER: The problem is past due, not considered correct, and an answer date in the future is set.
 
 =item * ANSWER_OPEN: The problem is past due, not correct, and the answer is now available.
 
@@ -2167,7 +2185,7 @@
 
     # 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 and "no date data".
+    # plus network failure and "no date data at all".
 
     if ($completionStatus == NETWORK_FAILURE) { return NETWORK_FAILURE; }
 
@@ -2189,8 +2207,9 @@
     # Now we're down to a 3 (incorrect, incorrect_override, not_attempted)
     # by 4 matrix (date status).
 
-    if ($dateStatus == PAST_DUE) {
-        return PAST_DUE; 
+    if ($dateStatus == PAST_DUE_ANSWER_LATER ||
+        $dateStatus == PAST_DUE_NO_ANSWER) {
+        return $dateStatus; 
     }
 
     if ($dateStatus == ANSWER_OPEN) {