[LON-CAPA-cvs] cvs: loncom /interface lonannounce.pm loncommon.pm
www
lon-capa-cvs@mail.lon-capa.org
Fri, 12 May 2006 15:53:11 -0000
www Fri May 12 11:53:11 2006 EDT
Modified files:
/loncom/interface lonannounce.pm loncommon.pm
Log:
iCalendar working, at least with Apple iCal
Index: loncom/interface/lonannounce.pm
diff -u loncom/interface/lonannounce.pm:1.52 loncom/interface/lonannounce.pm:1.53
--- loncom/interface/lonannounce.pm:1.52 Thu May 11 22:17:50 2006
+++ loncom/interface/lonannounce.pm Fri May 12 11:53:10 2006
@@ -1,7 +1,7 @@
# The LearningOnline Network
# Announce
#
-# $Id: lonannounce.pm,v 1.52 2006/05/12 02:17:50 www Exp $
+# $Id: lonannounce.pm,v 1.53 2006/05/12 15:53:10 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -81,74 +81,76 @@
}
}
- if ($courseid eq $env{'request.course.id'}) {
- my $can_see_hidden = $env{'request.role.adv'};
- my $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 $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; }
- $section=&mt('Group/Section').': '.$1;
- $middle=~s/^\[(.*)\]\.//;
+ my $can_see_hidden = $env{'request.role.adv'};
+ my $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 $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; }
+ $section=&mt('Group/Section').': '.$1;
+ $middle=~s/^\[(.*)\]\.//;
+ }
+ $middle=~s/\.$//;
+ my $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; }
}
- $middle=~s/\.$//;
- my $realm=&mt('All Resources');
- if ($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; }
- }
- $realm=&mt('Folder/Map').': '.&Apache::lonnet::gettitle($map_url);
- } elsif ($middle) {
- if (!$can_see_hidden && !$navmap) {
- next;
- }
- if (!$can_see_hidden) {
- my $res = $navmap->getBySymb($middle);
- if ($res && $res->randomout()) { next; }
- }
- $realm=&mt('Resource').': '.&Apache::lonnet::gettitle($middle);
+ $realm=&mt('Folder/Map').': '.&Apache::lonnet::gettitle($map_url);
+ } elsif ($middle) {
+ if (!$can_see_hidden && !$navmap) {
+ next;
}
- my $datetype='';
- if ($name eq 'duedate') {
- $datetype=&mt('Due');
+ if (!$can_see_hidden) {
+ my $res = $navmap->getBySymb($middle);
+ if ($res && $res->randomout()) { next; }
+ }
+ $realm=&mt('Resource').': '.&Apache::lonnet::gettitle($middle);
+ }
+ my $datetype='';
+ if ($name eq 'duedate') {
+ $datetype=&mt('Due');
# see if accidentally answerdate is before duedate
- my $answerkey=$thiskey;
- $answerkey=~s/duedate$/answerdate/;
- if ($resourcedata{$thiskey}>$resourcedata{$answerkey}) {
- $datetype='Due and Answer Available';
- }
+ my $answerkey=$thiskey;
+ $answerkey=~s/duedate$/answerdate/;
+ if ($resourcedata{$thiskey}>$resourcedata{$answerkey}) {
+ $datetype=&mt('Due and Answer Available');
}
- if ($name eq 'opendate') { $datetype=&mt('Opening'); }
- if ($name eq 'answerdate') {
+ }
+ if ($name eq 'opendate') { $datetype=&mt('Opening'); }
+ if ($name eq 'answerdate') {
# see if accidentally answerdate is before duedate
- my $duekey=$thiskey;
- $duekey=~s/answerdate$/duedate/;
- if ($resourcedata{$duekey}>$resourcedata{$thiskey}) {
+ my $duekey=$thiskey;
+ $duekey=~s/answerdate$/duedate/;
+ if ($resourcedata{$duekey}>$resourcedata{$thiskey}) {
# forget it
- next;
- }
- $datetype=&mt('Answer Available');
- }
- $returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'.
+ next;
+ }
+ $datetype=&mt('Answer Available');
+ }
+ $returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'.
$resourcedata{$thiskey}}=
'INTERNAL:'.$datetype.': '.$realm.' ('.$section.')';
- }
}
}
return %returnhash;
@@ -345,11 +347,19 @@
$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+)$/);
+ my ($courseid,$startdate,$enddate)=($event=~/^(\w+)\@(\d+)\_(\d+)$/);
+ my $uid=$event;
+ $uid=~s/[\W\_]/-/gs;
+ $uid.='@loncapa';
+ my $summary=$allcal{$event};
+ $summary=~s/^INTERNAL\://;
+ $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:$allcal{$event}$crlf");
+ $r->print("SUMMARY:$summary$crlf");
+ $r->print("UID:$uid$crlf");
$r->print("END:VEVENT$crlf");
}
# Footer
@@ -593,6 +603,7 @@
'&year='.$todayhash{'year'}.
($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;
}
Index: loncom/interface/loncommon.pm
diff -u loncom/interface/loncommon.pm:1.370 loncom/interface/loncommon.pm:1.371
--- loncom/interface/loncommon.pm:1.370 Thu May 11 22:17:50 2006
+++ loncom/interface/loncommon.pm Fri May 12 11:53:10 2006
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# a pile of common routines
#
-# $Id: loncommon.pm,v 1.370 2006/05/12 02:17:50 www Exp $
+# $Id: loncommon.pm,v 1.371 2006/05/12 15:53:10 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -2608,10 +2608,7 @@
sub utc_string {
my ($date)=@_;
- my @utctime=gmtime($date);
- my $year=$utctime[5]+1900;
- my $month=$utctime[4]+1;
- return "$year$month$utctime[3]T$utctime[2]$utctime[1]$utctime[0]Z";
+ return strftime("%Y%m%dT%H%M%SZ",gmtime($date));
}
sub maketime {