--- rat/lonsequence.pm 2002/08/31 00:43:13 1.14
+++ rat/lonsequence.pm 2005/03/01 00:22:57 1.23
@@ -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.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;
@@ -46,6 +39,7 @@ use Apache::lonratedt;
use Apache::lonratsrv;
use Apache::lonpageflip;
use Apache::loncommon;
+use Apache::lonlocal;
my %selhash;
my $successtied;
@@ -62,6 +56,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 +156,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 +171,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 +223,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 +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;
@@ -242,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,
@@ -267,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);
@@ -276,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));
- $r->content_type('text/html');
+ &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 {
- $r->content_type('text/html');
+ &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
+
+