--- loncom/interface/lonannounce.pm 2006/12/05 02:55:51 1.63 +++ loncom/interface/lonannounce.pm 2008/05/18 19:45:46 1.70 @@ -1,7 +1,7 @@ # The LearningOnline Network # Announce # -# $Id: lonannounce.pm,v 1.63 2006/12/05 02:55:51 albertel Exp $ +# $Id: lonannounce.pm,v 1.70 2008/05/18 19:45:46 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -74,11 +74,22 @@ sub readcalendar { my $courseid=shift; my $coursenum=$env{'course.'.$courseid.'.num'}; my $coursedom=$env{'course.'.$courseid.'.domain'}; + if ($coursenum eq '' || $coursedom eq '') { + my %courseinfo=&Apache::lonnet::coursedescription($courseid); + if ($coursenum eq '' && exists($courseinfo{'num'})) { + $coursenum = $courseinfo{'num'}; + } + if ($coursedom eq '' && exists($courseinfo{'domain'})) { + $coursedom = $courseinfo{'domain'}; + } + } + my %thiscal=&Apache::lonnet::dump('calendar',$coursedom,$coursenum); my %returnhash=(); foreach my $item (keys(%thiscal)) { unless (($item=~/^error\:/) || ($thiscal{$item}=~/^error\:/)) { - $returnhash{$courseid.'@'.$item}=$thiscal{$item}; + my ($start,$end)=split('_',$item); + $returnhash{join("\0",$courseid,$start,$end)}=$thiscal{$item}; } } my $can_see_hidden = ($env{'request.role.adv'} && @@ -88,12 +99,17 @@ sub readcalendar { if ($courseid eq $env{'request.course.id'}) { $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 $resourcedata= + &Apache::lonnet::get_courseresdata($coursenum,$coursedom); + if (ref($resourcedata) ne 'HASH') { + return %returnhash; + } + foreach my $thiskey (keys(%$resourcedata)) { + if ($resourcedata->{$thiskey.'.type'}=~/^date/) { my ($course,$middle,$part,$name)= - ($thiskey=~/^($match_courseid)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); + ($thiskey=~/^(\Q$courseid\E)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); + my %data = ( 'section' => &mt('All Students')); if ($middle=~/^\[(.*)\]\./) { my $sec=$1; @@ -119,7 +135,9 @@ sub readcalendar { } if (!$can_see_hidden) { my $res = $navmap->getResourceByUrl($map_url); - if ($res && $res->randomout()) { next; } + if ($res && $res->randomout()) { + next; + } } $data{'realm'}=&mt('Folder/Map'); $data{'url'} = $map_url; @@ -129,7 +147,9 @@ sub readcalendar { } if (!$can_see_hidden) { my $res = $navmap->getBySymb($middle); - if ($res && $res->randomout()) { next; } + if ($res && $res->randomout()) { + next; + } } $data{'realm'} = &mt('Resource'); $data{'symb'} = $middle; @@ -140,7 +160,7 @@ sub readcalendar { # see if accidentally answerdate is before duedate my $answerkey=$thiskey; $answerkey=~s/duedate$/answerdate/; - if ($resourcedata{$thiskey}>$resourcedata{$answerkey}) { + if ($resourcedata->{$thiskey}>$resourcedata->{$answerkey}) { $data{'datetype'} = &mt('Due and Answer Available'); } } @@ -155,14 +175,15 @@ sub readcalendar { # see if accidentally answerdate is before duedate my $duekey=$thiskey; $duekey=~s/answerdate$/duedate/; - if ($resourcedata{$duekey}>$resourcedata{$thiskey}) { + if ($resourcedata->{$duekey}>$resourcedata->{$thiskey}) { # forget it next; } $data{'datetype'}=&mt('Answer Available'); } - $returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'. - $resourcedata{$thiskey}}=\%data; + $returnhash{join("\0",$courseid, + $resourcedata->{$thiskey}, + $resourcedata->{$thiskey})}=\%data; } } return %returnhash; @@ -310,9 +331,9 @@ sub showday { $nextday+=$oneday; } foreach my $item (keys(%allcal)) { - my ($course,$startdate,$enddate)=($item=~/^($match_courseid)\@(\d+)\_(\d+)$/); - if (($startdate<$nextday) && ($enddate>=$tk)) { - push(@outp,[$course,$startdate,$enddate,$allcal{$item}]); + my ($courseid,$startdate,$enddate)= split("\0",$item); + if (($startdate<$nextday) && ($enddate>=$tk)) { + push(@outp,[$courseid,$startdate,$enddate,$allcal{$item}]); } } unless ($mode) { @@ -376,7 +397,7 @@ sub output_ics_file { $r->print("PRODID:-//LONCAPA//LONCAPA Calendar Output//EN$crlf"); my %allcal=&get_all_calendars(); foreach my $event (keys(%allcal)) { - my ($courseid,$startdate,$enddate)=($event=~/^($match_courseid)\@(\d+)\_(\d+)$/); + my ($courseid,$startdate,$enddate)= split('\0',$event); my $uid=$event; $uid=~s/[\W\_]/-/gs; $uid.='@loncapa'; @@ -495,12 +516,14 @@ Post announcements to the system login a Check machines:
SERVERANNOUNCE # list servers - foreach my $host (sort(keys(%Apache::lonnet::hostname))) { - if (&Apache::lonnet::allowed('psa',$Apache::lonnet::hostdom{$host})) { + my %hostname = &Apache::lonnet::all_hostnames(); + foreach my $host (sort(keys(%hostname))) { + if (&Apache::lonnet::allowed('psa', + &Apache::lonnet::host_domain($host))) { $r->print ('
current'); + $host.' '.$hostname{$host}.' '. + 'current'); } } $r->print(