--- rat/lonsequence.pm 2003/09/22 03:02:06 1.16 +++ rat/lonsequence.pm 2005/03/01 00:22:57 1.23 @@ -2,7 +2,7 @@ # # Sequence Handler # -# $Id: lonsequence.pm,v 1.16 2003/09/22 03:02:06 www Exp $ +# $Id: lonsequence.pm,v 1.23 2005/03/01 00:22:57 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -28,13 +28,6 @@ # # (Handler to resolve ambiguous file locations # -# (TeX Content Handler -# -# 05/29/00,05/30,10/11 Gerd Kortemeyer) -# -# 10/11,10/12 Gerd Kortemeyer) -# -# 10/16 Gerd Kortemeyer package Apache::lonsequence; @@ -246,6 +239,8 @@ sub handler { # ------------------------------------------------------------ Tie symb db file my $disurl=''; my $dismapid=''; + my $exitdisid = ''; + my $arrow_dir = ''; if (($ENV{'request.course.fn'}) && (!$ENV{'form.forceselect'})) { my $last; @@ -257,24 +252,32 @@ sub handler { my $direction=''; my $prevmap=''; if ($last) { - ($prevmap,$direction)=(split(/\_\_\_/,$last)); + ($prevmap,undef,$direction)=&Apache::lonnet::decode_symb($last); } # ------------------------------------------------------------- Tie big db file if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', &GDBM_READER(),0640)) { my $disid=''; + my $randomout =''; if ($direction eq 'back') { $disid=$bighash{'map_finish_'.$requrl}; } else { $disid=$bighash{'map_start_'.$requrl}; - } + } if ($disid) { $disurl=$bighash{'src_'.$disid}; $dismapid=(split(/\./,$disid))[1]; + $randomout = $bighash{'randomout_'.$disid}; + } elsif (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db', + &GDBM_READER(),0640)) { + $last=$hash{'last_known'}; + untie(%hash); } -# ------------------------- If this is an empty one, skip to next non-empty one - if ((!$disurl) && ($disid)) { + + +# ----------- If this is an empty one, or hidden, skip to next non-empty or non-hidden one + while ( ((!$disurl) && ($disid)) || ($randomout && $disid) ) { $direction=($direction?$direction:'forward'); ($disid,$requrl)= &Apache::lonpageflip::fullmove($disid, @@ -282,8 +285,11 @@ sub handler { if ($disid) { $disurl=$bighash{'src_'.$disid}; $dismapid=(split(/\./,$disid))[1]; + $randomout = $bighash{'randomout_'.$disid}; } } + $exitdisid = $disid; + $arrow_dir = $direction; # --------------------------------------- Untie hash, make sure to come by here untie(%bighash); @@ -291,18 +297,48 @@ sub handler { } # now either disurl is set (going to first page), or we need another display - if ($disurl) { # -------------------------------------------------- Has first or last resource - &Apache::lonnet::symblist($requrl,$disurl => $dismapid, - 'last_known' => &Apache::lonnet::declutter($disurl)); + &Apache::lonnet::symblist($requrl,$disurl => [$disurl,$dismapid], + 'last_known' => [$disurl,$dismapid]); &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl); return REDIRECT; } else { &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - &viewmap($r,$requrl); + if ($exitdisid eq '' && $arrow_dir ne '') { + my %lt =&Apache::lonlocal::texthash( + 'back' => 'beginning', + 'forward' => 'end', + 'emfo' => 'Empty Folder/Sequence', + 'nere' => 'Next resource could not be displayed', + 'goba' => 'Go Back', + 'nacc' => 'Navigate Course Content', + ); + my $warnmsg = 'As all folders and sequences '; + if ($arrow_dir eq 'forward') { + $warnmsg .= &mt('following the current resource were empty').','; + } elsif ($arrow_dir eq 'back') { + $warnmsg .= &mt('preceding the current resource were empty').','; + } + $warnmsg .= &mt('you have now reached the').' '.$lt{$arrow_dir}.' '.&mt('of the course.'); + my $bodytag=&Apache::loncommon::bodytag('Empty Folder/Sequence'); + $r->print(<$lt{'emfo'} +$bodytag +

$lt{'nere'}

+

$warnmsg

+ + + +ENDNONE + } else { + &viewmap($r,$requrl); + } return OK; } }