Diff for /loncom/interface/lonnavmaps.pm between versions 1.52 and 1.53

version 1.52, 2002/09/24 02:41:21 version 1.53, 2002/09/24 03:48:18
Line 841  sub new_handle { Line 841  sub new_handle {
       $res->OPEN_LATER         => '',        $res->OPEN_LATER         => '',
       $res->TRIES_LEFT         => '#FFFF00',        $res->TRIES_LEFT         => '#FFFF00',
       $res->INCORRECT          => '#FFAA00',        $res->INCORRECT          => '#FFAA00',
       $res->OPEN               => '#FFFF88' );        $res->OPEN               => '#FFFF88',
         $res->NOTHING_SET        => ''        );
   
     if (!defined($navmap)) {      if (!defined($navmap)) {
         my $requrl = $r->uri;          my $requrl = $r->uri;
Line 863  sub new_handle { Line 864  sub new_handle {
   
     my $mapIterator = $navmap->getIterator(undef, undef, \%filterHash);      my $mapIterator = $navmap->getIterator(undef, undef, \%filterHash);
     my $curRes = $mapIterator->next();      my $curRes = $mapIterator->next();
       undef $res; # so we don't accidentally use it later
     my $indentLevel = -1;      my $indentLevel = -1;
     my $indentString = "        ";      my $indentString = "        ";
   
Line 966  sub new_handle { Line 968  sub new_handle {
                                   
                 if ($curRes->kind() eq "res" and                   if ($curRes->kind() eq "res" and 
                     $curRes->is_problem() ) {                      $curRes->is_problem() ) {
                     $r->print (" Due: " . localtime($curRes->duedate()));                      $r->print (getDescription($curRes, $part));
                 }                  }
             }              }
         }          }
Line 1024  sub getLinkForResource { Line 1026  sub getLinkForResource {
     return $res->src();      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;  1;
   
 package Apache::lonnavmaps::navmap;  package Apache::lonnavmaps::navmap;
Line 2000  sub OPEN_LATER      { return 0; } Line 2039  sub OPEN_LATER      { return 0; }
 sub OPEN            { return 1; }  sub OPEN            { return 1; }
 sub PAST_DUE        { return 2; }  sub PAST_DUE        { return 2; }
 sub ANSWER_OPEN     { return 3; }  sub ANSWER_OPEN     { return 3; }
   sub NOTHING_SET     { return 4; } 
 sub NETWORK_FAILURE { return 100; }  sub NETWORK_FAILURE { return 100; }
   
 sub getDateStatus {  sub getDateStatus {
Line 2010  sub getDateStatus { Line 2050  sub getDateStatus {
   
     my $now = time();      my $now = time();
   
     my $o = $now - $self->opendate($part);      my $open = $self->opendate($part);
     my $d = $now - $self->duedate($part);      my $due = $self->duedate($part);
     my $a = $now - $self->answerdate($part);      my $answer = $self->answerdate($part);
   
     if ($o < 0) {return $self->OPEN_LATER};      if ($open && $now < $open) {return $self->OPEN_LATER};
     if ($d < 0) {return $self->OPEN};      if ($due && $now < $due) {return $self->OPEN};
     if ($a < 0) {return $self->PAST_DUE};      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;      return $self->ANSWER_OPEN;
 }  }
   
Line 2052  B<Completion Codes> Line 2097  B<Completion Codes>
   
 =cut  =cut
   
 sub NOT_ATTEMPTED         { return 0; }  sub NOT_ATTEMPTED         { return 10; }
 sub INCORRECT             { return 1; }  sub INCORRECT             { return 11; }
 sub INCORRECT_BY_OVERRIDE { return 2; }  sub INCORRECT_BY_OVERRIDE { return 12; }
 sub CORRECT               { return 3; }  sub CORRECT               { return 13; }
 sub CORRECT_BY_OVERRIDE   { return 4; }  sub CORRECT_BY_OVERRIDE   { return 14; }
 sub EXCUSED               { return 5; }  sub EXCUSED               { return 15; }
   
 sub getCompletionStatus {  sub getCompletionStatus {
     my $self = shift;      my $self = shift;
Line 2089  Along with directly returning the date o Line 2134  Along with directly returning the date o
   
 =item * NETWORK_FAILURE: The network has failed and the information is not available.  =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 * CORRECT: For any reason at all, the part is considered correct.
   
 =item * EXCUSED: For any reason at all, the problem is excused.  =item * EXCUSED: For any reason at all, the problem is excused.
Line 2120  sub status { Line 2167  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.      # plus network failure and "no date data".
   
     # Don't colorize on network failure.      if ($completionStatus == NETWORK_FAILURE) { return NETWORK_FAILURE; }
     if ($completionStatus == NETWORK_FAILURE()) { return $self->NETWORK_FAILURE(); }  
   
     # There are a few whole rows we can dispose of:      # There are a few whole rows we can dispose of:
     # If the problem is CORRECT, color it green no matter what      if ($completionStatus == CORRECT ||
     if ($completionStatus == CORRECT() ||          $completionStatus == CORRECT_BY_OVERRIDE ) {
         $completionStatus == CORRECT_BY_OVERRIDE() ) {          return CORRECT(); 
         return $self->CORRECT(); # Return a nice green.      }
   
       # 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 ($dateStatus == NOTHING_SET) {
     if ($completionStatus == EXCUSED()) {          return NOTHING_SET;
         return $self->EXCUSED(); # return a nice blue  
     }      }
   
     # 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 it's Past Due and we didn't bail earlier because it's correct,      if ($dateStatus == PAST_DUE) {
     # color it orange. (Red is sort inappropriate; too drastic a color          return PAST_DUE; 
     # for something the student can't fix.  
     if ($dateStatus == PAST_DUE()) {  
         return $self->PAST_DUE(); # return orange  
     }      }
   
     if ($dateStatus == ANSWER_OPEN()) {      if ($dateStatus == ANSWER_OPEN) {
         return $self->ANSWER_OPEN();          return ANSWER_OPEN;
     }      }
   
     # Now: (incorrect, incorrect_override, not_attempted) x       # Now: (incorrect, incorrect_override, not_attempted) x 
     # (open_later), (open)      # (open_later), (open)
           
     # If it's open later, then don't colorize      if ($dateStatus == OPEN_LATER) {
     if ($dateStatus == OPEN_LATER()) {          return OPEN_LATER;
         return $self->OPEN_LATER();  
     }      }
   
     # If it's WRONG...      # If it's WRONG...
     if ($completionStatus == INCORRECT() || $completionStatus == INCORRECT_BY_OVERRIDE()) {      if ($completionStatus == INCORRECT || $completionStatus == INCORRECT_BY_OVERRIDE) {
         # and there are TRIES LEFT:          # and there are TRIES LEFT:
         if ($self->tries() < $self->maxtries()) {          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      # Otherwise, it's untried and open
     return $self->OPEN(); # Light yellow      return OPEN; 
 }  }
   
 =pod  =pod

Removed from v.1.52  
changed lines
  Added in v.1.53


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>