# The LearningOnline Network with CAPA
#
# Sequence Handler
#
# (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;
use strict;
use Apache::lonnet;
use Apache::Constants qw(:common :http REDIRECT);
use GDBM_File;
# ----------------------------------------------------------- Could not resolve
sub getlost {
my ($r,$errmsg)=@_;
$r->content_type('text/html');
$r->send_http_header;
$r->print(
'<head><title>Unknown Error</title></head><body bgcolor="#FFFFFF"><h1>'.
'LON-CAPA</h1>Could not handle sequence resource reference.<p>'.$errmsg.
'</body></html>');
}
# ================================================================ Main Handler
sub handler {
my $r=shift;
if ($r->header_only) {
$r->content_type('text/html');
$r->send_http_header;
return OK;
}
my %hash;
my %bighash;
my $requrl=$r->uri;
# ------------------------------------------------------------ Tie symb db file
if ($ENV{'request.course.fn'}) {
my $last;
if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db',
&GDBM_READER,0640)) {
$last=$hash{'last_direction'};
untie(%hash);
}
my $direction='';
my $prevmap='';
if ($last) {
($prevmap,$direction)=(split(/\_\_\_/,$last));
}
# ------------------------------------------------------------- Tie big db file
if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
&GDBM_READER,0640)) {
my $disid='';
my $whatend='';
if ($direction eq 'back') {
$disid=$bighash{'map_finish_'.$requrl};
$whatend='End';
} else {
$disid=$bighash{'map_start_'.$requrl};
$whatend='Beginning';
}
my $disurl='';
my $dismapid='';
if ($disid) {
$disurl=$bighash{'src_'.$disid};
$dismapid=(split(/\./,$disid))[1];
}
my $symb='';
my $sequencetitle='';
unless($disurl) {
if ($symb=&Apache::lonnet::symbread()) {
my ($mapurl,$mapid)=split(/\_\_\_/,$symb);
$sequencetitle=$bighash{'title_'.
$bighash{'map_pc_/res/'.$mapurl}.'.'.
$mapid};
}
}
# --------------------------------------- Untie hash, make sure to come by here
untie(%bighash);
if ($disurl) {
# -------------------------------------------------- Has first or last resource
&Apache::lonnet::symblist($requrl,$disurl => $dismapid,
'last_known' => &Apache::lonnet::declutter($disurl));
$r->content_type('text/html');
$r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$disurl);
return REDIRECT;
} else {
# ---------- Does not have first or last resource, try to find out where we are
unless ($symb) {
$r->internal_redirect('/adm/ambiguous');
}
$r->content_type('text/html');
$r->send_http_header;
$r->print(<<ENDSYMB);
<html><body bgcolor="#FFFFFF">
<h2>$whatend of</h2>
<h1>$sequencetitle</h1>
</body></html>
ENDSYMB
return OK
}
} else {
&getlost($r,'Could not access course structure.');
return OK;
}
} else {
$ENV{'user.error.msg'}="$requrl:bre:0:0:Course not initialized";
return HTTP_NOT_ACCEPTABLE;
}
return OK;
}
1;
__END__
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>