--- rat/lonpageflip.pm 2014/06/26 18:21:24 1.80.8.5 +++ rat/lonpageflip.pm 2015/03/14 22:26:50 1.88 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.80.8.5 2014/06/26 18:21:24 raeburn Exp $ +# $Id: lonpageflip.pm,v 1.88 2015/03/14 22:26:50 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -36,6 +36,7 @@ use LONCAPA; use Apache::Constants qw(:common :http REDIRECT); use Apache::lonnet; use Apache::loncommon(); +use Apache::lonuserstate; use Apache::lonlocal; use HTML::TokeParser; use GDBM_File; @@ -218,26 +219,6 @@ sub get_next_possible_move { return ($next,$mapurl); } -sub navlaunch { - my ($r)=@_; - &Apache::loncommon::content_type($r,'text/html'); - &Apache::loncommon::no_cache($r); - $r->send_http_header; - $r->print(&Apache::loncommon::start_page('Launched')); - $r->print(<Goto first resource

- -

Collapse external navigation window

-ENDNAV - $r->print(&Apache::loncommon::end_page()); -} - sub first_accessible_resource { my $furl; if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db', @@ -249,8 +230,7 @@ sub first_accessible_resource { my ($name,$value) = split(/=/,$pair); $args{&unescape($name)} = &unescape($value); } - if ((($env{'environment.remotenavmap'} eq 'on') && ($furl =~ m{^/adm/navmaps})) || - (!&Apache::lonnet::allowed('bre',$url,$args{'symb'}))) { + if (!&Apache::lonnet::allowed('bre',$url,$args{'symb'})) { # 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 @@ -289,9 +269,30 @@ sub handler { my @possibilities=(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']); if (($env{'form.postdata'})&&($env{'request.course.fn'})) { - $env{'form.postdata'}=~/(\w+)\:(.*)/; - my $direction=$1; - my $currenturl=$2; + my ($direction,$currenturl) = ($env{'form.postdata'}=~/(\w+)\:(.*)/); + + if ($env{'request.course.id'}) { + # Check if course needs to be re-initialized + my $loncaparev = $r->dir_config('lonVersion'); + my ($result,@reinit) = &Apache::loncommon::needs_coursereinit($loncaparev); + if ($result eq 'switch') { + &Apache::loncommon::content_type($r,'text/html'); + $r->send_http_header; + $r->print(&Apache::loncommon::check_release_result(@reinit)); + return OK; + } elsif ($result eq 'update') { + my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum"); + if ($ferr) { + my $requrl = $r->uri; + $env{'user.error.msg'}="$requrl:bre:0:0:Course not initialized"; + $env{'user.reinit'} = 1; + return HTTP_NOT_ACCEPTABLE; + } + } + } + if ($currenturl=~m|^/enc/|) { $currenturl=&Apache::lonenc::unencrypted($currenturl); } @@ -304,7 +305,7 @@ sub handler { return REDIRECT; } - if ($direction eq 'return' || $direction eq 'navlaunch') { + if ($direction eq 'return') { # -------------------------------------------------------- Return to last known my $last; if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', @@ -327,17 +328,12 @@ sub handler { untie %hash; } else { $newloc='/adm/navmaps'; - } - if (($newloc =~ m{^/adm/navmaps}) && ($direction eq 'navlaunch')) { - &navlaunch($r); - return OK; - } else { + } &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => &Apache::lonnet::absolute_url().$newloc); return REDIRECT; - } } $currenturl=~s/^https?\:\/\///; $currenturl=~s/^[^\/]+//; @@ -354,16 +350,11 @@ sub handler { if ($last) { $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]); } else { - if ($direction eq 'return') { &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => &Apache::lonnet::absolute_url(). '/adm/noidea.html'); return REDIRECT; - } else { - &navlaunch($r); - return OK; - } } } # ------------------------------------------- Do we have any idea where we are? @@ -421,7 +412,7 @@ sub handler { untie(%hash); # --------------------------------------------------------- Store position info $cachehash{$startoutmap}{'last_direction'}=[$direction,'notasymb']; - foreach my $thismap (keys %cachehash) { + foreach my $thismap (keys(%cachehash)) { my $mapnum=$cachehash{$thismap}->{'mapnum'}; delete($cachehash{$thismap}->{'mapnum'}); &Apache::lonnet::symblist($thismap, @@ -438,11 +429,11 @@ sub handler { } # ------------------------------------- Check for and display critical messages my ($redirect, $url) = &Apache::loncommon::critical_redirect(300); - unless ($redirect) { + unless ($redirect) { $url=&Apache::lonnet::absolute_url().$redirecturl; - $url = &add_get_param($url, { 'symb' => $redirectsymb}); + $url = &add_get_param($url, { 'symb' => $redirectsymb}); } - &Apache::loncommon::content_type($r,'text/html'); + &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => $url); return REDIRECT; } else { @@ -492,7 +483,7 @@ ENDSTART &Apache::loncommon::start_page('No Resource') .'

'.$lt{'title'}.'

' .'

'.$lt{'explain'}.'

'); - } + } $r->print( &Apache::lonhtmlcommon::actionbox( [''.$lt{'back'}.'', @@ -552,8 +543,6 @@ described at http://www.lon-capa.org. =item get_next_possible_move() -=item navlaunch() - =item first_accessible_resource() =item handler()