--- loncom/interface/lonannounce.pm 2004/06/12 01:04:10 1.28 +++ loncom/interface/lonannounce.pm 2006/01/12 23:03:41 1.42 @@ -1,7 +1,7 @@ # The LearningOnline Network # Announce # -# $Id: lonannounce.pm,v 1.28 2004/06/12 01:04:10 www Exp $ +# $Id: lonannounce.pm,v 1.42 2006/01/12 23:03:41 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; @@ -47,32 +49,37 @@ sub editfield { my $enddateform = &Apache::lonhtmlcommon::date_setter('anno', 'enddate', $end); - my $help=&Apache::loncommon::help_open_topic('Calendar_Add_Announcement'). - &Apache::loncommon::help_open_faq(274). - &Apache::loncommon::help_open_bug('Communication Tools'); + 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) { - unless (($_=~/^error\:/) || ($thiscal{$_}=~/^error\:/)) { - $returnhash{$courseid.'@'.$_}=$thiscal{$_}; + foreach my $item (keys(%thiscal)) { + unless (($item=~/^error\:/) || ($thiscal{$item}=~/^error\:/)) { + $returnhash{$courseid.'@'.$item}=$thiscal{$item}; } } - 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,6 +88,13 @@ sub readcalendar { ($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/^\[(.*)\]\.//; } @@ -128,62 +142,64 @@ 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=$ENV{'course.'.$courseid.'.description'}. - ', '.&Apache::lonlocal::locallocaltime($start); + my $fullmsg=&mt('Calendar Announcement for ').$env{'course.'.$courseid.'.description'}. + '\n'.&Apache::lonlocal::locallocaltime($start); if ($start!=$end) { $fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end); } - $fullmsg.=': '.$msg; - if ($courseid eq $ENV{'request.course.id'}) { - if ((&Apache::lonnet::allowed('srm',$ENV{'request.course.id'})) + $fullmsg.=':\n'.$msg; + 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.=''; $showedcheck{$start.'_'.$end}=1; } } + $fullmsg=~s/[\n\r]/\\n/gs; $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\''); $fullmsg=~s/&/\\&/g; $output.=''. substr($msg,0,20).'...
'; } } - return ''.&tfont(''.&picklink($day,$day,$month,$year).'
'.$output).''; + '>'.&tfont(''.&picklink($day,$day,$month,$year).'
'.$output).''; } sub plaincell { my ($text)=@_; my $output=''; - foreach (split(/\_\_\_\&\&\&\_\_\_/,$text)) { - if ($_) { - my ($courseid,$start,$end,@msg)=split(/\@/,$_); - my $msg=join('@',@msg); - my $fullmsg=$ENV{'course.'.$courseid.'.description'}. - ', '.&Apache::lonlocal::locallocaltime($start); + 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); } $msg=~s/INTERNAL\://gs; - $fullmsg.=': '.$msg; + $fullmsg.=':\n'.$msg; + $fullmsg=~s/[\n\r]/\\n/gs; $fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\''); $fullmsg=~s/&/\\&/g; $output.=''. - substr($msg,0,40).'...
'; + substr($msg,0,80).'...
'; } } return $output; @@ -192,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) { @@ -210,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'}++; @@ -226,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) { @@ -249,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; @@ -258,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 { @@ -270,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 @@ -301,26 +330,26 @@ 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( &Apache::loncommon::maketime( 'day' => 1, 'month'=> $month, 'year' => $year, 'hours' => 0, 'minutes' => 0, 'seconds' => 0, - 'dlsav' => $todayhash{'dlsav'} )); + 'dlsav' => -1 )); my $weekday=$firstday{'weekday'}; # ------------------------------------------------------------ Print the screen - + my $html=&Apache::lonxml::xmlbegin(); $r->print(< +$html The LearningOnline Network with CAPA