--- rat/lonpageflip.pm 2006/01/09 18:51:26 1.62 +++ rat/lonpageflip.pm 2006/08/18 20:24:53 1.70 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.62 2006/01/09 18:51:26 albertel Exp $ +# $Id: lonpageflip.pm,v 1.70 2006/08/18 20:24:53 albertel Exp $ # # Copyright Michigan State University Board of Trustees # @@ -30,8 +30,10 @@ package Apache::lonpageflip; use strict; +use LONCAPA; use Apache::Constants qw(:common :http REDIRECT); use Apache::lonnet; +use Apache::loncommon(); use HTML::TokeParser; use GDBM_File; @@ -46,6 +48,7 @@ sub cleanup { &Apache::lonnet::logthis('Failed cleanup pageflip: hash'); } } + return OK; } sub addrid { @@ -97,9 +100,11 @@ sub move { $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}}; } foreach my $id (split(/\,/,$hash{'to_'.$rid})) { - my $thiscond= - &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}}); - if ($thiscond>=$mincond) { + my $condition= $hash{'conditions_'.$hash{'goesto_'.$id}}; + my $rescond = &Apache::lonnet::docondval($condition); + my $linkcond = &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}}); + my $thiscond = ($rescond<$linkcond)?$rescond:$linkcond; + if ($thiscond>=$mincond) { if ($posnext) { $posnext.=','.$id.':'.$thiscond; } else { @@ -137,8 +142,10 @@ sub move { $rid=$hash{'ids_'.$hash{'map_id_'.(split(/\./,$rid))[0]}}; } foreach my $id (split(/\,/,$hash{'from_'.$rid})) { - my $thiscond= - &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}}); + my $condition= $hash{'conditions_'.$hash{'comesfrom_'.$id}}; + my $rescond = &Apache::lonnet::docondval($condition); + my $linkcond = &Apache::lonnet::directcondval($hash{'condid_'.$hash{'undercond_'.$id}}); + my $thiscond = ($rescond<$linkcond)?$rescond:$linkcond; if ($thiscond>=$mincond) { if ($posnext) { $posnext.=','.$id.':'.$thiscond; @@ -180,10 +187,7 @@ sub navlaunch { &Apache::loncommon::content_type($r,'text/html'); &Apache::loncommon::no_cache($r); $r->send_http_header; - my $html=&Apache::lonxml::xmlbegin(); - $r->print("$html\n"); - $r->print(''. - &Apache::loncommon::bodytag('Launched')); + $r->print(&Apache::loncommon::start_page('Launched')); $r->print(<Goto first resource

Collapse external navigation window

ENDNAV - $r->print(&Apache::loncommon::endbodytag().''); + $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 { @@ -226,15 +254,10 @@ 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); + &Apache::loncommon::absolute_url().$furl); return REDIRECT; } @@ -268,7 +291,7 @@ sub handler { } else { &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => - 'http://'.$ENV{'HTTP_HOST'}.$newloc); + &Apache::loncommon::absolute_url().$newloc); return REDIRECT; } @@ -291,7 +314,8 @@ sub handler { if ($direction eq 'return') { &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => - 'http://'.$ENV{'HTTP_HOST'}.'/adm/noidea.html'); + &Apache::loncommon::absolute_url(). + '/adm/noidea.html'); return REDIRECT; } else { &navlaunch($r); @@ -393,8 +417,8 @@ sub handler { } &Apache::loncommon::content_type($r,'text/html'); - my $url='http://'.$ENV{'HTTP_HOST'}.$redirecturl; - if ($redirectsymb ne '') { $url.='?symb='.&Apache::lonnet::escape($redirectsymb); } + my $url=&Apache::loncommon::absolute_url().$redirecturl; + $url = &add_get_param($url, { 'symb' => $redirectsymb}); $r->header_out(Location => $url); return REDIRECT; } else { @@ -413,11 +437,10 @@ sub handler { 'titleheader' => 'Title', 'type' => 'Type'); if ($#possibilities>0) { - my $bodytag= - &Apache::loncommon::bodytag('Multiple Resources'); + my $start_page= + &Apache::loncommon::start_page('Multiple Resources'); $r->print(<Choose Next Location -$bodytag +$start_page

$lt{'wherenext'}

$lt{'pick'}: @@ -428,18 +451,20 @@ ENDSTART foreach my $id (@possibilities) { $r->print( ''. + &add_get_param($multichoicehash{'src_'.$id}, + {'symb' => + $multichoicehash{'symb_'.$id}, + }).'">'. $multichoicehash{'title_'.$id}. ''.$multichoicehash{'type_'.$id}. ''); } $r->print(''); } else { - my $bodytag=&Apache::loncommon::bodytag('No Resource'); + my $start_page= + &Apache::loncommon::start_page('No Resource'); $r->print(<No Resource -$bodytag +$start_page

$lt{'title'}

$lt{'explain'}

ENDNONE @@ -448,8 +473,9 @@ ENDNONE + ENDMENU + $r->print(&Apache::loncommon::end_page()); return OK; } } else {