--- loncom/interface/lonnavmaps.pm 2002/03/16 08:56:53 1.32 +++ loncom/interface/lonnavmaps.pm 2002/09/05 19:47:29 1.48 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.32 2002/03/16 08:56:53 albertel Exp $ +# $Id: lonnavmaps.pm,v 1.48 2002/09/05 19:47:29 bowersj2 Exp $ # # Copyright Michigan State University Board of Trustees # @@ -67,6 +67,10 @@ my %courseopt; my %useropt; my %parmhash; +# This parameter keeps track of whether obtaining the user's information +# failed, which the colorizer in astatus can use +my $networkFailedFlag = 0; + # ------------------------------------------------------------------ Euclid gcd sub euclid { @@ -338,9 +342,8 @@ sub followlinks () { sub tracetable { my ($sofar,$rid,$beenhere,$showtypes,$indent,$linkid)=@_; my $newshowtypes=$showtypes; - my $newlinkid=$linkid; my $further=$sofar; - #$Apache::lonxml::debug=1; +# $Apache::lonxml::debug=1; &Apache::lonxml::debug("$rid ; $linkid ; $sofar ; $beenhere ; ".$hash{'src_'.$rid}); if ($beenhere=~/\&$rid\&/) { return $further; } $beenhere.=$rid.'&'; @@ -355,9 +358,11 @@ sub tracetable { eq 'page') { $tprefix='j'; if ($indent) { $tprefix='i'.$indent.','.$tprefix; } + if ($linkid) { $tprefix='l'.$linkid.','.$tprefix; } $newshowtypes='problems'; $indent++; - $newlinkid=$rid; + #if in a .page continue to link the encompising .page + if (!$linkid) { $linkid=$rid; } } if (defined($rows[$sofar])) { $rows[$sofar].='&'.$tprefix.$rid; @@ -368,10 +373,10 @@ sub tracetable { (defined($hash{'map_finish_'.$hash{'src_'.$rid}}))) { my $frid=$hash{'map_finish_'.$hash{'src_'.$rid}}; $sofar=&tracetable($sofar,$hash{'map_start_'.$hash{'src_'.$rid}}, - '&'.$frid.'&',$newshowtypes,$indent,$newlinkid); + '&'.$frid.'&',$newshowtypes,$indent,$linkid); &addresource($hash{'src_'.$frid},\$sofar,$frid,$newshowtypes, - $indent,$newlinkid); - if ($tprefix =~ /j$/) { $indent--; } + $indent,$linkid); + if ($tprefix =~ /j$/) { $indent--; $linkid=''; } } } else { &addresource($hash{'src_'.$rid},\$sofar,$rid,$showtypes, @@ -410,10 +415,10 @@ sub handler { if ($ENV{'request.course.fn'}) { $fn=$ENV{'request.course.fn'}; if (-e "$fn.db") { - if ((tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER,0640)) && + if ((tie(%hash,'GDBM_File',"$fn.db",&GDBM_READER(),0640)) && (tie(%parmhash,'GDBM_File', $ENV{'request.course.fn'}.'_parms.db', - &GDBM_READER,0640))) { + &GDBM_READER(),0640))) { $hashtied=1; } } @@ -433,8 +438,10 @@ sub handler { &Apache::loncommon::no_cache($r); $r->send_http_header; - my $firstres=$hash{'map_start_/res/'.$ENV{'request.course.uri'}}; - my $lastres=$hash{'map_finish_/res/'.$ENV{'request.course.uri'}}; + my $firstres=$hash{'map_start_'. + &Apache::lonnet::clutter($ENV{'request.course.uri'})}; + my $lastres=$hash{'map_finish_'. + &Apache::lonnet::clutter($ENV{'request.course.uri'})}; if (!(($firstres) && ($lastres))) { $r->print('Coursemap undefined.'); } else { @@ -455,9 +462,9 @@ sub handler { my ($cdom,$cnum)=split(/\_/,$cid); my $userprefix=$uname.'_'.$udom.'_'; - + unless ($uhome eq 'no_host') { -# -------------------------------------------------------------- Get coursedata +# ------------------------------------------------- Get coursedata (if present) unless ((time-$courserdatas{$cid.'.last_cache'})<240) { my $reply=&Apache::lonnet::reply('dump:'.$cdom.':'.$cnum. ':resourcedata',$chome); @@ -465,6 +472,11 @@ sub handler { $courserdatas{$cid}=$reply; $courserdatas{$cid.'.last_cache'}=time; } + # check to see if network failed + elsif ( $reply=~/no.such.host/i || $reply=~/con.*lost/i ) + { + $networkFailedFlag = 1; + } } foreach (split(/\&/,$courserdatas{$cid})) { my ($name,$value)=split(/\=/,$_); @@ -488,13 +500,7 @@ sub handler { @rows=(); - &tracetable(0,$firstres,'&'.$lastres.'&','',0); - if ($hash{'src_'.$lastres}) { - my $brepriv=&Apache::lonnet::allowed('bre',$hash{'src_'.$lastres}); - if (($brepriv eq '2') || ($brepriv eq 'F')) { - $rows[$#rows+1]=''.$lastres; - } - } + &tracetable(0,$firstres,'&','',0); # ------------------------------------------------------------------ Page parms @@ -566,16 +572,19 @@ sub handler { } } # ----------------------------------------------------------- Start Page Output - $r->print('Navigate LON-CAPA Maps'); - $r->print('print( + 'Navigate Course Map'); if (($currenturl=~/^\/res/) && ($currenturl!~/^\/res\/adm/)) { - $r->print(' onLoad="window.location.hash='."'curloc'".'"'); + $bodytagadd='onLoad="window.location.hash='."'curloc'".'"'; } - $r->print('>'. - ''. - '

