--- rat/lonambiguous.pm 2003/04/12 15:43:58 1.9
+++ rat/lonambiguous.pm 2005/03/01 00:22:57 1.15
@@ -1,7 +1,7 @@
# The LearningOnline Network with CAPA
# Handler to resolve ambiguous file locations
#
-# $Id: lonambiguous.pm,v 1.9 2003/04/12 15:43:58 www Exp $
+# $Id: lonambiguous.pm,v 1.15 2005/03/01 00:22:57 albertel Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -25,11 +25,6 @@
#
# http://www.lon-capa.org/
#
-# (TeX Content Handler
-#
-# 05/29/00,05/30,10/11 Gerd Kortemeyer)
-#
-# 10/11,10/12,10/16 Gerd Kortemeyer
package Apache::lonambiguous;
@@ -38,6 +33,7 @@ use Apache::lonnet;
use Apache::Constants qw(:common REDIRECT);
use GDBM_File;
use Apache::loncommon;
+use Apache::lonlocal;
my %bighash;
@@ -54,7 +50,8 @@ sub cleanup {
sub getlost {
my ($r,$errmsg)=@_;
- $r->content_type('text/html');
+ $errmsg=&mt($errmsg);
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
$r->print(
'
Unknown Error'.
@@ -65,11 +62,20 @@ sub getlost {
# ================================================================ Main Handler
+sub make_symb {
+ my ($id)=@_;
+ my ($mapid,$resid)=split(/\./,$id);
+ my $map=$bighash{'map_id_'.$mapid};
+ my $res=$bighash{'src_'.$id};
+ my $symb=&Apache::lonnet::encode_symb($map,$resid,$res);
+ return $symb;
+}
+
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;
}
@@ -87,7 +93,7 @@ sub handler {
my $resid=$2;
my $resurl=$bighash{'src_'.$mapid.'.'.$resid};
&Apache::lonnet::symblist($bighash{'map_id_'.$mapid},
- $resurl => $resid);
+ $resurl => [$resurl,$resid]);
untie(%bighash);
$r->header_out(Location =>
'http://'.$ENV{'HTTP_HOST'}.$resurl);
@@ -124,13 +130,13 @@ sub handler {
# ---------------------------------------------------------- There was an entry
if ($syval) {
-
- if ($syval=~/\_$/) {
+ my ($page,undef,$res)=&Apache::lonnet::decode_symb($syval);
+ if ($res eq 'page') {
# ----------------------------------- Okay, this should have appeared on a page
- $syval=~s/\_\_\_$//;
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->header_out(Location =>
- 'http://'.$ENV{'HTTP_HOST'}.'/res/'.$syval);
+ 'http://'.$ENV{'HTTP_HOST'}.
+ &Apache::lonnet::clutter($page));
return REDIRECT;
} else {
# There is not really a problem (???), but cannot go back without endless loop
@@ -138,7 +144,12 @@ sub handler {
return OK;
}
}
-
+# ------------------------------------Encrypted requests go straight to navmaps
+ if ($ENV{'request.enc'}) {
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.'/adm/navmaps');
+ return REDIRECT;
+ }
# ------------------------------------------------ Would be standalone resource
if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db',
@@ -149,20 +160,33 @@ sub handler {
# ------------------------------------------------------------------- Has ID(s)
my @possibilities=split(/\,/,$ids);
my $couldbe='';
- map {
- if (&Apache::lonnet::allowed('bre',$bighash{'src_'.$_})) {
+ foreach (@possibilities) {
+ if ($bighash{'encrypted_'.$_}) { next; }
+ my $symb=&make_symb($_);
+ if (&Apache::lonnet::allowed('bre',$bighash{'src_'.$_},$symb)) {
if ($couldbe) {
$couldbe.=','.$_;
} else {
$couldbe=$_;
}
}
- } @possibilities;
+ }
if ($couldbe) {
@possibilities=split(/\,/,$couldbe);
+ if ($#possibilities==0) {
+ my $id=$possibilities[0];
+ my $resurl=$bighash{'src_'.$id};
+ my $mapurl=$bighash{'map_id_'.(split(/\./,$id))[0]};
+ my $symb=&make_symb($id);
+ &Apache::loncommon::content_type($r,'text/html');
+ &Apache::lonnet::logthis('http://'.$ENV{'HTTP_HOST'}.$resurl.'?symb='.$symb);
+ $r->header_out(Location =>
+ 'http://'.$ENV{'HTTP_HOST'}.$resurl.'?symb='.$symb);
+ return REDIRECT;
+ }
if ($#possibilities>0) {
# ----------------------------------------------- Okay, really multiple choices
- $r->content_type('text/html');
+ &Apache::loncommon::content_type($r,'text/html');
$r->send_http_header;
my $bodytag=
&Apache::loncommon::bodytag('Pick Instance of Resource');
@@ -174,24 +198,21 @@ and LON-CAPA has insufficient session in
of the resource you meant.
Please click on the instance of the resource you intended to access:
-
-