--- loncom/interface/lonannounce.pm 2004/09/02 13:15:07 1.32 +++ loncom/interface/lonannounce.pm 2006/01/12 23:00:08 1.41 @@ -1,7 +1,7 @@ # The LearningOnline Network # Announce # -# $Id: lonannounce.pm,v 1.32 2004/09/02 13:15:07 www Exp $ +# $Id: lonannounce.pm,v 1.41 2006/01/12 23:00:08 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -33,6 +33,8 @@ use Apache::Constants qw(:common); use Apache::loncommon; use Apache::lonhtmlcommon(); use Apache::lonlocal; +use Apache::lonrss(); +use Apache::lonnet; use HTML::Entities(); my %todayhash; @@ -48,21 +50,28 @@ sub editfield { 'enddate', $end); my $help=&Apache::loncommon::help_open_menu('','Calendar Add Announcement','Calendar_Add_Announcement','',274,'Communication Tools'); + my %lt=&Apache::lonlocal::texthash('post' => 'Post Announcement', + 'start' => 'Starting date', + 'end' => 'Ending date', + 'incrss' => 'Include in course RSS newsfeed'); + $r->print(< - - -
Starting date:$startdateform
Ending date:$enddateform
+ + +
$lt{'start'}:$startdateform
$lt{'end'}:$enddateform
-
+
+ +

