Diff for /loncom/interface/lonannounce.pm between versions 1.62 and 1.71

version 1.62, 2006/11/29 07:46:39 version 1.71, 2008/09/19 03:27:04
Line 37  use Apache::lonnavmaps(); Line 37  use Apache::lonnavmaps();
 use Apache::lonrss();  use Apache::lonrss();
 use Apache::lonnet;  use Apache::lonnet;
 use HTML::Entities();  use HTML::Entities();
   use LONCAPA qw(:match);
   use DateTime;
   use DateTime::TimeZone;
   
 my %todayhash;  my %todayhash;
 my %showedcheck;  my %showedcheck;
Line 73  sub readcalendar { Line 76  sub readcalendar {
     my $courseid=shift;      my $courseid=shift;
     my $coursenum=$env{'course.'.$courseid.'.num'};      my $coursenum=$env{'course.'.$courseid.'.num'};
     my $coursedom=$env{'course.'.$courseid.'.domain'};      my $coursedom=$env{'course.'.$courseid.'.domain'};
       if ($coursenum eq '' || $coursedom eq '') {
           my %courseinfo=&Apache::lonnet::coursedescription($courseid);
           if ($coursenum eq '' && exists($courseinfo{'num'})) {
               $coursenum = $courseinfo{'num'};
           }
           if ($coursedom eq '' && exists($courseinfo{'domain'})) {
               $coursedom = $courseinfo{'domain'};
           }
       }
   
     my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum);      my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum);
     my %returnhash=();      my %returnhash=();
     foreach my $item (keys(%thiscal)) {      foreach my $item (keys(%thiscal)) {
         unless (($item=~/^error\:/) || ($thiscal{$item}=~/^error\:/)) {          unless (($item=~/^error\:/) || ($thiscal{$item}=~/^error\:/)) {
    $returnhash{$courseid.'@'.$item}=$thiscal{$item};      my ($start,$end)=split('_',$item);
       $returnhash{join("\0",$courseid,$start,$end)}=$thiscal{$item};
         }          }
     }      }
     my $can_see_hidden = ($env{'request.role.adv'} &&      my $can_see_hidden = ($env{'request.role.adv'} &&
Line 87  sub readcalendar { Line 101  sub readcalendar {
     if ($courseid eq $env{'request.course.id'}) {      if ($courseid eq $env{'request.course.id'}) {
  $navmap = Apache::lonnavmaps::navmap->new();   $navmap = Apache::lonnavmaps::navmap->new();
     }      }
     my %resourcedata=  
  &Apache::lonnet::dump('resourcedata',$coursedom,$coursenum);      my $resourcedata=
     foreach my $thiskey (sort keys %resourcedata) {   &Apache::lonnet::get_courseresdata($coursenum,$coursedom);
  if ($resourcedata{$thiskey.'.type'}=~/^date/) {      if (ref($resourcedata) ne 'HASH') {
           return %returnhash;
       } 
       foreach my $thiskey (keys(%$resourcedata)) {
    if ($resourcedata->{$thiskey.'.type'}=~/^date/) {
     my ($course,$middle,$part,$name)=      my ($course,$middle,$part,$name)=
  ($thiskey=~/^(\w+)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);   ($thiskey=~/^(\Q$courseid\E)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
   
     my %data = ( 'section' => &mt('All Students'));      my %data = ( 'section' => &mt('All Students'));
     if ($middle=~/^\[(.*)\]\./) {      if ($middle=~/^\[(.*)\]\./) {
  my $sec=$1;   my $sec=$1;
Line 118  sub readcalendar { Line 137  sub readcalendar {
  }   }
  if (!$can_see_hidden) {   if (!$can_see_hidden) {
     my $res = $navmap->getResourceByUrl($map_url);      my $res = $navmap->getResourceByUrl($map_url);
     if ($res && $res->randomout()) { next; }      if ($res && $res->randomout()) {
    next;
       }
  }   }
  $data{'realm'}=&mt('Folder/Map');   $data{'realm'}=&mt('Folder/Map');
  $data{'url'} = $map_url;   $data{'url'} = $map_url;
Line 128  sub readcalendar { Line 149  sub readcalendar {
  }   }
  if (!$can_see_hidden) {   if (!$can_see_hidden) {
     my $res = $navmap->getBySymb($middle);      my $res = $navmap->getBySymb($middle);
     if ($res && $res->randomout()) { next; }      if ($res && $res->randomout()) {
    next;
       }
  }   }
  $data{'realm'} = &mt('Resource');   $data{'realm'} = &mt('Resource');
  $data{'symb'} = $middle;   $data{'symb'} = $middle;
Line 139  sub readcalendar { Line 162  sub readcalendar {
 # see if accidentally answerdate is before duedate  # see if accidentally answerdate is before duedate
  my $answerkey=$thiskey;   my $answerkey=$thiskey;
  $answerkey=~s/duedate$/answerdate/;   $answerkey=~s/duedate$/answerdate/;
  if ($resourcedata{$thiskey}>$resourcedata{$answerkey}) {   if ($resourcedata->{$thiskey}>$resourcedata->{$answerkey}) {
     $data{'datetype'} = &mt('Due and Answer Available');      $data{'datetype'} = &mt('Due and Answer Available');
  }   }
     }      }
Line 154  sub readcalendar { Line 177  sub readcalendar {
 # see if accidentally answerdate is before duedate  # see if accidentally answerdate is before duedate
  my $duekey=$thiskey;   my $duekey=$thiskey;
  $duekey=~s/answerdate$/duedate/;   $duekey=~s/answerdate$/duedate/;
  if ($resourcedata{$duekey}>$resourcedata{$thiskey}) {   if ($resourcedata->{$duekey}>$resourcedata->{$thiskey}) {
 # forget it  # forget it
     next;      next;
  }    } 
  $data{'datetype'}=&mt('Answer Available');    $data{'datetype'}=&mt('Answer Available'); 
     }      }
     $returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'.      $returnhash{join("\0",$courseid,
     $resourcedata{$thiskey}}=\%data;       $resourcedata->{$thiskey},
        $resourcedata->{$thiskey})}=\%data;
  }   }
     }      }
     return %returnhash;      return %returnhash;
Line 270  sub order { Line 294  sub order {
 }  }
   
 sub nextday {  sub nextday {
     my %th=@_;      my ($tk,%th)=@_;
     $th{'day'}++;      my ($incmonth,$incyear);
       if ($th{'day'} > 27) {
           if ($th{'month'} == 2) {
               if ($th{'day'} == 29) { 
                   $incmonth = 1;
               } elsif ($th{'day'} == 28) {
                   if (!&is_leap_year($tk)) {
                      $incmonth = 1;
                   }
               }
           } elsif (($th{'month'} == 4) || ($th{'month'} == 6) || 
                    ($th{'month'} == 9) || ($th{'month'} == 11)) {
               if ($th{'day'} == 30) {
                   $incmonth = 1;
               }
           } elsif ($th{'day'} == 31) {
               if ($th{'month'} == 12) {
                   $incyear = 1;
               } else {
                   $incmonth = 1;
               }
           }
           if ($incyear) {
               $th{'day'} = 1;
               $th{'month'} = 1;
               $th{'year'}++;
           } elsif ($incmonth) {
               $th{'day'} = 1;
               $th{'month'}++;
           } else {
               $th{'day'}++;
           }
       } else {
           $th{'day'}++;
       }
     return (&Apache::loncommon::maketime(%th),$th{'month'});      return (&Apache::loncommon::maketime(%th),$th{'month'});
 }  }
   
   sub is_leap_year {
       my ($thistime) = @_;
       my ($is_leap,$timezone,$dt);
       $timezone = &Apache::lonlocal::gettimezone();
       eval {
           $dt = DateTime->from_epoch(epoch => $thistime)
                         ->set_time_zone($timezone);
       };
       if (!$@) {
           $is_leap = $dt->is_leap_year;
       }
       return $is_leap;
   }
   
 sub display_msg {  sub display_msg {
     my ($msg) = @_;      my ($msg) = @_;
   
Line 301  sub display_msg { Line 373  sub display_msg {
 sub showday {  sub showday {
     my ($tk,$mode,%allcal)=@_;      my ($tk,$mode,%allcal)=@_;
     my %th=&Apache::loncommon::timehash($tk);      my %th=&Apache::loncommon::timehash($tk);
     my ($nextday,$nextmonth)=&nextday(%th);      my ($nextday,$nextmonth)=&nextday($tk,%th);
     my @outp;      my @outp;
     if ($mode) {      if ($mode) {
  my $oneday=24*3600;   my $oneday=24*3600;
Line 309  sub showday { Line 381  sub showday {
  $nextday+=$oneday;   $nextday+=$oneday;
     }      }
     foreach my $item (keys(%allcal)) {      foreach my $item (keys(%allcal)) {
  my ($course,$startdate,$enddate)=($item=~/^(\w+)\@(\d+)\_(\d+)$/);   my ($courseid,$startdate,$enddate)= split("\0",$item);
         if (($startdate<$nextday) && ($enddate>=$tk))  {   if (($startdate<$nextday) && ($enddate>=$tk))  {
     push(@outp,[$course,$startdate,$enddate,$allcal{$item}]);      push(@outp,[$courseid,$startdate,$enddate,$allcal{$item}]);
         }          }
     }      }
     unless ($mode) {      unless ($mode) {
Line 375  sub output_ics_file { Line 447  sub output_ics_file {
     $r->print("PRODID:-//LONCAPA//LONCAPA Calendar Output//EN$crlf");      $r->print("PRODID:-//LONCAPA//LONCAPA Calendar Output//EN$crlf");
     my %allcal=&get_all_calendars();      my %allcal=&get_all_calendars();
     foreach my $event (keys(%allcal)) {      foreach my $event (keys(%allcal)) {
  my ($courseid,$startdate,$enddate)=($event=~/^(\w+)\@(\d+)\_(\d+)$/);   my ($courseid,$startdate,$enddate)= split('\0',$event);
  my $uid=$event;   my $uid=$event;
  $uid=~s/[\W\_]/-/gs;   $uid=~s/[\W\_]/-/gs;
  $uid.='@loncapa';   $uid.='@loncapa';
Line 393  sub output_ics_file { Line 465  sub output_ics_file {
     $r->print("END:VCALENDAR$crlf");      $r->print("END:VCALENDAR$crlf");
 }  }
   
   sub show_timezone {
       my $tzone = &Apache::lonlocal::gettimezone();
       my $dt = DateTime->now();
       my $tz = DateTime::TimeZone->new( name => $tzone );
       return &mt('([_1] time zone)',$tz->short_name_for_datetime($dt));
   }
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     if ($r->uri=~/\.(ics|ical)$/) {      if ($r->uri=~/\.(ics|ical)$/) {
Line 424  sub handler { Line 503  sub handler {
  '&element='.$env{'form.element'};   '&element='.$env{'form.element'};
 # --------------------------------------------- Find out first day of the month  # --------------------------------------------- Find out first day of the month
   
     my %firstday=&Apache::loncommon::timehash(      my $tk = &Apache::loncommon::maketime( 'day' => 1,
        &Apache::loncommon::maketime( 'day' => 1, 'month'=> $month,                                             'month'=> $month,
                                      'year' => $year, 'hours' => 0,                                             'year' => $year, 
      'minutes' => 0, 'seconds' => 0,                                             'hour' => 0,
                                      'dlsav' => -1 ));             'minute' => 0, 
                                              'second' => 0);
       my %firstday = &Apache::loncommon::timehash($tk);
     my $weekday=$firstday{'weekday'};      my $weekday=$firstday{'weekday'};
   
 # ------------------------------------------------------------ Print the screen  # ------------------------------------------------------------ Print the screen
     my $js = <<ENDDOCUMENT;      my $js = <<ENDDOCUMENT;
 <script type="text/javascript">  <script type="text/javascript">
Line 494  Post announcements to the system login a Line 576  Post announcements to the system login a
 Check machines:<br />  Check machines:<br />
 SERVERANNOUNCE  SERVERANNOUNCE
 # list servers  # list servers
     foreach my $host (sort(keys(%Apache::lonnet::hostname))) {      my %hostname = &Apache::lonnet::all_hostnames();
  if (&Apache::lonnet::allowed('psa',$Apache::lonnet::hostdom{$host})) {      foreach my $host (sort(keys(%hostname))) {
    if (&Apache::lonnet::allowed('psa',
        &Apache::lonnet::host_domain($host))) {
     $r->print ('<br /><label><input type="checkbox" name="postto_'.$host.'" /> '.      $r->print ('<br /><label><input type="checkbox" name="postto_'.$host.'" /> '.
        $host.' <tt>'.$Apache::lonnet::hostname{$host}.'</tt> '.         $host.' <tt>'.$hostname{$host}.'</tt> '.
        '</label><a href="http://'.$Apache::lonnet::hostname{$host}.         '</label><a href="http://'.$hostname{$host}.
        '/announcement.txt" target="annowin">current</a>');         '/announcement.txt?time='.time.'" target="annowin">current</a>');
  }   }
     }      }
     $r->print(      $r->print(
Line 561  SERVERANNOUNCE Line 645  SERVERANNOUNCE
       &mt('June'),&mt('July'),&mt('August'),        &mt('June'),&mt('July'),&mt('August'),
                       &mt('September'),&mt('October'),                        &mt('September'),&mt('October'),
                       &mt('November'),&mt('December'))[$month].' '.                        &mt('November'),&mt('December'))[$month].' '.
               $year.'</h1>');                $year.' '.&show_timezone().'</h1>');
 # Reached the end of times, give up  # Reached the end of times, give up
     if (($year<1970) || ($year>2037)) {      if (($year<1970) || ($year>2037)) {
  $r->print('<h3>No calendar available for this date.</h3>'.   $r->print('<h3>No calendar available for this date.</h3>'.
Line 575  SERVERANNOUNCE Line 659  SERVERANNOUNCE
     if ($env{'form.pickdate'} eq 'yes') {      if ($env{'form.pickdate'} eq 'yes') {
  $class .= " LC_calendar_pickdate";   $class .= " LC_calendar_pickdate";
     }      }
   # ------------------------------------------------ Determine first day of a week
       my $datelocale =  &Apache::lonlocal::getdatelocale();
       my $days_in_week = 7;
       my $startweek = 0;
       if (ref($datelocale)) {
           $startweek = $datelocale->first_day_of_week();
           if ($startweek == $days_in_week)  { $startweek = 0; }
       }
       my @days = ('Sun','Mon','Tue','Wed','Thu','Fri','Sat');
       my @localdays;
       if ($startweek == 0) {
           @localdays = @days;
       } else {
           my $endday = $days_in_week - $startweek;
           for (my $i=0; $i<$days_in_week; $i++) {
               if ($i < $endday) {
                   $localdays[$i] = $days[$i+$startweek];
               } else {
                   $localdays[$i] = $days[$i-$endday];
               }
           }
       }
   
   # ----------------------------------------------------------- Weekday in locale
       my $loc_weekday = $weekday - $startweek;
       if ($loc_weekday < 0) {
           $loc_weekday += $days_in_week; 
       }
   
     $r->print(      $r->print(
  '<a href="/adm/announcements?month='.$pm.'&year='.$py.   '<a href="/adm/announcements?month='.$pm.'&year='.$py.
  ($pickdatemode?$pickinfo:'').'">'.&mt('Previous Month').'</a> '.   ($pickdatemode?$pickinfo:'').'">'.&mt('Previous Month').'</a> '.
Line 583  SERVERANNOUNCE Line 696  SERVERANNOUNCE
  '&nbsp;&nbsp;&nbsp;<a href="/adm/announcements?month='.$todayhash{'month'}.   '&nbsp;&nbsp;&nbsp;<a href="/adm/announcements?month='.$todayhash{'month'}.
  '&year='.$todayhash{'year'}.   '&year='.$todayhash{'year'}.
  ($pickdatemode?$pickinfo:'').'">'.&mt('Current Month').'</a><p>'.   ($pickdatemode?$pickinfo:'').'">'.&mt('Current Month').'</a><p>'.
         '<table class="'.$class.'" cols="7" rows="5"><tr>          '<table class="'.$class.'" cols="7" rows="5"><tr>');
 <th>'.&mt('Sun').'</th>      for (my $i=0; $i<@localdays; $i++) {
 <th>'.&mt('Mon').'</th>          $r->print('<th>'.&mt($localdays[$i]).'</th>');
 <th>'.&mt('Tue').'</th>      }
 <th>'.&mt('Wed').'</th>      $r->print('</tr>');
 <th>'.&mt('Thu').'</th>  
 <th>'.&mt('Fri').'</th>  
 <th>'.&mt('Sat').'</th></tr>');  
   
     my $tk=&Apache::loncommon::maketime(%firstday);      my $tk=&Apache::loncommon::maketime(%firstday);
     my $outp;      my $outp;
Line 598  SERVERANNOUNCE Line 708  SERVERANNOUNCE
   
 # ---------------------------------------------------------------- Actual table  # ---------------------------------------------------------------- Actual table
     $r->print('<tr>');      $r->print('<tr>');
     for (my $i=0;$i<$weekday;$i++) { $r->print(&emptycell); }      for (my $i=0;$i<$loc_weekday;$i++) { $r->print(&emptycell); }
     for (my $i=$weekday;$i<=6;$i++) {       for (my $i=$loc_weekday;$i<=6;$i++) {
         ($tk,$nm,$outp)=&showday($tk,0,%allcal);          ($tk,$nm,$outp)=&showday($tk,0,%allcal);
         $r->print($outp);          $r->print($outp);
     }      }
     $r->print('</tr>');      $r->print('</tr>');
   
       my $lastrow = 0;
       my $lastday = 0;
     for (my $k=0;$k<=4;$k++) {      for (my $k=0;$k<=4;$k++) {
         $r->print('<tr>');          if (!$lastrow) {
         for (my $i=0;$i<=6;$i++) {              $r->print('<tr>');
             ($tk,$nm,$outp)=&showday($tk,0,%allcal);              for (my $i=0;$i<=6;$i++) {
             if ($month!=$nm) { $outp=&emptycell; }                  if ($lastday) {
             $r->print($outp);                      $outp = &emptycell();
                   } else {
                       my $currtk = $tk;
                       ($tk,$nm,$outp)=&showday($tk,0,%allcal);
                       if ($month!=$nm) { $lastday = 1; }
                   }
                   $r->print($outp);
               }
               if ($lastday) {
                   $lastrow = 1;
               }
               $r->print('</tr>');
         }          }
         $r->print('</tr>');  
     }      }
 # ------------------------------------------------------------------- End table  # ------------------------------------------------------------------- End table
     $r->print('</table>');      $r->print('</table>');

Removed from v.1.62  
changed lines
  Added in v.1.71


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.