--- rat/lonambiguous.pm 2000/10/12 02:14:01 1.1 +++ rat/lonambiguous.pm 2000/10/12 14:54:08 1.2 @@ -5,7 +5,7 @@ # # 05/29/00,05/30,10/11 Gerd Kortemeyer) # -# 10/11 Gerd Kortemeyer +# 10/11,10/12 Gerd Kortemeyer package Apache::lonambiguous; @@ -18,11 +18,13 @@ use GDBM_File; # ----------------------------------------------------------- Could not resolve sub getlost { - my $r=shift; + my ($r,$errmsg)=@_; $r->content_type('text/html'); $r->send_http_header; - $r->print('Unknown Error'. - '

LON-CAPA

Could not handle ambiguous file reference.'); + $r->print( + 'Unknown Error

'. + 'LON-CAPA

Could not handle ambiguous resource reference.

'.$errmsg. + ''); } # ================================================================ Main Handler @@ -36,11 +38,39 @@ sub handler { return OK; } +# ---------------------------------------------------------- Is this selecting? + + my %bighash; + + if ($ENV{'form.selecturl'}) { + my $envkey; + if (tie(%bighash,'GDBM_File',$ENV{'request.course.fn'}.'.db', + &GDBM_READER,0640)) { + foreach $envkey (keys %ENV) { + if ($envkey=~/^form\.(\d+)\.(\d+)$/) { + my $mapid=$1; + my $resid=$2; + my $resurl=$bighash{'src_'.$mapid.'.'.$resid}; + &Apache::lonnet::symblist($bighash{'map_id_'.$mapid}, + $resurl => $resid); + $r->header_out(Location => + 'http://'.$ENV{'HTTP_HOST'}.$resurl); + return REDIRECT; + } + } + untie(%bighash); +# ---------------------------------------------------- Update symb and redirect + } else { + &getlost($r,'Could not access course structure.'); + return OK; + } + } + # ---------------------------------------------------------- Do we have a case? my $thisfn; unless (($thisfn=$ENV{'request.ambiguous'})&&($ENV{'request.course.fn'})) { - getlost($r); + &getlost($r,'Could not find information on resource.'); return OK; } @@ -48,7 +78,6 @@ sub handler { $thisfn=&Apache::lonnet::declutter($thisfn); my %hash; - my %bighash; my $syval=''; if (tie(%hash,'GDBM_File',$ENV{'request.course.fn'}.'_symb.db', @@ -56,8 +85,11 @@ sub handler { $syval=$hash{$thisfn}; untie(%hash); } + # ---------------------------------------------------------- There was an entry + if ($syval) { + if ($syval=~/\_$/) { # ----------------------------------- Okay, this should have appeared on a page $syval=~s/\_\_\_$//; @@ -67,7 +99,7 @@ sub handler { return REDIRECT; } else { # There is not really a problem (???), but cannot go back without endless loop - getlost($r); + &getlost($r,'The nature of the problem is unclear'); return OK; } } @@ -83,7 +115,7 @@ sub handler { my @possibilities=split(/\,/,$ids); my $couldbe=''; map { - if (&allowed('bre',$bighash{'src_'.$_})) { + if (&Apache::lonnet::allowed('bre',$bighash{'src_'.$_})) { if ($couldbe) { $couldbe.=','.$_; } else { @@ -97,9 +129,31 @@ sub handler { # ----------------------------------------------- Okay, really multiple choices $r->content_type('text/html'); $r->send_http_header; - $r->print( - 'Choose Location'. - '

LON-CAPA

Cool.'); + $r->print(<Choose Location + +

LON-CAPA

+The resource you had been accessing appears more than once in this course, +and LON-CAPA has insufficient session information to determine which instance +of the resource you meant. +

+Please click on the instance of the resource you intended to access: +

+

+ + + + +ENDSTART + map { + my $mapurl=$bighash{'map_id_'.(split(/\./,$_))[0]}; + $r->print(''); + } @possibilities; + $r->print('
 TitleTypePart of ...
'.$bighash{'title_'.$_}. + ''.$bighash{'type_'.$_}. + ''.$mapurl. + '
'); untie(%bighash); return OK; } @@ -109,7 +163,7 @@ sub handler { } # ------------------------------------ This handler should not have been called - getlost($r); + &getlost($r,'Invalid call of handler'); return OK; }