--- rat/lonpageflip.pm 2003/09/15 21:50:49 1.43 +++ rat/lonpageflip.pm 2005/02/17 09:09:57 1.51 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.43 2003/09/15 21:50:49 albertel Exp $ +# $Id: lonpageflip.pm,v 1.51 2005/02/17 09:09:57 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -26,17 +26,6 @@ # # http://www.lon-capa.org/ # -# (Page Handler -# -# (TeX Content Handler -# -# 05/29/00,05/30 Gerd Kortemeyer) -# 08/30,08/31,09/06,09/14,09/15,09/16,09/19,09/20,09/21,09/23, -# 10/02 Gerd Kortemeyer) -# -# 10/03,10/05,10/06,10/07,10/09,10/10,10/11,10/16,10/17, -# 11/14,11/16, -# 10/01/01,05/01,05/28,07/05 Gerd Kortemeyer package Apache::lonpageflip; @@ -82,6 +71,14 @@ sub fullmove { return($rid,$mapurl); } +sub hash_src { + my ($id)=@_; + if ($hash{'encrypted_'.$id}) { + return &Apache::lonenc::encrypted($hash{'src_'.$id}); + } + return $hash{'src_'.$id}; +} + sub move { my ($rid,$mapurl,$direction)=@_; my $startoutrid=$rid; @@ -120,6 +117,10 @@ sub move { $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'sequence') { $mapurl=$hash{'src_'.$next}; $next=$hash{'map_start_'.$hash{'src_'.$next}}; + } elsif ( +# This jumps back up from an empty sequence, to a page up one level + $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'page') { + $mapurl=$hash{'map_id_'.(split(/\./,$next))[0]}; } } elsif ((split(/\./,$startoutrid))[0]!=(split(/\./,$next))[0]) { @@ -156,7 +157,11 @@ sub move { $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'sequence') { $mapurl=$hash{'src_'.$next}; $next=$hash{'map_finish_'.$hash{'src_'.$next}}; - } + } elsif ( + $hash{'map_type_'.$hash{'map_pc_'.$hash{'src_'.$next}}} eq 'page') { +# This jumps back up from an empty sequence, to a page up one level + $mapurl=$hash{'map_id_'.(split(/\./,$next))[0]}; + } } elsif ((split(/\./,$startoutrid))[0]!=(split(/\./,$next))[0]) { # This comes back up from a map (going up one level); @@ -174,9 +179,9 @@ sub handler { # ------------------------------------------- Set document type for header only if ($r->header_only) { - $r->content_type('text/html'); - $r->send_http_header; - return OK; + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; + return OK; } my %cachehash=(); @@ -190,6 +195,10 @@ sub handler { $ENV{'form.postdata'}=~/(\w+)\:(.*)/; my $direction=$1; my $currenturl=$2; + if ($currenturl=~m|^/enc/|) { + $currenturl=&Apache::lonenc::unencrypted($currenturl); + } + $currenturl=~s/\.\d+\.(\w+)$/\.$1/; if ($direction eq 'return') { # -------------------------------------------------------- Return to last known my $last; @@ -204,14 +213,19 @@ sub handler { my ($murl,$fn)=&Apache::lonnet::decode_symb($last); my $id; ($murl,$id,$fn)=&Apache::lonnet::decode_symb(&Apache::lonnet::symbread($fn)); - $newloc=$hash{'src_'. - $hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id}; - unless ($newloc) { $newloc='/adm/noidea.html'; } + $id=$hash{'map_pc_'.&Apache::lonnet::clutter($murl)}.'.'.$id; + $newloc=$hash{'src_'.$id}; + if ($newloc) { + if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); } + + } else { + $newloc='/adm/noidea.html'; + } untie %hash; } else { $newloc='/adm/noidea.html'; } - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$newloc); @@ -232,7 +246,7 @@ sub handler { if ($last) { $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[1]); } else { - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html'); return REDIRECT; @@ -259,7 +273,8 @@ sub handler { # -------------------------------------- Do we have one and only one empty URL? my $safecount=0; while (($next) && ($next!~/\,/) && - ((!$hash{'src_'.$next}) || ($hash{'randomout_'.$next})) + ((!$hash{'src_'.$next}) || + ((!$ENV{'request.role.adv'}) && $hash{'randomout_'.$next})) && ($safecount<10000)) { ($next,$endupmap)=&move($next,$endupmap,$direction); $safecount++; @@ -270,7 +285,7 @@ sub handler { @possibilities=split(/\,/,$next); if ($#possibilities==0) { # ---------------------------------------------- Only one possibility, redirect - $redirecturl=$hash{'src_'.$next}; + $redirecturl=&hash_src($next); $cachehash{$endupmap} {&Apache::lonnet::declutter($redirecturl)} =(split(/\./,$next))[1]; @@ -331,13 +346,13 @@ sub handler { &Apache::lonnet::appenv('user.criticalcheck.time'=>time); } - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$redirecturl); return REDIRECT; } else { # --------------------------------------------------------- There was a problem - $r->content_type('text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->send_http_header; if ($#possibilities>0) { my $bodytag= @@ -388,7 +403,7 @@ ENDNONE } } else { # ---------------------------------------- No, could not determine where we are - if ( $Apache::lonnet::perlvar{'MODPERL2'} ) { + if ( &Apache::lonnet::mod_perl_version() == 2 ) { &Apache::lonnet::cleanenv(); } $r->internal_redirect('/adm/ambiguous'); 500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.