ENDFORM } sub readcalendar { my $courseid=shift; - my $coursenum=$ENV{'course.'.$courseid.'.num'}; - my $coursedom=$ENV{'course.'.$courseid.'.domain'}; + my $coursenum=$env{'course.'.$courseid.'.num'}; + my $coursedom=$env{'course.'.$courseid.'.domain'}; my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum); my %returnhash=(); foreach (keys %thiscal) { @@ -70,7 +79,7 @@ sub readcalendar { $returnhash{$courseid.'@'.$_}=$thiscal{$_}; } } - if ($courseid eq $ENV{'request.course.id'}) { + if ($courseid eq $env{'request.course.id'}) { my %resourcedata= &Apache::lonnet::dump('resourcedata',$coursedom,$coursenum); foreach my $thiskey (sort keys %resourcedata) { @@ -81,11 +90,11 @@ sub readcalendar { 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 ($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; } + if (!$env{'request.role.adv'} && + !$env{'request.course.sec'}) { next; } $section=&mt('Group/Section').': '.$1; $middle=~s/^\[(.*)\]\.//; } @@ -133,25 +142,25 @@ sub emptycell { sub normalcell { my ($day,$month,$year,$text)=@_; my $output=''; - foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) { - if ($_) { + my @items=&order($text); + foreach my $item (@items) { + if ($item) { my $internalflag=0; - my ($courseid,$start,$end,@msg)=split(/\@/,$_); - my $msg=join('@',@msg); + my ($courseid,$start,$end,$msg)=split(/\@/,$item,4); if ($msg=~/INTERNAL\:/) { $msg=~s/INTERNAL\://gs; $internalflag=1; } - my $fullmsg=&mt('Calendar Announcement for ').$ENV{'course.'.$courseid.'.description'}. + 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; - if ($courseid eq $ENV{'request.course.id'}) { - if ((&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) + if ($courseid eq $env{'request.course.id'}) { + if ((&Apache::lonnet::allowed('srm',$env{'request.course.id'})) && (!$showedcheck{$start.'_'.$end}) - && ($ENV{'form.pickdate'} ne 'yes') + && ($env{'form.pickdate'} ne 'yes') && (!$internalflag)) { $output.=''; @@ -175,11 +184,11 @@ sub normalcell { sub plaincell { my ($text)=@_; my $output=''; - foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) { - if ($_) { - my ($courseid,$start,$end,@msg)=split(/\@/,$_); - my $msg=join('@',@msg); - my $fullmsg=&mt('Calendar Announcement for ').$ENV{'course.'.$courseid.'.description'}. + my @items=&order($text); + foreach my $item (@items) { + if ($item) { + my ($courseid,$start,$end,$msg)=split(/\@/,$item,4); + my $fullmsg=&mt('Calendar Announcement for ').$env{'course.'.$courseid.'.description'}. '\n'.&Apache::lonlocal::locallocaltime($start); if ($start!=$end) { $fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end); @@ -190,7 +199,7 @@ sub plaincell { $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\''); $fullmsg=~s/&/\\&/g; $output.=''. - substr($msg,0,40).'...
'; + substr($msg,0,80).'...
'; } } return $output; @@ -199,10 +208,10 @@ sub plaincell { sub listcell { my ($text)=@_; my $output=''; - foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) { - if ($_) { - my ($courseid,$start,$end,@msg)=split(/\@/,$_); - my $msg=join('@',@msg); + my @items=&order($text); + 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 ($start!=$end) { @@ -217,6 +226,19 @@ sub listcell { return $output; } +sub order { + my ($text)=@_; + my @items = split(/___&&&___/,$text); + sort { + my (undef,$astart,$aend)=split(/\@/,$a); + my (undef,$bstart,$bend)=split(/\@/,$b); + if ($astart != $bstart) { + return $astart <=> $bstart; + } + return $aend <=> $bend; + } @items; +} + sub nextday { my %th=@_; $th{'day'}++; @@ -233,11 +255,11 @@ sub showday { $tk-=$oneday; $nextday+=$oneday; } - foreach (keys %allcal) { - my ($course,$startdate,$enddate)=($_=~/^(\w+)\@(\d+)\_(\d+)$/); - if (($startdate<$nextday) && ($enddate>$tk)) { + foreach my $item (keys(%allcal)) { + my ($course,$startdate,$enddate)=($item=~/^(\w+)\@(\d+)\_(\d+)$/); + if (($startdate<$nextday) && ($enddate>=$tk)) { $outp.='___&&&___'.$course.'@'.$startdate.'@'.$enddate.'@'. - $allcal{$_}; + $allcal{$item}; } } unless ($mode) { @@ -256,7 +278,7 @@ sub showday { sub tfont { my $text=shift; - if ($ENV{'form.pickdate'} eq 'yes') { + if ($env{'form.pickdate'} eq 'yes') { return ''.$text.''; } else { return $text; @@ -265,7 +287,7 @@ sub tfont { sub picklink { my ($text,$day,$month,$year)=@_; - if ($ENV{'form.pickdate'} eq 'yes') { + if ($env{'form.pickdate'} eq 'yes') { return ''. $text.''; } else { @@ -277,14 +299,14 @@ sub dialscript { return (< function dialin(day,month,year) { - opener.document.$ENV{'form.formname'}.$ENV{'form.element'}\_year.value=year; - var slct=opener.document.$ENV{'form.formname'}.$ENV{'form.element'}\_month; + opener.document.$env{'form.formname'}.$env{'form.element'}\_year.value=year; + var slct=opener.document.$env{'form.formname'}.$env{'form.element'}\_month; var i; for (i=0;i @@ -308,14 +330,14 @@ sub handler { ['month','year','pickdate','formname','element']); # --------------------------------------------------- Decide what month to show my $year=$todayhash{'year'}; - if ($ENV{'form.year'}) { $year=$ENV{'form.year'}; } + if ($env{'form.year'}) { $year=$env{'form.year'}; } my $month=$todayhash{'month'}; - if ($ENV{'form.month'}) { $month=$ENV{'form.month'}; } + if ($env{'form.month'}) { $month=$env{'form.month'}; } # ---------------------------------------------- See if we are in pickdate mode - my $pickdatemode=($ENV{'form.pickdate'} eq 'yes'); - my $pickinfo='&pickdate=yes&formname='.$ENV{'form.formname'}. - '&element='.$ENV{'form.element'}; + my $pickdatemode=($env{'form.pickdate'} eq 'yes'); + my $pickinfo='&pickdate=yes&formname='.$env{'form.formname'}. + '&element='.$env{'form.element'}; # --------------------------------------------- Find out first day of the month my %firstday=&Apache::loncommon::timehash( @@ -325,9 +347,9 @@ sub handler { 'dlsav' => -1 )); my $weekday=$firstday{'weekday'}; # ------------------------------------------------------------ Print the screen - + my $html=&Apache::lonxml::xmlbegin(); $r->print(< +$html The LearningOnline Network with CAPA