# 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__