version 1.53, 2002/09/24 03:48:18
|
version 1.54, 2002/09/24 20:01:05
|
Line 833 sub new_handle {
|
Line 833 sub new_handle {
|
|
|
# Defines a status->color mapping, null string means don't color |
# Defines a status->color mapping, null string means don't color |
my %colormap = |
my %colormap = |
( $res->NETWORK_FAILURE => '', |
( $res->NETWORK_FAILURE => '', |
$res->CORRECT => '#BBFFBB', |
$res->CORRECT => '#BBFFBB', |
$res->EXCUSED => '#BBBBFF', |
$res->EXCUSED => '#BBBBFF', |
$res->PAST_DUE => '#FFAA00', |
$res->PAST_DUE_ANSWER_LATER => '#FFAA00', |
$res->ANSWER_OPEN => '#FF00AA', |
$res->PAST_DUE_NO_ANSWER => '#FFAA00', |
$res->OPEN_LATER => '', |
$res->ANSWER_OPEN => '#FF00AA', |
$res->TRIES_LEFT => '#FFFF00', |
$res->OPEN_LATER => '', |
$res->INCORRECT => '#FFAA00', |
$res->TRIES_LEFT => '#FFFF00', |
$res->OPEN => '#FFFF88', |
$res->INCORRECT => '#FFAA00', |
$res->NOTHING_SET => '' ); |
$res->OPEN => '#FFFF88', |
|
$res->NOTHING_SET => '' ); |
|
|
if (!defined($navmap)) { |
if (!defined($navmap)) { |
my $requrl = $r->uri; |
my $requrl = $r->uri; |
Line 1045 sub getDescription {
|
Line 1046 sub getDescription {
|
return "Opens: " . timeToHumanString($res->opendate($part)); |
return "Opens: " . timeToHumanString($res->opendate($part)); |
} |
} |
if ($status == $res->OPEN) { |
if ($status == $res->OPEN) { |
return "Due: " . timeToHumanString($res->duedate($part)); |
return "Due: $status " . timeToHumanString($res->duedate($part)); |
} |
} |
if ($status == $res->PAST_DUE) { |
if ($status == $res->PAST_DUE_ANSWER_LATER) { |
return "Answer: " . timeToHumanString($res->duedate($part)); |
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) { |
if ($status == $res->ANSWER_OPEN) { |
return "Answer available"; |
return "Answer available"; |
} |
} |
|
|
} |
} |
|
|
# I want to change this into something more human-friendly. For |
# I want to change this into something more human-friendly. For |
Line 2024 B<Date Codes>
|
Line 2027 B<Date Codes>
|
|
|
=item * B<OPEN>: Open and not yet due. |
=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. |
=item * B<ANSWER_OPEN>: The answer date is here. |
|
|
Line 2035 B<Date Codes>
|
Line 2040 B<Date Codes>
|
=cut |
=cut |
|
|
# Apparently the compiler optimizes these into constants automatically |
# Apparently the compiler optimizes these into constants automatically |
sub OPEN_LATER { return 0; } |
sub OPEN_LATER { return 0; } |
sub OPEN { return 1; } |
sub OPEN { return 1; } |
sub PAST_DUE { return 2; } |
sub PAST_DUE_NO_ANSWER { return 2; } |
sub ANSWER_OPEN { return 3; } |
sub PAST_DUE_ANSWER_LATER { return 3; } |
sub NOTHING_SET { return 4; } |
sub ANSWER_OPEN { return 4; } |
sub NETWORK_FAILURE { return 100; } |
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 { |
sub getDateStatus { |
my $self = shift; |
my $self = shift; |
my $part = shift; |
my $part = shift; |
$part = "0" if (!defined($part)); |
$part = "0" if (!defined($part)); |
|
|
|
# Always return network failure if there was one. |
return $self->NETWORK_FAILURE if ($self->{NAV_MAP}->{NETWORK_FAILURE}); |
return $self->NETWORK_FAILURE if ($self->{NAV_MAP}->{NETWORK_FAILURE}); |
|
|
my $now = time(); |
my $now = time(); |
Line 2054 sub getDateStatus {
|
Line 2069 sub getDateStatus {
|
my $due = $self->duedate($part); |
my $due = $self->duedate($part); |
my $answer = $self->answerdate($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) { |
if (!$open && !$due && !$answer) { |
# no data on the problem at all |
# no data on the problem at all |
# should this be the same as "open later"? think multipart. |
# should this be the same as "open later"? think multipart. |
return $self->NOTHING_SET; |
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 |
=pod |
Line 2140 Along with directly returning the date o
|
Line 2156 Along with directly returning the date o
|
|
|
=item * EXCUSED: For any reason at all, the problem is excused. |
=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. |
=item * ANSWER_OPEN: The problem is past due, not correct, and the answer is now available. |
|
|
Line 2167 sub status {
|
Line 2185 sub status {
|
|
|
# What we have is a two-dimensional matrix with 4 entries on one |
# 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, |
# 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; } |
if ($completionStatus == NETWORK_FAILURE) { return NETWORK_FAILURE; } |
|
|
Line 2189 sub status {
|
Line 2207 sub status {
|
# Now we're down to a 3 (incorrect, incorrect_override, not_attempted) |
# Now we're down to a 3 (incorrect, incorrect_override, not_attempted) |
# by 4 matrix (date status). |
# by 4 matrix (date status). |
|
|
if ($dateStatus == PAST_DUE) { |
if ($dateStatus == PAST_DUE_ANSWER_LATER || |
return PAST_DUE; |
$dateStatus == PAST_DUE_NO_ANSWER) { |
|
return $dateStatus; |
} |
} |
|
|
if ($dateStatus == ANSWER_OPEN) { |
if ($dateStatus == ANSWER_OPEN) { |