[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