[LON-CAPA-cvs] cvs: loncom /interface lonannounce.pm

albertel lon-capa-cvs@mail.lon-capa.org
Thu, 29 Jun 2006 15:23:59 -0000


This is a MIME encoded message

--albertel1151594639
Content-Type: text/plain

albertel		Thu Jun 29 11:23:59 2006 EDT

  Modified files:              
    /loncom/interface	lonannounce.pm 
  Log:
  - BUG#4850, restore titles to calaendar events associated with resources, but retian the speedups of doing delayed gettile
  
  
--albertel1151594639
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20060629112359.txt"

Index: loncom/interface/lonannounce.pm
diff -u loncom/interface/lonannounce.pm:1.55 loncom/interface/lonannounce.pm:1.56
--- loncom/interface/lonannounce.pm:1.55	Mon Jun 26 18:31:56 2006
+++ loncom/interface/lonannounce.pm	Thu Jun 29 11:23:59 2006
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Announce
 #
-# $Id: lonannounce.pm,v 1.55 2006/06/26 22:31:56 albertel Exp $
+# $Id: lonannounce.pm,v 1.56 2006/06/29 15:23:59 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -89,7 +89,7 @@
 	if ($resourcedata{$thiskey.'.type'}=~/^date/) {
 	    my ($course,$middle,$part,$name)=
 		($thiskey=~/^(\w+)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/);
-	    my $section=&mt('All Students');
+	    my %data = ( 'section' => &mt('All Students'));
 	    if ($middle=~/^\[(.*)\]\./) {
 		my $sec=$1;
 		# if we have a section don't show ones that aren't ours
@@ -98,11 +98,11 @@
 		# 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;
+		$data{'section'}=&mt('Group/Section').': '.$1;
 		$middle=~s/^\[(.*)\]\.//;
 	    }
 	    $middle=~s/\.$//;
-	    my $realm=&mt('All Resources');
+	    $data{'realm'}=&mt('All Resources');
 	    if ($middle eq '___(all)') {
 		if (!$can_see_hidden && !$navmap) {
 		    next;
@@ -116,9 +116,8 @@
 		    my $res = $navmap->getResourceByUrl($map_url);
 		    if ($res && $res->randomout()) { next; }
 		}
-		# need to do this looks up in showday or /*cell for speed resaons
-		#$realm=&mt('Folder/Map').': '.&Apache::lonnet::gettitle($map_url);
-		$realm=&mt('Folder/Map').': '.$map_url;
+		$data{'realm'}=&mt('Folder/Map');
+		$data{'url'} = $map_url;
 	    } elsif ($middle) {
 		if (!$can_see_hidden && !$navmap) {
 		    next;
@@ -127,20 +126,26 @@
 		    my $res = $navmap->getBySymb($middle);
 		    if ($res && $res->randomout()) { next; }
 		}
-		#$realm=&mt('Resource').': '.&Apache::lonnet::gettitle($middle);
-		$realm=&mt('Resource').': '.$middle;
+		$data{'realm'} = &mt('Resource');
+		$data{'symb'} = $middle;
 	    }
-	    my $datetype='';
+	    $data{'datetype'} = $name;
 	    if ($name eq 'duedate') { 
-		$datetype=&mt('Due'); 
+		$data{'datetype'} = &mt('Due'); 
 # see if accidentally answerdate is before duedate
 		my $answerkey=$thiskey;
 		$answerkey=~s/duedate$/answerdate/;
 		if ($resourcedata{$thiskey}>$resourcedata{$answerkey}) {
-		    $datetype=&mt('Due and Answer Available');
+		    $data{'datetype'} = &mt('Due and Answer Available');
 		}
 	    }
-	    if ($name eq 'opendate') { $datetype=&mt('Opening'); }
+	    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;
@@ -149,11 +154,10 @@
 # forget it
 		    next;
 		} 
-		$datetype=&mt('Answer Available'); 
+		$data{'datetype'}=&mt('Answer Available'); 
 	    }
 	    $returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'.
-			    $resourcedata{$thiskey}}=
-			    'INTERNAL:'.$datetype.': '.$realm.' ('.$section.')';
+			    $resourcedata{$thiskey}}=\%data;
 	}
     }
     return %returnhash;
@@ -164,23 +168,25 @@
 }
 
 sub normalcell {
-    my ($day,$month,$year,$text)=@_;
+    my ($day,$month,$year,$items_ref)=@_;
     my $output;
-    my @items=&order($text);
+    my @items=&order($items_ref);
     foreach my $item (@items) {
         if ($item) {
-	    my $internalflag=0;
-	    my ($courseid,$start,$end,$msg)=split(/\@/,$item,4);
-	    if ($msg=~/INTERNAL\:/) {
-		$msg=~s/INTERNAL\://gs;
-		$internalflag=1;
-	    }
+	    my ($courseid,$start,$end,$msg)=@$item;
+	    my $internalflag= (ref($msg)) ? 1 : 0;
+	    $msg = &display_msg($msg);
             my $fullmsg=&mt('Calendar Announcement for ').$env{'course.'.$courseid.'.description'}.
 		'\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})
@@ -191,11 +197,6 @@
                $showedcheck{$start.'_'.$end}=1;
 	      }
 	    }
-	    $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 />'; }
             $output.='<a href="javascript:alert('."'$fullmsg'".')">'.
 	       $short_msg.'</a>';
        }
