--- loncom/interface/lonnavdisplay.pm 2015/03/01 20:47:54 1.30 +++ loncom/interface/lonnavdisplay.pm 2017/06/26 01:56:58 1.34 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Display Handler # -# $Id: lonnavdisplay.pm,v 1.30 2015/03/01 20:47:54 raeburn Exp $ +# $Id: lonnavdisplay.pm,v 1.34 2017/06/26 01:56:58 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -38,6 +38,7 @@ use Apache::lonhtmlcommon(); use Apache::lonnet; use Apache::lonlocal; use Apache::londocs(); +use Apache::lonuserstate; sub handler { my $r = shift; @@ -54,13 +55,42 @@ sub real_handler { } # Check for critical messages and redirect if present. - my ($redirect,$url) = &Apache::loncommon::critical_redirect(300); + my ($redirect,$url) = &Apache::loncommon::critical_redirect(300,'contents'); if ($redirect) { &Apache::loncommon::content_type($r,'text/html'); $r->header_out(Location => $url); return REDIRECT; } + # 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 $course_type = &Apache::loncommon::course_type(); + if (($course_type eq 'Placement') && (!$env{'request.role.adv'})) { + my $furl = &Apache::lonpageflip::first_accessible_resource(); + &Apache::loncommon::content_type($r,'text/html'); + $r->header_out(Location => $furl); + return REDIRECT; + } + # Create the nav map my $navmap = Apache::lonnavmaps::navmap->new();