Navigate Course Map

'. - "

$date

"); + $r->print(&Apache::loncommon::bodytag('Navigate Course Map','', + $bodytagadd)); + $r->print(''); + my $desc=$ENV{'course.'.$ENV{'request.course.id'}.'.description'}; + if (defined($desc)) { $r->print("

$desc

\n"); } + $r->print("

$date

\n"); $r->rflush(); $r->print(' New discussion since '. localtime($lastcheck). @@ -584,6 +593,15 @@ sub handler { ($currenturl!~/^\/res\/adm/)) { $r->print('Current Location

'); } + + # Handle a network error + + if ($networkFailedFlag) + { + $r->print('

LON-CAPA network failure.

'."\n"); + $r->print("

LON-CAPA's network is having difficulties, some problem" . + " information, such as due dates, will not be available."); + } # ----------------------------------------------------- The little content list for ($i=0;$i<=$#rows;$i++) { if ($rows[$i]) { @@ -607,10 +625,17 @@ sub handler { $r->print("\n"); my @colcont=split(/\&/,$rows[$i]); my $avespan=$lcm/($#colcont+1); + + # for each item I wish to print on this row... for ($j=0;$j<=$#colcont;$j++) { my $indent;my $indentstr; my $linkid; my $rid=$colcont[$j]; + $rid=~/(\d+)\.(\d+)$/; + my $src= + &Apache::lonnet::declutter($hash{'src_'.$1.'.'.$2}); + my $symb= + &Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'.$src; my $add=''; my $adde=''; my $hwk=''; @@ -621,6 +646,12 @@ sub handler { $rid=$1; $add=''; $adde=''; + if (($ENV{'user.adv'}) && + ($parmhash{$symb.'.0.parameter_randompick'})) { + $adde=' (randomly select '. + $parmhash{$symb.'.0.parameter_randompick'}. + ')'; + } } if ($rid=~/^j(.+)/) { $rid=$1; } if ($rid=~/^p(\d)(\d)\"([\w\: \(\)\/\,]*)\"(.+)/) { @@ -629,19 +660,36 @@ sub handler { my $tcode=$2; my $ctext=$3; $rid=$4; - if ($tcode eq '1') { + + # will open later + if ($tcode eq '1') { $add=''; } + + # solved/correct if ($code eq '3') { $add=''; - } elsif ($code eq '4') { + } elsif ($code eq '4') { # partially correct $add=''; } else { - $add=''; - if ($tcode eq '2') { + # not attempted + + # we end up here on network failure, so pick a neutral + # color if the network failed instead of bright red. + if ( $networkFailedFlag ) + { + $add = ''; + } + else + { + $add=''; + } + + if ($tcode eq '2') { # open, not past due $add=''; } - if ($tcode eq '4') { + + if ($tcode eq '4') { # due in next 24 hours $add=''; $adde=''; } @@ -659,18 +707,17 @@ sub handler { $hwk=''; $hwke=' ('.$ctext.')'; } + if ($networkFailedFlag) + { + $hwke=' (status unavailable)'; + } } - if ($hash{'src_'.$rid} eq $currenturl) { + if ($rid && $hash{'src_'.$rid} eq $currenturl) { $add=$add.''. '> '; $adde= ' <'.$adde; } - my $src= - &Apache::lonnet::declutter($hash{'src_'.$rid}); - $rid=~/^(\d+)\.(\d+)$/; - my $symb= - &Apache::lonnet::declutter($hash{'map_id_'.$1}).'___'.$2.'___'.$src; if ($discussiontimes{$symb}>$lastcheck) { $adde= ''. @@ -703,9 +750,18 @@ sub handler { for(my $i=-1;$i<$indent;$i++) { $indentstr.=$is; } } if (!$linkid) { $linkid=$rid; } - $r->print($add.$indentstr. - ''.$hwk. - $hash{'title_'.$rid}.$hwke.''.$adde); + if ($hash{'randomout_'.$rid}) { + $adde=' (hidden)'.$adde; + } + $r->print($add.$indentstr); + if ($rid) { + $r->print(''. + $hwk.$hash{'title_'.$rid}.$hwke.''); + } + $r->print($adde); } $r->print(''); }