# The LearningOnline Network with CAPA
# Handler to resolve ambiguous file locations
#
# (TeX Content Handler
#
# 05/29/00,05/30,10/11 Gerd Kortemeyer)
#
# 10/11 Gerd Kortemeyer
package Apache::lonambiguous;
use strict;
use Apache::lonnet;
use Apache::Constants qw(:common REDIRECT);
use GDBM_File;
# ----------------------------------------------------------- Could not resolve
sub getlost {
my $r=shift;
$r->content_type('text/html');
$r->send_http_header;
$r->print('
Unknown Error'.
'LON-CAPA
Could not handle ambiguous file reference.');
}
# ================================================================ Main Handler
sub handler {
my $r=shift;
if ($r->header_only) {
$r->content_type('text/html');
$r->send_http_header;
return OK;
}
# ---------------------------------------------------------- Do we have a case?
my $thisfn;
unless (($thisfn=$ENV{'request.ambiguous'})&&($ENV{'request.course.fn'})) {
getlost($r);
return OK;
}
# ---------------------------------- Should this file have been part of a page?
$thisfn=&Apache::lonnet::declutter($thisfn);
my %hash;
my %bighash;
my $syval='';
if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db',
&GDBM_READER,0640)) {
$syval=$hash{$thisfn};
untie(%hash);
}
# ---------------------------------------------------------- There was an entry
if ($syval) {
if ($syval=~/\_$/) {
# ----------------------------------- Okay, this should have appeared on a page
$syval=~s/\_\_\_$//;
$r->content_type('text/html');
$r->header_out(Location =>
'http://'.$ENV{'HTTP_HOST'}.'/res/'.$syval);
return REDIRECT;
} else {
# There is not really a problem (???), but cannot go back without endless loop
getlost($r);
return OK;
}
}
# ------------------------------------------------ Would be standalone resource
if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
&GDBM_READER,0640)) {
# ---------------------------------------------- Get ID(s) for current resource
my $ids=$bighash{'ids_/res/'.$thisfn};
if ($ids) {
# ------------------------------------------------------------------- Has ID(s)
my @possibilities=split(/\,/,$ids);
my $couldbe='';
map {
if (&allowed('bre',$bighash{'src_'.$_})) {
if ($couldbe) {
$couldbe.=','.$_;
} else {
$couldbe=$_;
}
}
} @possibilities;
if ($couldbe) {
@possibilities=split(/\,/,$couldbe);
if ($#possibilities>0) {
# ----------------------------------------------- Okay, really multiple choices
$r->content_type('text/html');
$r->send_http_header;
$r->print(
'Choose Location'.
'LON-CAPA
Cool.');
untie(%bighash);
return OK;
}
}
}
untie(%bighash);
}
# ------------------------------------ This handler should not have been called
getlost($r);
return OK;
}
1;
__END__