# 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( 'Unknown Error

'. 'LON-CAPA

Could not handle sequence resource reference.

'.$errmsg. ''); } # ================================================================ 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(<

$whatend of

$sequencetitle

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__