--- rat/lonpageflip.pm 2006/03/19 23:06:00 1.67 +++ rat/lonpageflip.pm 2006/05/30 19:47:40 1.69 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.67 2006/03/19 23:06:00 albertel Exp $ +# $Id: lonpageflip.pm,v 1.69 2006/05/30 19:47:40 www Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,6 +30,7 @@ package Apache::lonpageflip; use strict; +use LONCAPA; use Apache::Constants qw(:common :http REDIRECT); use Apache::lonnet; use HTML::TokeParser; @@ -84,28 +85,6 @@ sub hash_src { return ($hash{'src_'.$id},$symb); } -# Inputs are a url, adn a hash ref of -# form name => value pairs -# takes care of properly adding the form name elements and values to the -# the url doing proper escaping of the values and joining with ? or & as -# needed - -sub add_get_param { - my ($url,$form_data) = @_; - my $needs_question_mark = ($url !~ /\?/); - - while (my ($name,$value) = each(%$form_data)) { - if ($needs_question_mark) { - $url.='?'; - $needs_question_mark = 0; - } else { - $url.='&'; - } - $url.=$name.'='.&Apache::lonnet::escape($form_data->{$name}); - } - return $url; -} - sub move { my ($rid,$mapurl,$direction)=@_; my $startoutrid=$rid; @@ -221,6 +200,30 @@ sub navlaunch { ENDNAV $r->print(&Apache::loncommon::end_page()); } + +sub first_accessible_resource { + my $furl; + if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db', + &GDBM_READER(),0640)) { + $furl=$hash{'first_url'}; + if (!&Apache::lonnet::allowed('bre',$furl)) { +# Wow, we cannot see this ... move forward to the next one that we can see + my ($newrid,$newmap)=&move($hash{'first_rid'},$hash{'first_mapurl'},'forward'); +# Build the new URL + my ($newresid,$newmapid)=split(/\./,$newrid); + my $symb=&Apache::lonnet::encode_symb($newmap,$newresid,$hash{'src_'.$newrid}); + $furl=&add_get_param($hash{'src_'.$newrid},{ 'symb' => $symb }); + if ($hash{'encrypted_'.$newrid}) { + $furl=&Apache::lonenc::encrypted($furl); + } + } + untie(%hash); + return $furl; + } else { + return '/adm/navmaps'; + } +} + # ================================================================ Main Handler sub handler { @@ -250,12 +253,7 @@ sub handler { } $currenturl=~s/\.\d+\.(\w+)$/\.$1/; if ($direction eq 'firstres') { - my $furl; - if (tie(my %bighash,'GDBM_File',$env{'request.course.fn'}.'.db', - &GDBM_READER(),0640)) { - $furl=$bighash{'first_url'}; - untie(%bighash); - } + my $furl=&first_accessible_resource(); &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => 'http://'.$ENV{'HTTP_HOST'}.$furl);