--- rat/lonsequence.pm 2002/08/31 00:43:13 1.14 +++ rat/lonsequence.pm 2004/09/10 06:38:24 1.20 @@ -2,7 +2,7 @@ # # Sequence Handler # -# $Id: lonsequence.pm,v 1.14 2002/08/31 00:43:13 www Exp $ +# $Id: lonsequence.pm,v 1.20 2004/09/10 06:38:24 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -46,6 +46,7 @@ use Apache::lonratedt; use Apache::lonratsrv; use Apache::lonpageflip; use Apache::loncommon; +use Apache::lonlocal; my %selhash; my $successtied; @@ -62,6 +63,16 @@ sub attemptread { } } +sub mapread { + my $fn=shift; + &Apache::lonnet::repcopy($fn); + if (-e $fn) { + return &Apache::lonratedt::mapread($fn,''); + } else { + return (); + } +} + # ---------------------------------------------------------------- View Handler sub viewmap { @@ -152,6 +163,10 @@ ENDSELECT } } # ----------------------------- successtied is now '1' if in working selectmode + my ($errtext,$fatal)=&mapread(&Apache::lonnet::filelocation('',$url),''); + if ($fatal==1) { + $r->print('

'.&mt('Map contents are not shown in order.').'


'); + } my $idx=0; foreach (&attemptread(&Apache::lonnet::filelocation('',$url))) { if (defined($_)) { @@ -163,7 +178,7 @@ ENDSELECT $title=~s/\&colon\;/\:/g; $url=~s/\&colon\;/\:/g; unless ($title) { $title=(split(/\//,$url))[-1] }; - unless ($title) { $title='Empty'; } + unless ($title) { $title=''.&mt('Empty').''; } if ($url) { if ($successtied) { my $checked=''; @@ -215,7 +230,7 @@ sub handler { my $r=shift; if ($r->header_only) { - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; return OK; } @@ -231,6 +246,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; @@ -248,18 +265,26 @@ sub handler { 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, @@ -267,8 +292,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); @@ -276,18 +304,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)); - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl); return REDIRECT; } else { - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; - &viewmap($r,$requrl); + if ($exitdisid eq '') { + 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; } }