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

version 1.15, 2003/06/18 20:06:29 version 1.62, 2006/11/29 07:46:39
Line 32  use strict; Line 32  use strict;
 use Apache::Constants qw(:common);  use Apache::Constants qw(:common);
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonhtmlcommon();  use Apache::lonhtmlcommon();
   use Apache::lonlocal;
   use Apache::lonnavmaps();
   use Apache::lonrss();
   use Apache::lonnet;
 use HTML::Entities();  use HTML::Entities();
   
 my %todayhash;  my %todayhash;
   my %showedcheck;
   
 sub editfield {  sub editfield {
     my ($r,$start,$end,$text)=@_;      my ($r,$start,$end,$text)=@_;
Line 45  sub editfield { Line 50  sub editfield {
     my $enddateform = &Apache::lonhtmlcommon::date_setter('anno',      my $enddateform = &Apache::lonhtmlcommon::date_setter('anno',
                                                           'enddate',                                                            'enddate',
                                                           $end);                                                            $end);
       my $help=&Apache::loncommon::help_open_menu('Calendar Add Announcement','Calendar_Add_Announcement',274,'Communication Tools');
       my %lt=&Apache::lonlocal::texthash('post' => 'Post Announcement',
          'start' => 'Starting date',
          'end' => 'Ending date',
          'incrss' => 'Include in course RSS newsfeed');
   
     $r->print(<<ENDFORM);      $r->print(<<ENDFORM);
   $help
 <form name="anno" method="post">  <form name="anno" method="post">
 <input type="hidden" value=''          name="action"      >  <input type="hidden" value='' name="action" />
 <table><tr><td>Starting date:</td><td>$startdateform</td></tr>  <table><tr><td>$lt{'start'}:</td><td>$startdateform</td></tr>
 <tr><td>Ending date:</td><td>$enddateform</td></tr></table>  <tr><td>$lt{'end'}:</td><td>$enddateform</td></tr></table>
 <textarea name="msg" rows="4" cols="60">$text</textarea>  <textarea name="msg" rows="4" cols="60">$text</textarea>
 <input type="button" onClick="trysubmit()" value="Post Announcement"><hr>  <br />
   <label><input type="checkbox" name="rsspost" /> $lt{'incrss'}</label>
   <br /><input type="button" onClick="trysubmit()" value="$lt{'post'}" /><hr />
 ENDFORM  ENDFORM
 }  }
   
 sub readcalendar {  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'};
     my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum);      my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum);
     my %returnhash=();      my %returnhash=();
     foreach (keys %thiscal) {      foreach my $item (keys(%thiscal)) {
         unless (($_=~/^error\:/) || ($thiscal{$_}=~/^error\:/)) {          unless (($item=~/^error\:/) || ($thiscal{$item}=~/^error\:/)) {
    $returnhash{$courseid.'@'.$_}=$thiscal{$_};     $returnhash{$courseid.'@'.$item}=$thiscal{$item};
         }          }
     }      }
       my $can_see_hidden = ($env{'request.role.adv'} &&
     ($courseid eq $env{'request.course.id'}));
       
       my $navmap;
       if ($courseid eq $env{'request.course.id'}) {
    $navmap = Apache::lonnavmaps::navmap->new();
       }
       my %resourcedata=
    &Apache::lonnet::dump('resourcedata',$coursedom,$coursenum);
       foreach my $thiskey (sort keys %resourcedata) {
    if ($resourcedata{$thiskey.'.type'}=~/^date/) {
       my ($course,$middle,$part,$name)=
    ($thiskey=~/^(\w+)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
       my %data = ( 'section' => &mt('All Students'));
       if ($middle=~/^\[(.*)\]\./) {
    my $sec=$1;
    # if we have a section don't show ones that aren't ours
    if ($env{'request.course.sec'} &&
       $env{'request.course.sec'} ne $sec) { next; }
    # if a student without a section don't show any section ones
    if (!$env{'request.role.adv'} &&
       !$env{'request.course.sec'}) { next; }
    $data{'section'}=&mt('Group/Section').': '.$1;
    $middle=~s/^\[(.*)\]\.//;
       }
       $middle=~s/\.$//;
       $data{'realm'}=&mt('All Resources');
       if ($middle eq '___(all)') {
    if (!$can_see_hidden && !$navmap) {
       next;
    }
       } elsif ($middle=~/^(.+)\_\_\_\(all\)$/) {
    my $map_url=$1;
    if (!$can_see_hidden && !$navmap) {
       next;
    }
    if (!$can_see_hidden) {
       my $res = $navmap->getResourceByUrl($map_url);
       if ($res && $res->randomout()) { next; }
    }
    $data{'realm'}=&mt('Folder/Map');
    $data{'url'} = $map_url;
       } elsif ($middle) {
    if (!$can_see_hidden && !$navmap) {
       next;
    }
    if (!$can_see_hidden) {
       my $res = $navmap->getBySymb($middle);
       if ($res && $res->randomout()) { next; }
    }
    $data{'realm'} = &mt('Resource');
    $data{'symb'} = $middle;
       }
       $data{'datetype'} = $name;
       if ($name eq 'duedate') { 
    $data{'datetype'} = &mt('Due'); 
   # see if accidentally answerdate is before duedate
    my $answerkey=$thiskey;
    $answerkey=~s/duedate$/answerdate/;
    if ($resourcedata{$thiskey}>$resourcedata{$answerkey}) {
       $data{'datetype'} = &mt('Due and Answer Available');
    }
       }
       if ($name eq 'opendate' 
    || $name eq 'contentopen' ) {
    $data{'datetype'}=&mt('Opening');
       }
       if ($name eq 'contentclose') {
    $data{'datetype'}=&mt('Closing');
       }
       if ($name eq 'answerdate') {
   # see if accidentally answerdate is before duedate
    my $duekey=$thiskey;
    $duekey=~s/answerdate$/duedate/;
    if ($resourcedata{$duekey}>$resourcedata{$thiskey}) {
   # forget it
       next;
    } 
    $data{'datetype'}=&mt('Answer Available'); 
       }
       $returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'.
       $resourcedata{$thiskey}}=\%data;
    }
       }
     return %returnhash;      return %returnhash;
 }  }
   
 sub emptycell {  sub emptycell {
     return '<td bgcolor="#AAAAAA">&nbsp;</td>';      return '<td class="LC_calendar_day_empty">&nbsp;</td>';
 }  }
   
 sub normalcell {  sub normalcell {
     my ($day,$month,$year,$text)=@_;      my ($day,$month,$year,$items_ref)=@_;
     my $output='';      my $output;
     foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) {      my @items=&order($items_ref);
         if ($_) {      foreach my $item (@items) {
     my ($courseid,$start,$end,@msg)=split(/\@/,$_);          if ($item) {
             my $msg=join('@',@msg);      my ($courseid,$start,$end,$msg)=@$item;
             my $fullmsg=$ENV{'course.'.$courseid.'.description'}.      my $internalflag= (ref($msg)) ? 1 : 0;
  ', '.localtime($start).' - '.localtime($end).': '.$msg;      $msg = &display_msg($msg);
             if ($courseid eq $ENV{'request.course.id'}) {              my $fullmsg=&mt('Calendar Announcement for ').$env{'course.'.$courseid.'.description'}.
               if (&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) {   '\n'.&Apache::lonlocal::locallocaltime($start);
       if ($start!=$end) {
    $fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end);
       }
       $fullmsg.=':\n'.$msg;
       $fullmsg=~s/[\n\r]/\\n/gs;
               $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\'');
               $fullmsg=~s/&/\\&/g;
       my $short_msg = substr($msg,0,20).((length($msg) > 20)?'...':'');
       if (defined($output)) { $output.='<br />'; }
               if ($courseid eq $env{'request.course.id'}) {
                 if ((&Apache::lonnet::allowed('srm',$env{'request.course.id'}))
                  && (!$showedcheck{$start.'_'.$end})
          && ($env{'form.pickdate'} ne 'yes')
          && (!$internalflag)) {
                $output.='<input type="checkbox" name="remove_'.$start.'_'.                 $output.='<input type="checkbox" name="remove_'.$start.'_'.
    $end.'">';     $end.'">';
                  $showedcheck{$start.'_'.$end}=1;
       }        }
     }      }
             $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\'');  
             $fullmsg=~s/&/\\&/g;  
             $output.='<a href="javascript:alert('."'$fullmsg'".')">'.              $output.='<a href="javascript:alert('."'$fullmsg'".')">'.
        substr($msg,0,20).'...</a><br />';         $short_msg.'</a>';
        }         }
     }      }
     return '<td'.      return '<td class="LC_calendar_day'.
  ((($day eq $todayhash{'day'}) &&   ((($day eq $todayhash{'day'}) &&
           ($month eq $todayhash{'month'}) &&            ($month eq $todayhash{'month'}) &&
           ($year eq $todayhash{'year'}))?' bgcolor="#FFFF00"':'').            ($year eq $todayhash{'year'}))?'_current':'').
            '><b>'.$day.'</b><br>'.$output.'</td>';             '" ><b>'.&picklink($day,$day,$month,$year).'</b><br />'.$output.'</td>';
 }  }
   
 sub plaincell {  sub plaincell {
     my ($text)=@_;      my ($items_ref)=@_;
     my $output='';      my $output;
     foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) {      my @items=&order($items_ref);
         if ($_) {      foreach my $item (@items) {
     my ($courseid,$start,$end,@msg)=split(/\@/,$_);          if (ref($item)) {
             my $msg=join('@',@msg);      my ($courseid,$start,$end,$msg)=@$item;
             my $fullmsg=$ENV{'course.'.$courseid.'.description'}.              my $fullmsg=&mt('Calendar Announcement for ').$env{'course.'.$courseid.'.description'}.
  ', '.localtime($start).' - '.localtime($end).': '.$msg;   '\n'.&Apache::lonlocal::locallocaltime($start);
       if ($start!=$end) {
    $fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end);
       }
       $msg = &display_msg($msg);
       $fullmsg.=':\n'.$msg;
        $fullmsg=~s/[\n\r]/\\n/gs;
             $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\'');              $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\'');
             $fullmsg=~s/&/\\&/g;              $fullmsg=~s/&/\\&/g;
       my $short_msg = substr($msg,0,80).((length($msg) > 80)?'...':'');
       if (defined($output)) { $output.='<br />'; }
             $output.='<a href="javascript:alert('."'$fullmsg'".')">'.              $output.='<a href="javascript:alert('."'$fullmsg'".')">'.
        substr($msg,0,40).'...</a><br />';         $short_msg.'</a>';
        }         }
     }      }
     return $output;      return $output;
 }  }
   
 sub listcell {  sub listcell {
     my ($text)=@_;      my ($items_ref)=@_;
     my $output='';      my $output='';
     foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) {      my @items=&order($items_ref);
         if ($_) {      foreach my $item (@items) {
     my ($courseid,$start,$end,@msg)=split(/\@/,$_);          if (ref($item)) {
             my $msg=join('@',@msg);      my ($courseid,$start,$end,$msg)=@$item;
             my $fullmsg=localtime($start).' to '.localtime($end).':<br /><b>'.      my $fullmsg=&Apache::lonlocal::locallocaltime($start);
                $msg.'</b>';      if ($start!=$end) {
    $fullmsg.=&mt(' to ').
       &Apache::lonlocal::locallocaltime($end);
       }
               $fullmsg.=':<br /><b>'.&display_msg($msg).'</b>';
             $output.='<li>'.$fullmsg.'</li>';              $output.='<li>'.$fullmsg.'</li>';
        }         }
     }      }
     return $output;      return $output;
 }  }
   
   sub order {
       my ($items)=@_;
       return sort {
    my ($astart,$aend)=$a->[1,2];
    my ($bstart,$bend)=$b->[1,2];
    if ($astart != $bstart) {
       return $astart <=> $bstart;
    }
    return $aend <=> $bend;
       } @$items;
   }
   
 sub nextday {  sub nextday {
     my %th=@_;      my %th=@_;
     $th{'day'}++;      $th{'day'}++;
     return (&Apache::loncommon::maketime(%th),$th{'month'});      return (&Apache::loncommon::maketime(%th),$th{'month'});
 }  }
   
   sub display_msg {
       my ($msg) = @_;
   
       # if it's not a ref, it's an instructor provided message
       return $msg if (!ref($msg));
   
       my $output = $msg->{'datetype'}. ': '.$msg->{'realm'};
       if (exists($msg->{'url'})) {
    my $displayurl=&Apache::lonnet::gettitle($msg->{'url'});
    if ($msg->{'url'}!~/\Q$displayurl\E$/) {
       $output .= ' - '.$displayurl;
    }
       }
       if (exists($msg->{'symb'})) {
    my $displaysymb=&Apache::lonnet::gettitle($msg->{'symb'});
    if ($msg->{'symb'}!~/\Q$displaysymb\E$/) {
       $output .= ' - '.$displaysymb;
    }
       }
       $output .= ' ('.$msg->{'section'}.') ';
       return $output;
   }
   
 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(%th);
     my $outp='';      my @outp;
     my $oneday=24*3600;      if ($mode) {
     foreach (keys %allcal) {   my $oneday=24*3600;
  my ($course,$startdate,$enddate)=($_=~/^(\w+)\@(\d+)\_(\d+)$/);   $tk-=$oneday;
         if (($startdate<$nextday) && ($enddate>$tk))  {   $nextday+=$oneday;
     $outp.='___&&&___'.$course.'@'.$startdate.'@'.$enddate.'@'.      }
             $allcal{$_};      foreach my $item (keys(%allcal)) {
    my ($course,$startdate,$enddate)=($item=~/^(\w+)\@(\d+)\_(\d+)$/);
           if (($startdate<$nextday) && ($enddate>=$tk))  {
       push(@outp,[$course,$startdate,$enddate,$allcal{$item}]);
         }          }
     }      }
     unless ($mode) {      unless ($mode) {
        return ($nextday,$nextmonth,&normalcell(         return ($nextday,$nextmonth,&normalcell(
                $th{'day'},$th{'month'},$th{'year'},$outp));                 $th{'day'},$th{'month'},$th{'year'},\@outp));
    } elsif ($outp) {     } elsif (@outp) {
        if ($mode==1) {         if ($mode==1) {
           return '<br />'.&plaincell($outp);            return '<br />'.&plaincell(\@outp);
       } else {        } else {
           return '<ul>'.&listcell($outp).'</ul>';            return '<ul>'.&listcell(\@outp).'</ul>';
       }        }
    } else {     } else {
        return '';         return '';
    }     }
 }  }
   
   sub picklink {
       my ($text,$day,$month,$year)=@_;
       if ($env{'form.pickdate'} eq 'yes') {
    return '<a href="javascript:dialin('.$day.','.$month.','.$year.')">'.
       $text.'</a>';
       } else {
    return $text;
       }
   }
   
   sub dialscript {
       return (<<ENDDIA);
   <script language="Javascript">
   function dialin(day,month,year) {
    opener.document.$env{'form.formname'}.$env{'form.element'}\_year.value=year;
       var slct=opener.document.$env{'form.formname'}.$env{'form.element'}\_month;
       var i;
       for (i=0;i<slct.length;i++) {
           if (slct.options[i].value==month) { slct.selectedIndex=i; }
       }
       opener.document.$env{'form.formname'}.$env{'form.element'}\_day.value=day;
       opener.$env{'form.element'}\_checkday();
       self.close();
   }
   </script>
   ENDDIA
   }
   # ----------------------------------------------------- Summarize all calendars
   sub get_all_calendars {
       my %allcal=();
       my %courses = &Apache::loncommon::findallcourses();
       foreach my $course (sort(keys(%courses))) {
    %allcal=(%allcal,&readcalendar($course));
       }
       return %allcal;
   }
   
   sub output_ics_file {
       my ($r)=@_;
   # RFC 2445 wants CRLF
       my $crlf="\015\012";
   # Header
       $r->print("BEGIN:VCALENDAR$crlf");
       $r->print("VERSION:2.0$crlf");
       $r->print("PRODID:-//LONCAPA//LONCAPA Calendar Output//EN$crlf");
       my %allcal=&get_all_calendars();
       foreach my $event (keys(%allcal)) {
    my ($courseid,$startdate,$enddate)=($event=~/^(\w+)\@(\d+)\_(\d+)$/);
    my $uid=$event;
    $uid=~s/[\W\_]/-/gs;
    $uid.='@loncapa';
    my $summary=&display_msg($allcal{$event});
    $summary=~s/\s+/ /gs;
           $summary=$env{'course.'.$courseid.'.description'}.': '.$summary;
    $r->print("BEGIN:VEVENT$crlf");
    $r->print("DTSTART:".&Apache::loncommon::utc_string($startdate).$crlf);
    $r->print("DTEND:".&Apache::loncommon::utc_string($enddate).$crlf);
    $r->print("SUMMARY:$summary$crlf");
    $r->print("UID:$uid$crlf");
    $r->print("END:VEVENT$crlf");
       }
   # Footer
       $r->print("END:VCALENDAR$crlf");
   }
   
 sub handler {  sub handler {
     my $r = shift;      my $r = shift;
     $r->content_type('text/html');      if ($r->uri=~/\.(ics|ical)$/) {
           &Apache::loncommon::content_type($r,'text/calendar');
    &output_ics_file($r);
    return OK;
       }
       &Apache::loncommon::content_type($r,'text/html');
     $r->send_http_header;      $r->send_http_header;
     return OK if $r->header_only;      return OK if $r->header_only;
   
 # ---------------------------------------------------------- Get time right now  # ---------------------------------------------------------- Get time right now
     my $today=time;      my $today=time;
     %todayhash=&Apache::loncommon::timehash($today);      %todayhash=&Apache::loncommon::timehash($today);
   # ----------------------------------------------------------------- Check marks
       undef(%showedcheck);
 # ---------------------------------------------------------- Get month and year  # ---------------------------------------------------------- Get month and year
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
                                             ['month','year']);                               ['month','year','pickdate','formname','element']);
 # --------------------------------------------------- Decide what month to show  # --------------------------------------------------- Decide what month to show
     my $year=$todayhash{'year'};      my $year=$todayhash{'year'};
     if ($ENV{'form.year'}) { $year=$ENV{'form.year'}; }      if ($env{'form.year'}) { $year=$env{'form.year'}; }
     my $month=$todayhash{'month'};      my $month=$todayhash{'month'};
     if ($ENV{'form.month'}) { $month=$ENV{'form.month'}; }      if ($env{'form.month'}) { $month=$env{'form.month'}; }
   
   # ---------------------------------------------- See if we are in pickdate mode
       my $pickdatemode=($env{'form.pickdate'} eq 'yes');
       my $pickinfo='&pickdate=yes&formname='.$env{'form.formname'}.
    '&element='.$env{'form.element'};
 # --------------------------------------------- Find out first day of the month  # --------------------------------------------- Find out first day of the month
   
     my %firstday=&Apache::loncommon::timehash(      my %firstday=&Apache::loncommon::timehash(
        &Apache::loncommon::maketime( 'day' => 1, 'month'=> $month,         &Apache::loncommon::maketime( 'day' => 1, 'month'=> $month,
                                      'year' => $year, 'hours' => 0,                                       'year' => $year, 'hours' => 0,
      'minutes' => 0, 'seconds' => 0,       'minutes' => 0, 'seconds' => 0,
                                      'dlsav' => $todayhash{'dlsav'} ));                                       'dlsav' => -1 ));
     my $weekday=$firstday{'weekday'};      my $weekday=$firstday{'weekday'};
 # ------------------------------------------------------------ Print the screen  # ------------------------------------------------------------ Print the screen
       my $js = <<ENDDOCUMENT;
     $r->print(<<ENDDOCUMENT);  <script type="text/javascript">
 <html>  
 <head>  
 <title>The LearningOnline Network with CAPA</title>  
 <script>  
   
     function trysubmit() {      function trysubmit() {
         document.anno.action.value="new";          document.anno.action.value="new";
Line 212  sub handler { Line 444  sub handler {
  document.anno.submit();   document.anno.submit();
     }      }
 </script>  </script>
 </head>  
 ENDDOCUMENT  ENDDOCUMENT
     $r->print(&Apache::loncommon::bodytag("Announcements and Calendar"));  
       if ($pickdatemode) {
   # no big header in pickdate mode
    $r->print(&Apache::loncommon::start_page("Pick a Date",$js,
    {'only_body' => 1,}).
     &dialscript().
     '<font size="1">');
       } else {
          $r->print(&Apache::loncommon::start_page("Announcements and Calendar",
    $js));
       }
 # does this user have privileges to post, etc?  # does this user have privileges to post, etc?
     my $allowed=0;      my $allowed=0;
     if ($ENV{'request.course.id'}) {      if ($env{'request.course.id'}) {
        $allowed=&Apache::lonnet::allowed('srm',$ENV{'request.course.id'});         $allowed=&Apache::lonnet::allowed('srm',$env{'request.course.id'});
       }
   # does this user have privileges to post to servers?
       my $serverpost=0;
       if ($env{'request.role.domain'}) {
    $serverpost=&Apache::lonnet::allowed('psa',
        $env{'request.role.domain'});
       } else {
    $serverpost=&Apache::lonnet::allowed('psa','/');
       }
   # -------------------------------- BUT: do no fancy stuff when in pickdate mode
       if ($pickdatemode) { 
    $serverpost=0; 
    $allowed=0;
       }
   # ------------------------------------------------------------ Process commands
       if ($serverpost) {
    if ($env{'form.serveraction'}) {
       foreach my $key (keys(%env)) {
    if ($key=~/^form\.postto\_(\w+)/) {
       $r->print( 
    '<br />Posting '.$1.': '.&Apache::lonnet::postannounce
    ($1,$env{'form.serverannnounce'}));
    }
       }
    }
    $r->print(<<SERVERANNOUNCE);
   <form name="serveranno" method="post">
   <h3>Post Server Announcements</h3>
   Post announcements to the system login and roles screen<br />
   <i>(leave blank to delete announcement)</i><br />
   <textarea name="serverannnounce" cols="60" rows="5"></textarea><br />
   Check machines:<br />
   SERVERANNOUNCE
   # list servers
       foreach my $host (sort(keys(%Apache::lonnet::hostname))) {
    if (&Apache::lonnet::allowed('psa',$Apache::lonnet::hostdom{$host})) {
       $r->print ('<br /><label><input type="checkbox" name="postto_'.$host.'" /> '.
          $host.' <tt>'.$Apache::lonnet::hostname{$host}.'</tt> '.
          '</label><a href="http://'.$Apache::lonnet::hostname{$host}.
          '/announcement.txt" target="annowin">current</a>');
    }
       }
       $r->print(
     '<br /><input type="submit" name="serveraction" value="Post"></form><hr />');
     }      }
   
     if ($allowed) {      if ($allowed) {
         my $coursenum=$ENV{'course.'.$ENV{'request.course.id'}.'.num'};          my $coursenum=$env{'course.'.$env{'request.course.id'}.'.num'};
         my $coursedom=$ENV{'course.'.$ENV{'request.course.id'}.'.domain'};          my $coursedom=$env{'course.'.$env{'request.course.id'}.'.domain'};
 # ----------------------------------------------------- Store new submitted one  # ----------------------------------------------------- Store new submitted one
         if ($ENV{'form.action'} eq 'new') {          if ($env{'form.action'} eq 'new') {
     my $startdate =       my $startdate = 
  &Apache::lonhtmlcommon::get_date_from_form('startdate');   &Apache::lonhtmlcommon::get_date_from_form('startdate');
     my $enddate   =       my $enddate   = 
Line 239  ENDDOCUMENT Line 523  ENDDOCUMENT
             }              }
     &Apache::lonnet::put('calendar',{       &Apache::lonnet::put('calendar',{ 
  $startdate.'_'.$enddate =>    $startdate.'_'.$enddate => 
     $ENV{'form.msg'} },$coursedom,$coursenum);      $env{'form.msg'} },$coursedom,$coursenum);
       if ($env{'form.rsspost'}) {
                  &Apache::lonrss::addentry($coursenum,$coursedom,'Course_Announcements',
    &mt('Event from [_1] to [_2]',
        &Apache::lonlocal::locallocaltime($startdate),
        &Apache::lonlocal::locallocaltime($enddate)),
    $env{'form.msg'},'/adm/announcements','public');
      }
         }          }
 # ---------------------------------------------------------------- Remove items  # ---------------------------------------------------------------- Remove items
         if ($ENV{'form.action'} eq 'del') {          if ($env{'form.action'} eq 'del') {
     my @delwhich=();      my @delwhich=();
             foreach (keys %ENV) {              foreach my $key (keys(%env)) {
  if ($_=~/^form\.remove\_(.+)$/) {   if ($key=~/^form\.remove\_(.+)$/) {
     push(@delwhich,$1);      push(@delwhich,$1);
                 }                  }
             }              }
Line 259  ENDDOCUMENT Line 550  ENDDOCUMENT
         &editfield($r,$today,$tomorrow,'');          &editfield($r,$today,$tomorrow,'');
     }      }
 # ----------------------------------------------------- Summarize all calendars  # ----------------------------------------------------- Summarize all calendars
     my %allcal=();      my %allcal=&get_all_calendars();
     foreach (&Apache::loncommon::findallcourses()) {  
  %allcal=(%allcal,&readcalendar($_));  
     }  
   
 # ------------------------------- Initialize table and forward backward buttons  # ------------------------------- Initialize table and forward backward buttons
     my ($pm,$py,$fm,$fy)=($month-1,$year,$month+1,$year);      my ($pm,$py,$fm,$fy)=($month-1,$year,$month+1,$year);
     if ($pm<1) { ($pm,$py)=(12,$year-1); }      if ($pm<1) { ($pm,$py)=(12,$year-1); }
     if ($fm>12){ ($fm,$fy)=(1,$year+1); }      if ($fm>12){ ($fm,$fy)=(1,$year+1); }
   
     $r->print('<h1>'.('','January','February','March','April','May',      $r->print('<h1>'.('',&mt('January'),&mt('February'),&mt('March'),
       'June','July','August','September','October',        &mt('April'),&mt('May'),
                       'November','December')[$month].' '.$year.'</h1>');        &mt('June'),&mt('July'),&mt('August'),
                         &mt('September'),&mt('October'),
                         &mt('November'),&mt('December'))[$month].' '.
                 $year.'</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>'.
  '<a href="/adm/announcements?month='.$todayhash{'month'}.   '<a href="/adm/announcements?month='.$todayhash{'month'}.
  '&year='.$todayhash{'year'}.'">Current Month</a></body></html>');   '&year='.$todayhash{'year'}.'">Current Month</a>'.
     &Apache::loncommon::end_page());
  return OK;   return OK;
     }      }
   
       my $class = "LC_calendar";
       if ($env{'form.pickdate'} eq 'yes') {
    $class .= " LC_calendar_pickdate";
       }
     $r->print(      $r->print(
  '<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '.   '<a href="/adm/announcements?month='.$pm.'&year='.$py.
  '<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a>'.   ($pickdatemode?$pickinfo:'').'">'.&mt('Previous Month').'</a> '.
    '<a href="/adm/announcements?month='.$fm.'&year='.$fy.
    ($pickdatemode?$pickinfo:'').'">'.&mt('Next Month').'</a>'.
  '&nbsp;&nbsp;&nbsp;<a href="/adm/announcements?month='.$todayhash{'month'}.   '&nbsp;&nbsp;&nbsp;<a href="/adm/announcements?month='.$todayhash{'month'}.
  '&year='.$todayhash{'year'}.'">Current Month</a><p>'.   '&year='.$todayhash{'year'}.
         '<table border="2" cols="7" rows="5"><tr><th>Sun</th><th>Mon</th>'.   ($pickdatemode?$pickinfo:'').'">'.&mt('Current Month').'</a><p>'.
         '<th>Tue</th><th>Wed</th><th>Thu</th><th>Fri</th><th>Sat</th></tr>');          '<table class="'.$class.'" cols="7" rows="5"><tr>
   <th>'.&mt('Sun').'</th>
   <th>'.&mt('Mon').'</th>
   <th>'.&mt('Tue').'</th>
   <th>'.&mt('Wed').'</th>
   <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 300  ENDDOCUMENT Line 605  ENDDOCUMENT
     }      }
     $r->print('</tr>');      $r->print('</tr>');
   
     for (my $k=0;$k<=3;$k++) {      for (my $k=0;$k<=4;$k++) {
         $r->print('<tr>');          $r->print('<tr>');
         for (my $i=0;$i<=6;$i++) {          for (my $i=0;$i<=6;$i++) {
             ($tk,$nm,$outp)=&showday($tk,0,%allcal);              ($tk,$nm,$outp)=&showday($tk,0,%allcal);
Line 311  ENDDOCUMENT Line 616  ENDDOCUMENT
     }      }
 # ------------------------------------------------------------------- End table  # ------------------------------------------------------------------- End table
     $r->print('</table>');      $r->print('</table>');
     if ($allowed) { $r->print('<input type="button" onClick="removesub()" value="Remove Checked Entries"></form>'); }  # ----------------------------------------------------------------- Check marks
       undef(%showedcheck);
   # --------------------------------------------------------------- Remove button
       if ($allowed) { $r->print('<input type="button" onClick="removesub()" value="Remove Checked Entries">'.
         &Apache::loncommon::help_open_topic('Calendar_Remove_Announcement').'</form>'); }
     $r->print('<p>'.      $r->print('<p>'.
  '<a href="/adm/announcements?month='.$pm.'&year='.$py.'">Previous Month</a> '.   '<a href="/adm/announcements?month='.$pm.'&year='.$py.
  '<a href="/adm/announcements?month='.$fm.'&year='.$fy.'">Next Month</a>'.   ($pickdatemode?$pickinfo:'').'">'.&mt('Previous Month').'</a> '.
    '<a href="/adm/announcements?month='.$fm.'&year='.$fy.
    ($pickdatemode?$pickinfo:'').'">'.&mt('Next Month').'</a>'.
  '&nbsp;&nbsp;&nbsp;<a href="/adm/announcements?month='.$todayhash{'month'}.   '&nbsp;&nbsp;&nbsp;<a href="/adm/announcements?month='.$todayhash{'month'}.
  '&year='.$todayhash{'year'}.'">Current Month</a></p>'.   '&year='.$todayhash{'year'}.
  '</body></html>');   ($pickdatemode?$pickinfo:'').'">'.&mt('Current Month').'</a></p>'.
    ($pickdatemode?'</font>':'').&Apache::loncommon::end_page());
       $r->print('<a href="/adm/announcements.ics">'.&mt('Download your Calendar as iCalendar File').'</a>');
     return OK;      return OK;
 }   } 
   

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


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.