Diff for /loncom/interface/lonnavmaps.pm between versions 1.72 and 1.73

version 1.72, 2002/10/11 14:56:43 version 1.73, 2002/10/11 18:39:55
Line 45  use strict; Line 45  use strict;
 use Apache::Constants qw(:common :http);  use Apache::Constants qw(:common :http);
 use Apache::lonnet();  use Apache::lonnet();
 use Apache::loncommon();  use Apache::loncommon();
 use HTML::TokeParser;  
 use GDBM_File;  use GDBM_File;
   use POSIX qw (floor strftime);
   
 # -------------------------------------------------------------- Module Globals  # -------------------------------------------------------------- Module Globals
 my %hash;  my %hash;
Line 843  sub new_handle { Line 843  sub new_handle {
     $r->rflush();      $r->rflush();
     if ($navmap->{LAST_CHECK}) {      if ($navmap->{LAST_CHECK}) {
         $r->print('<img src="/adm/lonMisc/chat.gif"> New discussion since '.          $r->print('<img src="/adm/lonMisc/chat.gif"> New discussion since '.
                   timeToHumanString($navmap->{LAST_CHECK}).                    strftime("%A, %b %e at %I:%M %P", localtime($navmap->{LAST_CHECK})).
                   '<br><img src="/adm/lonMisc/feedback.gif"> New message (click to open)<p>');                     '<br><img src="/adm/lonMisc/feedback.gif"> New message (click to open)<p>'); 
     } else {      } else {
         $r->print('<img src="/adm/lonMisc/chat.gif"> Discussions'.          $r->print('<img src="/adm/lonMisc/chat.gif"> Discussions'.
Line 1270  sub getDescription { Line 1270  sub getDescription {
         return "Not currently assigned.";          return "Not currently assigned.";
     }      }
     if ($status == $res->OPEN_LATER) {      if ($status == $res->OPEN_LATER) {
         return "Opens: " . timeToHumanString($res->opendate($part));          return "Open " . timeToHumanString($res->opendate($part));
     }      }
     if ($status == $res->OPEN) {      if ($status == $res->OPEN) {
         if ($res->duedate()) {          if ($res->duedate()) {
             return "Due: $status " . timeToHumanString($res->duedate($part));              return "Due " . timeToHumanString($res->duedate($part));
         } else {          } else {
             return "Open, no due date";              return "Open, no due date";
         }          }
     }      }
     if ($status == $res->PAST_DUE_ANSWER_LATER) {      if ($status == $res->PAST_DUE_ANSWER_LATER) {
         return "Answer opens: " . timeToHumanString($res->answerdate($part));          return "Answer open " . timeToHumanString($res->answerdate($part));
     }      }
     if ($status == $res->PAST_DUE_NO_ANSWER) {      if ($status == $res->PAST_DUE_NO_ANSWER) {
         return "Was Due: " . timeToHumanString($res->duedate($part));          return "Was due " . timeToHumanString($res->duedate($part));
     }      }
     if ($status == $res->ANSWER_OPEN) {      if ($status == $res->ANSWER_OPEN) {
         return "Answer available";          return "Answer available";
Line 1299  sub getDescription { Line 1299  sub getDescription {
         my $maxtries = $res->maxtries();          my $maxtries = $res->maxtries();
         my $triesString = "($tries of $maxtries tries used)";          my $triesString = "($tries of $maxtries tries used)";
         if ($res->duedate()) {          if ($res->duedate()) {
             return "Due: $status " . timeToHumanString($res->duedate($part)) .              return "Due " . timeToHumanString($res->duedate($part)) .
                 " $triesString";                  " $triesString";
         } else {          } else {
             return "No due date $triesString";              return "No due date $triesString";
Line 1311  sub advancedUser { Line 1311  sub advancedUser {
     return $ENV{'user.adv'};      return $ENV{'user.adv'};
 }  }
   
 # I want to change this into something more human-friendly. For  
 # now, this is a simple call to localtime. The final function  # timeToHumanString takes a time number and converts it to a
 # probably belongs in loncommon.  # human-readable representation, meant to be used in the following
   # manner:
   # print "Due $timestring"
   # print "Open $timestring"
   # print "Answer available $timestring"
   # Very, very, very, VERY English-only... goodness help a localizer on
   # this func...
 sub timeToHumanString {  sub timeToHumanString {
     my ($time) = @_;      my ($time) = @_;
     # zero, '0' and blank are bad times      # zero, '0' and blank are bad times
     if ($time) {      if (!$time) {
         return localtime($time);          return 'never';
     } else {      }
         return 'Never';  
       my $now = time();
   
       my @time = localtime($time);
       my @now = localtime($now);
   
       # Positive = future
       my $delta = $time - $now;
   
       my $minute = 60;
       my $hour = 60 * $minute;
       my $day = 24 * $hour;
       my $week = 7 * $day;
       my $inPast = 0;
   
       # Logic in comments:
       # Is it now? (extremely unlikely)
       if ( $delta == 0 ) {
           return "this instant";
       }
   
       if ($delta < 0) {
           $inPast = 1;
           $delta = -$delta;
       }
   
       # Is it in the future?
       if ( $delta > 0 ) {
           # Is it less then a minute away?
           my $tense = $inPast ? " ago" : "";
           my $prefix = $inPast ? "" : "in ";
           if ( $delta < $minute ) {
               if ($delta == 1) { return "${prefix}1 second$tense"; }
               return "$prefix$delta seconds$tense";
           }
   
           # Is it less then an hour away?
           if ( $delta < $hour ) {
               # If so, use minutes
               my $minutes = floor($delta / 60);
               if ($minutes == 1) { return "${prefix}1 minute$tense"; }
               return "$prefix$minutes minutes$tense";
           }
           
           # Is it less then 24 hours away? If so,
           # display hours + minutes
           if ( $delta < $hour * 24) {
               my $hours = floor($delta / $hour);
               my $minutes = floor(($delta % $hour) / $minute);
               my $hourString = "$hours hours";
               my $minuteString = ", $minutes minutes";
               if ($hours == 1) {
                   $hourString = "1 hour";
               }
               if ($minutes == 1) {
                   $minuteString = ", 1 minute";
               }
               if ($minutes == 0) {
                   $minuteString = "";
               }
               return "$prefix$hourString$minuteString$tense";
           }
   
           # Less then 5 days away, display day of the week and
           # HH:MM
           if ( $delta < $day * 5 ) {
               my $timeStr = strftime("%A at %I:%M %P", localtime($time));
               $timeStr =~ s/12:00 am/midnight/;
               $timeStr =~ s/12:00 pm/noon/;
               return ($inPast ? "last " : "next ") .
                   $timeStr;
           }
           
           # Is it this year?
           if ( $time[5] == $now[5]) {
               # Return on Month Day, HH:MM meridian
               my $timeStr = strftime("on %A, %b %e at %I:%M %P", localtime($time));
               $timeStr =~ s/12:00 am/midnight/;
               $timeStr =~ s/12:00 pm/noon/;
               return $timeStr;
           }
   
           # Not this year, so show the year
           my $timeStr = strftime("on %A, %b %e %G at %I:%M %P", localtime($time));
           $timeStr =~ s/12:00 am/midnight/;
           $timeStr =~ s/12:00 pm/noon/;
           return $timeStr;
     }      }
 }  }
   

Removed from v.1.72  
changed lines
  Added in v.1.73


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