[LON-CAPA-cvs] cvs: rat / lonpageflip.pm
raeburn
raeburn at source.lon-capa.org
Sun Mar 22 20:03:16 EDT 2015
raeburn Mon Mar 23 00:03:16 2015 EDT
Modified files:
/rat lonpageflip.pm
Log:
- When course changed after "Big Hash" last tied for current user's session,
and course is re-initialized, accommodate:
(a) removal of the $coursefn_symb.db file
(b) case where page being flipped from no longer accessible to the user.
-------------- next part --------------
Index: rat/lonpageflip.pm
diff -u rat/lonpageflip.pm:1.88 rat/lonpageflip.pm:1.89
--- rat/lonpageflip.pm:1.88 Sat Mar 14 22:26:50 2015
+++ rat/lonpageflip.pm Mon Mar 23 00:03:16 2015
@@ -2,7 +2,7 @@
#
# Page flip handler
#
-# $Id: lonpageflip.pm,v 1.88 2015/03/14 22:26:50 raeburn Exp $
+# $Id: lonpageflip.pm,v 1.89 2015/03/23 00:03:16 raeburn Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -270,33 +270,56 @@
&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);
+ }
+ }
if ($env{'request.course.id'}) {
# Check if course needs to be re-initialized
my $loncaparev = $r->dir_config('lonVersion');
- my ($result, at reinit) = &Apache::loncommon::needs_coursereinit($loncaparev);
- if ($result eq 'switch') {
+ ($reinitcheck,my @reinit) = &Apache::loncommon::needs_coursereinit($loncaparev);
+ if ($reinitcheck 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') {
+ } elsif ($reinitcheck 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);
+ }
+ }
}
}
}
-
- 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');
@@ -305,14 +328,8 @@
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))) {
@@ -321,45 +338,50 @@
$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)) {
- my $last;
- if (tie(%hash,'GDBM_File',$env{'request.course.fn'}.'_symb.db',
- &GDBM_READER(),0640)) {
- $last=$hash{'last_known'};
+ if ($preupdatepos) {
+ undef($preupdatepos);
+ } elsif (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/noidea.html');
- return REDIRECT;
+ &Apache::loncommon::content_type($r,'text/html');
+ $r->header_out(Location =>
+ &Apache::lonnet::absolute_url().
+ '/adm/navmaps');
+ return REDIRECT;
}
}
# ------------------------------------------- Do we have any idea where we are?
my $position;
- if ($position=Apache::lonnet::symbread($currenturl)) {
+ if ($preupdatepos) {
+ $position = $preupdatepos;
+ } else {
+ $position=Apache::lonnet::symbread($currenturl);
+ }
+ if ($position) {
# ------------------------------------------------------------------------- Yes
my ($startoutmap,$mapnum,$thisurl)=&Apache::lonnet::decode_symb($position);
$cachehash{$startoutmap}{$thisurl}=[$thisurl,$mapnum];
@@ -429,11 +451,11 @@
}
# ------------------------------------- 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 {
@@ -450,7 +472,10 @@
'pick' =>
'Please click on the the resource you intend to access',
'titleheader' => 'Title',
- 'type' => 'Type');
+ '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.');
if (&Apache::loncommon::course_type() eq 'Community') {
$lt{'nav'} = &mt('Community Contents');
}
@@ -479,17 +504,38 @@
}
$r->print('</table>');
} 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('<h2>'.$lt{'update'}.'</h2>'
+ .'<p>'.$lt{'expupdate'}.'<br />'
+ .$lt{'gonav'}.'</p>');
+ } else {
+ $r->print(
+ &Apache::loncommon::start_page('No Resource')
+ .'<h2>'.$lt{'title'}.'</h2>'
+ .'<p>'.$lt{'explain'}.'</p>');
+ }
+ }
+ if ((!@possibilities) && ($reinitcheck)) {
+ $r->print(
+ &Apache::lonhtmlcommon::actionbox(
+ ['<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
+ ]));
+ } else {
$r->print(
- &Apache::loncommon::start_page('No Resource')
- .'<h2>'.$lt{'title'}.'</h2>'
- .'<p>'.$lt{'explain'}.'</p>');
+ &Apache::lonhtmlcommon::actionbox(
+ ['<a href="/adm/flip?postdata=return:">'.$lt{'back'}.'</a></li>',
+ '<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
+ ]));
}
- $r->print(
- &Apache::lonhtmlcommon::actionbox(
- ['<a href="/adm/flip?postdata=return:">'.$lt{'back'}.'</a></li>',
- '<a href="/adm/navmaps">'.$lt{'nav'}.'</a></li>'
- ])
- .&Apache::loncommon::end_page());
+ $r->print(&Apache::loncommon::end_page());
+
return OK;
}
} else {
More information about the LON-CAPA-cvs
mailing list