--- loncom/interface/lonannounce.pm 2006/04/22 16:35:31 1.50 +++ loncom/interface/lonannounce.pm 2006/05/12 02:17:50 1.52 @@ -1,7 +1,7 @@ # The LearningOnline Network # Announce # -# $Id: lonannounce.pm,v 1.50 2006/04/22 16:35:31 albertel Exp $ +# $Id: lonannounce.pm,v 1.52 2006/05/12 02:17:50 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -160,7 +160,7 @@ sub emptycell { sub normalcell { my ($day,$month,$year,$text)=@_; - my $output=''; + my $output; my @items=&order($text); foreach my $item (@items) { if ($item) { @@ -190,8 +190,9 @@ sub normalcell { $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\''); $fullmsg=~s/&/\\&/g; my $short_msg = substr($msg,0,20).((length($msg) > 20)?'...':''); + if (defined($output)) { $output.='
'; } $output.=''. - $short_msg.'
'; + $short_msg.''; } } return ' 80)?'...':''); + if (defined($output)) { $output.='
'; } $output.=''. - substr($msg,0,80).'...
'; + $short_msg.''; } } return $output; @@ -323,9 +326,43 @@ function dialin(day,month,year) { ENDDIA } +# ----------------------------------------------------- Summarize all calendars +sub get_all_calendars { + my %allcal=(); + foreach my $course (sort(&Apache::loncommon::findallcourses())) { + %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 ($course,$startdate,$enddate)=($event=~/^(\w+)\@(\d+)\_(\d+)$/); + $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:$allcal{$event}$crlf"); + $r->print("END:VEVENT$crlf"); + } +# Footer + $r->print("END:VCALENDAR$crlf"); +} sub handler { my $r = shift; + 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; return OK if $r->header_only; @@ -476,11 +513,7 @@ SERVERANNOUNCE &editfield($r,$today,$tomorrow,''); } # ----------------------------------------------------- Summarize all calendars - my %allcal=(); - foreach my $course (sort(&Apache::loncommon::findallcourses())) { - %allcal=(%allcal,&readcalendar($course)); - } - + my %allcal=&get_all_calendars(); # ------------------------------- Initialize table and forward backward buttons my ($pm,$py,$fm,$fy)=($month-1,$year,$month+1,$year); if ($pm<1) { ($pm,$py)=(12,$year-1); }