--- rat/lonpageflip.pm 2014/04/28 20:04:55 1.84 +++ rat/lonpageflip.pm 2015/03/14 21:56:13 1.87 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.84 2014/04/28 20:04:55 raeburn Exp $ +# $Id: lonpageflip.pm,v 1.87 2015/03/14 21:56:13 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; @@ -269,6 +270,29 @@ sub handler { &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']); if (($env{'form.postdata'})&&($env{'request.course.fn'})) { $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; + } + } + } + my $direction=$1; my $currenturl=$2; if ($currenturl=~m|^/enc/|) { @@ -390,7 +414,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, @@ -405,24 +429,13 @@ sub handler { if ($direction eq 'back') { &Apache::lonnet::linklog($redirecturl,$currenturl); } -# ------------------------------------------------- Check for critical messages - if ((time-$env{'user.criticalcheck.time'})>300) { - my @what=&Apache::lonnet::dump - ('critical',$env{'user.domain'}, - $env{'user.name'}); - if ($what[0]) { - if (($what[0] ne 'con_lost') && - ($what[0]!~/^error\:/)) { - $redirecturl='/adm/email?critical=display'; - $redirectsymb=''; - } - } - &Apache::lonnet::appenv({'user.criticalcheck.time'=>time}); - } - +# ------------------------------------- Check for and display critical messages + my ($redirect, $url) = &Apache::loncommon::critical_redirect(300); + unless ($redirect) { + $url=&Apache::lonnet::absolute_url().$redirecturl; + $url = &add_get_param($url, { 'symb' => $redirectsymb}); + } &Apache::loncommon::content_type($r,'text/html'); - my $url=&Apache::lonnet::absolute_url().$redirecturl; - $url = &add_get_param($url, { 'symb' => $redirectsymb}); $r->header_out(Location => $url); return REDIRECT; } else {