--- loncom/interface/lonannounce.pm 2006/04/23 07:16:07 1.51 +++ 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.51 2006/04/23 07:16:07 albertel Exp $ +# $Id: lonannounce.pm,v 1.52 2006/05/12 02:17:50 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -326,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; @@ -479,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); }