@@ -208,18 +209,18 @@
 }
 
 sub plaincell {
-    my ($text)=@_;
+    my ($items_ref)=@_;
     my $output;
-    my @items=&order($text);
+    my @items=&order($items_ref);
     foreach my $item (@items) {
-        if ($item) {
-	    my ($courseid,$start,$end,$msg)=split(/\@/,$item,4);
+        if (ref($item)) {
+	    my ($courseid,$start,$end,$msg)=@$item;
             my $fullmsg=&mt('Calendar Announcement for ').$env{'course.'.$courseid.'.description'}.
 		'\n'.&Apache::lonlocal::locallocaltime($start);
 	    if ($start!=$end) {
 		$fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end);
 	    }
-	    $msg=~s/INTERNAL\://gs;
+	    $msg = &display_msg($msg);
 	    $fullmsg.=':\n'.$msg;
  	    $fullmsg=~s/[\n\r]/\\n/gs;
             $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\'');
@@ -234,20 +235,19 @@
 }
 
 sub listcell {
-    my ($text)=@_;
+    my ($items_ref)=@_;
     my $output='';
-    my @items=&order($text);
+    my @items=&order($items_ref);
     foreach my $item (@items) {
-        if ($item) {
-	    my ($courseid,$start,$end,$msg)=split(/\@/,$item,4);
-	    $msg=~s/INTERNAL\://gs;
-            my $fullmsg=&Apache::lonlocal::locallocaltime($start);
+        if (ref($item)) {
+	    my ($courseid,$start,$end,$msg)=@$item;
+	    &Apache::lonnet::logthis(" msg2 is ".ref($msg)." $msg ");
+	    my $fullmsg=&Apache::lonlocal::locallocaltime($start);
 	    if ($start!=$end) {
 		$fullmsg.=&mt(' to ').
 		    &Apache::lonlocal::locallocaltime($end);
 	    }
-            $fullmsg.=':<br /><b>'.
-               $msg.'</b>';
+            $fullmsg.=':<br /><b>'.&display_msg($msg).'</b>';
             $output.='<li>'.$fullmsg.'</li>';
        }
     }
@@ -255,16 +255,15 @@
 }
 
 sub order {
-    my ($text)=@_;
-    my @items = split(/___&&&___/,$text);
-    sort {
-	my (undef,$astart,$aend)=split(/\@/,$a);
-	my (undef,$bstart,$bend)=split(/\@/,$b);
+    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;
+    } @$items;
 }
 
 sub nextday {
@@ -273,11 +272,28 @@
     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'})) {
+	$output .= ': '.&Apache::lonnet::gettitle($msg->{'url'});
+    }
+    if (exists($msg->{'symb'})) {
+	$output .= ': '.&Apache::lonnet::gettitle($msg->{'symb'});
+    }
+    $output .= ' ('.$msg->{'section'}.') ';
+    return $output;
+}
+
 sub showday {
     my ($tk,$mode,%allcal)=@_;
     my %th=&Apache::loncommon::timehash($tk);
     my ($nextday,$nextmonth)=&nextday(%th);
-    my $outp='';
+    my @outp;
     if ($mode) {
 	my $oneday=24*3600;
 	$tk-=$oneday;
@@ -286,18 +302,17 @@
     foreach my $item (keys(%allcal)) {
 	my ($course,$startdate,$enddate)=($item=~/^(\w+)\@(\d+)\_(\d+)$/);
         if (($startdate<$nextday) && ($enddate>=$tk))  {
-	    $outp.='___&&&___'.$course.'@'.$startdate.'@'.$enddate.'@'.
-            $allcal{$item};
+	    push(@outp,[$course,$startdate,$enddate,$allcal{$item}]);
         }
     }
     unless ($mode) {
        return ($nextday,$nextmonth,&normalcell(
-               $th{'day'},$th{'month'},$th{'year'},$outp));
-   } elsif ($outp) {
+               $th{'day'},$th{'month'},$th{'year'},\@outp));
+   } elsif (@outp) {
        if ($mode==1) {
-          return '<br />'.&plaincell($outp);
+          return '<br />'.&plaincell(\@outp);
       } else {
-          return '<ul>'.&listcell($outp).'</ul>';
+          return '<ul>'.&listcell(\@outp).'</ul>';
       }
    } else {
        return '';
@@ -354,8 +369,7 @@
 	my $uid=$event;
 	$uid=~s/[\W\_]/-/gs;
 	$uid.='@loncapa';
-	my $summary=$allcal{$event};
-	$summary=~s/^INTERNAL\://;
+	my $summary=&display_msg($allcal{$event});
 	$summary=~s/\s+/ /gs;
         $summary=$env{'course.'.$courseid.'.description'}.': '.$summary;
 	$r->print("BEGIN:VEVENT$crlf");

--albertel1151594639--