[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) {