--- rat/lonsequence.pm 2002/08/12 18:21:42 1.13
+++ rat/lonsequence.pm 2004/08/29 16:30:53 1.19
@@ -2,7 +2,7 @@
#
# Sequence Handler
#
-# $Id: lonsequence.pm,v 1.13 2002/08/12 18:21:42 albertel Exp $
+# $Id: lonsequence.pm,v 1.19 2004/08/29 16:30:53 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -45,6 +45,8 @@ use GDBM_File;
use Apache::lonratedt;
use Apache::lonratsrv;
use Apache::lonpageflip;
+use Apache::loncommon;
+use Apache::lonlocal;
my %selhash;
my $successtied;
@@ -61,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 {
@@ -89,7 +101,7 @@ function queue(val) {
ENDSCRIPT
}
- $r->print('
');
+ $r->print(&Apache::loncommon::bodytag('Map Contents').''.$url.' ');
# ------------------ This is trying to select. Provide buttons and tie %selhash
if ($ENV{'form.forceselect'}) { $r->print(<
@@ -151,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($_)) {
@@ -162,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='';
@@ -214,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;
}
@@ -230,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;
@@ -247,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,
@@ -266,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);
@@ -275,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(&mt('emfo'));
+ $r->print(<$lt{'emfo'}
+$bodytag
+$lt{'nere'}
+$warnmsg
+
+