[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 {