version 1.55, 2006/06/26 22:31:56
|
version 1.62, 2006/11/29 07:46:39
|
Line 80 sub readcalendar {
|
Line 80 sub readcalendar {
|
$returnhash{$courseid.'@'.$item}=$thiscal{$item}; |
$returnhash{$courseid.'@'.$item}=$thiscal{$item}; |
} |
} |
} |
} |
|
my $can_see_hidden = ($env{'request.role.adv'} && |
my $can_see_hidden = $env{'request.role.adv'}; |
($courseid eq $env{'request.course.id'})); |
my $navmap;# = Apache::lonnavmaps::navmap->new(); |
|
|
my $navmap; |
|
if ($courseid eq $env{'request.course.id'}) { |
|
$navmap = Apache::lonnavmaps::navmap->new(); |
|
} |
my %resourcedata= |
my %resourcedata= |
&Apache::lonnet::dump('resourcedata',$coursedom,$coursenum); |
&Apache::lonnet::dump('resourcedata',$coursedom,$coursenum); |
foreach my $thiskey (sort keys %resourcedata) { |
foreach my $thiskey (sort keys %resourcedata) { |
if ($resourcedata{$thiskey.'.type'}=~/^date/) { |
if ($resourcedata{$thiskey.'.type'}=~/^date/) { |
my ($course,$middle,$part,$name)= |
my ($course,$middle,$part,$name)= |
($thiskey=~/^(\w+)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); |
($thiskey=~/^(\w+)\.(?:(.+)\.)*([\w\s]+)\.(\w+)$/); |
my $section=&mt('All Students'); |
my %data = ( 'section' => &mt('All Students')); |
if ($middle=~/^\[(.*)\]\./) { |
if ($middle=~/^\[(.*)\]\./) { |
my $sec=$1; |
my $sec=$1; |
# if we have a section don't show ones that aren't ours |
# if we have a section don't show ones that aren't ours |
Line 98 sub readcalendar {
|
Line 102 sub readcalendar {
|
# if a student without a section don't show any section ones |
# if a student without a section don't show any section ones |
if (!$env{'request.role.adv'} && |
if (!$env{'request.role.adv'} && |
!$env{'request.course.sec'}) { next; } |
!$env{'request.course.sec'}) { next; } |
$section=&mt('Group/Section').': '.$1; |
$data{'section'}=&mt('Group/Section').': '.$1; |
$middle=~s/^\[(.*)\]\.//; |
$middle=~s/^\[(.*)\]\.//; |
} |
} |
$middle=~s/\.$//; |
$middle=~s/\.$//; |
my $realm=&mt('All Resources'); |
$data{'realm'}=&mt('All Resources'); |
if ($middle eq '___(all)') { |
if ($middle eq '___(all)') { |
if (!$can_see_hidden && !$navmap) { |
if (!$can_see_hidden && !$navmap) { |
next; |
next; |
Line 116 sub readcalendar {
|
Line 120 sub readcalendar {
|
my $res = $navmap->getResourceByUrl($map_url); |
my $res = $navmap->getResourceByUrl($map_url); |
if ($res && $res->randomout()) { next; } |
if ($res && $res->randomout()) { next; } |
} |
} |
# need to do this looks up in showday or /*cell for speed resaons |
$data{'realm'}=&mt('Folder/Map'); |
#$realm=&mt('Folder/Map').': '.&Apache::lonnet::gettitle($map_url); |
$data{'url'} = $map_url; |
$realm=&mt('Folder/Map').': '.$map_url; |
|
} elsif ($middle) { |
} elsif ($middle) { |
if (!$can_see_hidden && !$navmap) { |
if (!$can_see_hidden && !$navmap) { |
next; |
next; |
Line 127 sub readcalendar {
|
Line 130 sub readcalendar {
|
my $res = $navmap->getBySymb($middle); |
my $res = $navmap->getBySymb($middle); |
if ($res && $res->randomout()) { next; } |
if ($res && $res->randomout()) { next; } |
} |
} |
#$realm=&mt('Resource').': '.&Apache::lonnet::gettitle($middle); |
$data{'realm'} = &mt('Resource'); |
$realm=&mt('Resource').': '.$middle; |
$data{'symb'} = $middle; |
} |
} |
my $datetype=''; |
$data{'datetype'} = $name; |
if ($name eq 'duedate') { |
if ($name eq 'duedate') { |
$datetype=&mt('Due'); |
$data{'datetype'} = &mt('Due'); |
# see if accidentally answerdate is before duedate |
# see if accidentally answerdate is before duedate |
my $answerkey=$thiskey; |
my $answerkey=$thiskey; |
$answerkey=~s/duedate$/answerdate/; |
$answerkey=~s/duedate$/answerdate/; |
if ($resourcedata{$thiskey}>$resourcedata{$answerkey}) { |
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') { |
if ($name eq 'answerdate') { |
# see if accidentally answerdate is before duedate |
# see if accidentally answerdate is before duedate |
my $duekey=$thiskey; |
my $duekey=$thiskey; |
Line 149 sub readcalendar {
|
Line 158 sub readcalendar {
|
# forget it |
# forget it |
next; |
next; |
} |
} |
$datetype=&mt('Answer Available'); |
$data{'datetype'}=&mt('Answer Available'); |
} |
} |
$returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'. |
$returnhash{$courseid.'@'.$resourcedata{$thiskey}.'_'. |
$resourcedata{$thiskey}}= |
$resourcedata{$thiskey}}=\%data; |
'INTERNAL:'.$datetype.': '.$realm.' ('.$section.')'; |
|
} |
} |
} |
} |
return %returnhash; |
return %returnhash; |
Line 164 sub emptycell {
|
Line 172 sub emptycell {
|
} |
} |
|
|
sub normalcell { |
sub normalcell { |
my ($day,$month,$year,$text)=@_; |
my ($day,$month,$year,$items_ref)=@_; |
my $output; |
my $output; |
my @items=&order($text); |
my @items=&order($items_ref); |
foreach my $item (@items) { |
foreach my $item (@items) { |
if ($item) { |
if ($item) { |
my $internalflag=0; |
my ($courseid,$start,$end,$msg)=@$item; |
my ($courseid,$start,$end,$msg)=split(/\@/,$item,4); |
my $internalflag= (ref($msg)) ? 1 : 0; |
if ($msg=~/INTERNAL\:/) { |
$msg = &display_msg($msg); |
$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); |
'\n'.&Apache::lonlocal::locallocaltime($start); |
if ($start!=$end) { |
if ($start!=$end) { |
$fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end); |
$fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end); |
} |
} |
$fullmsg.=':\n'.$msg; |
$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 ($courseid eq $env{'request.course.id'}) { |
if ((&Apache::lonnet::allowed('srm',$env{'request.course.id'})) |
if ((&Apache::lonnet::allowed('srm',$env{'request.course.id'})) |
&& (!$showedcheck{$start.'_'.$end}) |
&& (!$showedcheck{$start.'_'.$end}) |
Line 191 sub normalcell {
|
Line 201 sub normalcell {
|
$showedcheck{$start.'_'.$end}=1; |
$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'".')">'. |
$output.='<a href="javascript:alert('."'$fullmsg'".')">'. |
$short_msg.'</a>'; |
$short_msg.'</a>'; |
} |
} |
Line 208 sub normalcell {
|
Line 213 sub normalcell {
|
} |
} |
|
|
sub plaincell { |
sub plaincell { |
my ($text)=@_; |
my ($items_ref)=@_; |
my $output; |
my $output; |
my @items=&order($text); |
my @items=&order($items_ref); |
foreach my $item (@items) { |
foreach my $item (@items) { |
if ($item) { |
if (ref($item)) { |
my ($courseid,$start,$end,$msg)=split(/\@/,$item,4); |
my ($courseid,$start,$end,$msg)=@$item; |
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); |
'\n'.&Apache::lonlocal::locallocaltime($start); |
if ($start!=$end) { |
if ($start!=$end) { |
$fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end); |
$fullmsg.=' - '.&Apache::lonlocal::locallocaltime($end); |
} |
} |
$msg=~s/INTERNAL\://gs; |
$msg = &display_msg($msg); |
$fullmsg.=':\n'.$msg; |
$fullmsg.=':\n'.$msg; |
$fullmsg=~s/[\n\r]/\\n/gs; |
$fullmsg=~s/[\n\r]/\\n/gs; |
$fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\''); |
$fullmsg=&HTML::Entities::encode($fullmsg,'<>&"\''); |
Line 234 sub plaincell {
|
Line 239 sub plaincell {
|
} |
} |
|
|
sub listcell { |
sub listcell { |
my ($text)=@_; |
my ($items_ref)=@_; |
my $output=''; |
my $output=''; |
my @items=&order($text); |
my @items=&order($items_ref); |
foreach my $item (@items) { |
foreach my $item (@items) { |
if ($item) { |
if (ref($item)) { |
my ($courseid,$start,$end,$msg)=split(/\@/,$item,4); |
my ($courseid,$start,$end,$msg)=@$item; |
$msg=~s/INTERNAL\://gs; |
my $fullmsg=&Apache::lonlocal::locallocaltime($start); |
my $fullmsg=&Apache::lonlocal::locallocaltime($start); |
|
if ($start!=$end) { |
if ($start!=$end) { |
$fullmsg.=&mt(' to '). |
$fullmsg.=&mt(' to '). |
&Apache::lonlocal::locallocaltime($end); |
&Apache::lonlocal::locallocaltime($end); |
} |
} |
$fullmsg.=':<br /><b>'. |
$fullmsg.=':<br /><b>'.&display_msg($msg).'</b>'; |
$msg.'</b>'; |
|
$output.='<li>'.$fullmsg.'</li>'; |
$output.='<li>'.$fullmsg.'</li>'; |
} |
} |
} |
} |
Line 255 sub listcell {
|
Line 258 sub listcell {
|
} |
} |
|
|
sub order { |
sub order { |
my ($text)=@_; |
my ($items)=@_; |
my @items = split(/___&&&___/,$text); |
return sort { |
sort { |
my ($astart,$aend)=$a->[1,2]; |
my (undef,$astart,$aend)=split(/\@/,$a); |
my ($bstart,$bend)=$b->[1,2]; |
my (undef,$bstart,$bend)=split(/\@/,$b); |
|
if ($astart != $bstart) { |
if ($astart != $bstart) { |
return $astart <=> $bstart; |
return $astart <=> $bstart; |
} |
} |
return $aend <=> $bend; |
return $aend <=> $bend; |
} @items; |
} @$items; |
} |
} |
|
|
sub nextday { |
sub nextday { |
Line 273 sub nextday {
|
Line 275 sub nextday {
|
return (&Apache::loncommon::maketime(%th),$th{'month'}); |
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'})) { |
|
my $displayurl=&Apache::lonnet::gettitle($msg->{'url'}); |
|
if ($msg->{'url'}!~/\Q$displayurl\E$/) { |
|
$output .= ' - '.$displayurl; |
|
} |
|
} |
|
if (exists($msg->{'symb'})) { |
|
my $displaysymb=&Apache::lonnet::gettitle($msg->{'symb'}); |
|
if ($msg->{'symb'}!~/\Q$displaysymb\E$/) { |
|
$output .= ' - '.$displaysymb; |
|
} |
|
} |
|
$output .= ' ('.$msg->{'section'}.') '; |
|
return $output; |
|
} |
|
|
sub showday { |
sub showday { |
my ($tk,$mode,%allcal)=@_; |
my ($tk,$mode,%allcal)=@_; |
my %th=&Apache::loncommon::timehash($tk); |
my %th=&Apache::loncommon::timehash($tk); |
my ($nextday,$nextmonth)=&nextday(%th); |
my ($nextday,$nextmonth)=&nextday(%th); |
my $outp=''; |
my @outp; |
if ($mode) { |
if ($mode) { |
my $oneday=24*3600; |
my $oneday=24*3600; |
$tk-=$oneday; |
$tk-=$oneday; |
Line 286 sub showday {
|
Line 311 sub showday {
|
foreach my $item (keys(%allcal)) { |
foreach my $item (keys(%allcal)) { |
my ($course,$startdate,$enddate)=($item=~/^(\w+)\@(\d+)\_(\d+)$/); |
my ($course,$startdate,$enddate)=($item=~/^(\w+)\@(\d+)\_(\d+)$/); |
if (($startdate<$nextday) && ($enddate>=$tk)) { |
if (($startdate<$nextday) && ($enddate>=$tk)) { |
$outp.='___&&&___'.$course.'@'.$startdate.'@'.$enddate.'@'. |
push(@outp,[$course,$startdate,$enddate,$allcal{$item}]); |
$allcal{$item}; |
|
} |
} |
} |
} |
unless ($mode) { |
unless ($mode) { |
return ($nextday,$nextmonth,&normalcell( |
return ($nextday,$nextmonth,&normalcell( |
$th{'day'},$th{'month'},$th{'year'},$outp)); |
$th{'day'},$th{'month'},$th{'year'},\@outp)); |
} elsif ($outp) { |
} elsif (@outp) { |
if ($mode==1) { |
if ($mode==1) { |
return '<br />'.&plaincell($outp); |
return '<br />'.&plaincell(\@outp); |
} else { |
} else { |
return '<ul>'.&listcell($outp).'</ul>'; |
return '<ul>'.&listcell(\@outp).'</ul>'; |
} |
} |
} else { |
} else { |
return ''; |
return ''; |
Line 334 ENDDIA
|
Line 358 ENDDIA
|
# ----------------------------------------------------- Summarize all calendars |
# ----------------------------------------------------- Summarize all calendars |
sub get_all_calendars { |
sub get_all_calendars { |
my %allcal=(); |
my %allcal=(); |
foreach my $course (sort(&Apache::loncommon::findallcourses())) { |
my %courses = &Apache::loncommon::findallcourses(); |
|
foreach my $course (sort(keys(%courses))) { |
%allcal=(%allcal,&readcalendar($course)); |
%allcal=(%allcal,&readcalendar($course)); |
} |
} |
return %allcal; |
return %allcal; |
Line 354 sub output_ics_file {
|
Line 379 sub output_ics_file {
|
my $uid=$event; |
my $uid=$event; |
$uid=~s/[\W\_]/-/gs; |
$uid=~s/[\W\_]/-/gs; |
$uid.='@loncapa'; |
$uid.='@loncapa'; |
my $summary=$allcal{$event}; |
my $summary=&display_msg($allcal{$event}); |
$summary=~s/^INTERNAL\://; |
|
$summary=~s/\s+/ /gs; |
$summary=~s/\s+/ /gs; |
$summary=$env{'course.'.$courseid.'.description'}.': '.$summary; |
$summary=$env{'course.'.$courseid.'.description'}.': '.$summary; |
$r->print("BEGIN:VEVENT$crlf"); |
$r->print("BEGIN:VEVENT$crlf"); |
Line 472 SERVERANNOUNCE
|
Line 496 SERVERANNOUNCE
|
# list servers |
# list servers |
foreach my $host (sort(keys(%Apache::lonnet::hostname))) { |
foreach my $host (sort(keys(%Apache::lonnet::hostname))) { |
if (&Apache::lonnet::allowed('psa',$Apache::lonnet::hostdom{$host})) { |
if (&Apache::lonnet::allowed('psa',$Apache::lonnet::hostdom{$host})) { |
$r->print ('<br /><input type="checkbox" name="postto_'.$host.'" /> '. |
$r->print ('<br /><label><input type="checkbox" name="postto_'.$host.'" /> '. |
$host.' <tt>'.$Apache::lonnet::hostname{$host}.'</tt> '. |
$host.' <tt>'.$Apache::lonnet::hostname{$host}.'</tt> '. |
'<a href="http://'.$Apache::lonnet::hostname{$host}. |
'</label><a href="http://'.$Apache::lonnet::hostname{$host}. |
'/announcement.txt" target="annowin">current</a>'); |
'/announcement.txt" target="annowin">current</a>'); |
} |
} |
} |
} |