--- rat/lonpageflip.pm 2015/03/23 12:49:10 1.80.8.8 +++ rat/lonpageflip.pm 2015/03/14 21:56:13 1.87 @@ -2,7 +2,7 @@ # # Page flip handler # -# $Id: lonpageflip.pm,v 1.80.8.8 2015/03/23 12:49:10 raeburn Exp $ +# $Id: lonpageflip.pm,v 1.87 2015/03/14 21:56:13 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -269,57 +269,36 @@ sub handler { my @possibilities=(); &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['postdata']); if (($env{'form.postdata'})&&($env{'request.course.fn'})) { - my ($direction,$currenturl) = ($env{'form.postdata'}=~/(\w+)\:(.*)/); - if ($currenturl=~m|^/enc/|) { - $currenturl=&Apache::lonenc::unencrypted($currenturl); - } - $currenturl=~s/\.\d+\.(\w+)$/\.$1/; - $currenturl=~s/^https?\:\/\///; - $currenturl=~s/^[^\/]+//; - my ($preupdatepos,$last,$reinitcheck); - if ($direction eq 'return') { - if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', - &GDBM_READER(),0640)) { - $last=$hash{'last_known'}; - untie(%hash); - } - } + $env{'form.postdata'}=~/(\w+)\:(.*)/; + if ($env{'request.course.id'}) { # Check if course needs to be re-initialized my $loncaparev = $r->dir_config('lonVersion'); - ($reinitcheck,my @reinit) = &Apache::loncommon::needs_coursereinit($loncaparev); - if ($reinitcheck eq 'switch') { + 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 ($reinitcheck eq 'update') { + } elsif ($result eq 'update') { my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; my $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; - $preupdatepos = &Apache::lonnet::symbread($currenturl); - unless ($direction eq 'return') { - if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', - &GDBM_READER(),0640)) { - $last=$hash{'last_known'}; - untie(%hash); - } - } 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; - } else { - if ($last) { - my ($murl,$id,$fn)=&Apache::lonnet::decode_symb($last); - unless (&Apache::lonnet::symbverify($last,$fn)) { - undef($last); - } - } } } } + + my $direction=$1; + my $currenturl=$2; + if ($currenturl=~m|^/enc/|) { + $currenturl=&Apache::lonenc::unencrypted($currenturl); + } + $currenturl=~s/\.\d+\.(\w+)$/\.$1/; if ($direction eq 'firstres') { my $furl=&first_accessible_resource(); &Apache::loncommon::content_type($r,'text/html'); @@ -328,8 +307,14 @@ sub handler { return REDIRECT; } - if ($direction eq 'return') { + if ($direction eq 'return') { # -------------------------------------------------------- Return to last known + my $last; + if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', + &GDBM_READER(),0640)) { + $last=$hash{'last_known'}; + untie(%hash); + } my $newloc; if (($last) && (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'.db', &GDBM_READER(),0640))) { @@ -338,50 +323,45 @@ sub handler { $newloc=$hash{'src_'.$id}; if ($newloc) { if ($hash{'encrypted_'.$id}) { $newloc=&Apache::lonenc::encrypted($newloc); } + } else { $newloc='/adm/navmaps'; } untie %hash; } else { $newloc='/adm/navmaps'; - } - &Apache::loncommon::content_type($r,'text/html'); - $r->header_out(Location => - &Apache::lonnet::absolute_url().$newloc); + } + &Apache::loncommon::content_type($r,'text/html'); + $r->header_out(Location => + &Apache::lonnet::absolute_url().$newloc); - return REDIRECT; + return REDIRECT; } + $currenturl=~s/^https?\:\/\///; + $currenturl=~s/^[^\/]+//; # # Is the current URL on the map? If not, start with last known URL # - unless (&Apache::lonnet::is_on_map($currenturl)) { - if ($preupdatepos) { - undef($preupdatepos); - } elsif (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', - &GDBM_READER(),0640)) { - $last=$hash{'last_known'}; + my $last; + if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db', + &GDBM_READER(),0640)) { + $last=$hash{'last_known'}; untie(%hash); } - my $newloc; if ($last) { $currenturl=&Apache::lonnet::clutter((&Apache::lonnet::decode_symb($last))[2]); } else { - &Apache::loncommon::content_type($r,'text/html'); - $r->header_out(Location => - &Apache::lonnet::absolute_url(). - '/adm/navmaps'); - return REDIRECT; + &Apache::loncommon::content_type($r,'text/html'); + $r->header_out(Location => + &Apache::lonnet::absolute_url(). + '/adm/noidea.html'); + return REDIRECT; } } # ------------------------------------------- Do we have any idea where we are? my $position; - if ($preupdatepos) { - $position = $preupdatepos; - } else { - $position=Apache::lonnet::symbread($currenturl); - } - if ($position) { + if ($position=Apache::lonnet::symbread($currenturl)) { # ------------------------------------------------------------------------- Yes my ($startoutmap,$mapnum,$thisurl)=&Apache::lonnet::decode_symb($position); $cachehash{$startoutmap}{$thisurl}=[$thisurl,$mapnum]; @@ -451,11 +431,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 { @@ -472,10 +452,7 @@ sub handler { 'pick' => 'Please click on the the resource you intend to access', 'titleheader' => 'Title', - 'type' => 'Type', - 'update' => 'Content updated', - 'expupdate' => 'As a result of a recent update to the sequence of materials, it is not possible to complete the page flip.', - 'gonav' => 'Go to the Contents page to select a resource to display.'); + 'type' => 'Type'); if (&Apache::loncommon::course_type() eq 'Community') { $lt{'nav'} = &mt('Community Contents'); } @@ -504,38 +481,17 @@ ENDSTART } $r->print(''); } else { - if ($reinitcheck) { - if (&Apache::loncommon::course_type() eq 'Community') { - $r->print( - &Apache::loncommon::start_page('Community Contents Updated')); - } else { - $r->print( - &Apache::loncommon::start_page('Course Contents Updated')); - } - $r->print('

'.$lt{'update'}.'

' - .'

'.$lt{'expupdate'}.'
' - .$lt{'gonav'}.'

'); - } else { - $r->print( - &Apache::loncommon::start_page('No Resource') - .'

'.$lt{'title'}.'

' - .'

'.$lt{'explain'}.'

'); - } - } - if ((!@possibilities) && ($reinitcheck)) { - $r->print( - &Apache::lonhtmlcommon::actionbox( - [''.$lt{'nav'}.'' - ])); - } else { $r->print( - &Apache::lonhtmlcommon::actionbox( - [''.$lt{'back'}.'', - ''.$lt{'nav'}.'' - ])); + &Apache::loncommon::start_page('No Resource') + .'

'.$lt{'title'}.'

' + .'

'.$lt{'explain'}.'

'); } - $r->print(&Apache::loncommon::end_page()); - + $r->print( + &Apache::lonhtmlcommon::actionbox( + [''.$lt{'back'}.'', + ''.$lt{'nav'}.'' + ]) + .&Apache::loncommon::end_page()); return OK; } } else {