version 1.27, 2014/05/20 20:30:59
|
version 1.36, 2018/04/14 02:29:44
|
Line 1
|
Line 1
|
# The LearningOnline Network with CAPA |
# The LearningOnline Network with CAPA |
|
# Navigate Maps Display Handler |
# |
# |
# $Id$ |
# $Id$ |
# |
# |
Line 38 use Apache::lonhtmlcommon();
|
Line 38 use Apache::lonhtmlcommon();
|
use Apache::lonnet; |
use Apache::lonnet; |
use Apache::lonlocal; |
use Apache::lonlocal; |
use Apache::londocs(); |
use Apache::londocs(); |
#use Time::HiRes qw( gettimeofday tv_interval ); |
use Apache::lonuserstate; |
|
use LONCAPA::ltiutils; |
|
|
sub handler { |
sub handler { |
my $r = shift; |
my $r = shift; |
Line 47 sub handler {
|
Line 48 sub handler {
|
|
|
sub real_handler { |
sub real_handler { |
my $r = shift; |
my $r = shift; |
#my $t0=[&gettimeofday()]; |
|
# Handle header-only request |
# Handle header-only request |
if ($r->header_only) { |
if ($r->header_only) { |
if ($env{'browser.mathml'}) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/xml'); |
|
} else { |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
} |
|
$r->send_http_header; |
$r->send_http_header; |
return OK; |
return OK; |
} |
} |
|
|
# Check for critical messages and redirect if present. |
# 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) { |
if ($redirect) { |
&Apache::loncommon::content_type($r,'text/html'); |
&Apache::loncommon::content_type($r,'text/html'); |
$r->header_out(Location => $url); |
$r->header_out(Location => $url); |
return REDIRECT; |
return REDIRECT; |
} |
} |
|
|
|
# ------------------------------------------------------------ Get query string |
|
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['sort', |
|
'showOnlyHomework', |
|
'postsymb','register']); |
|
# Check if course needs to be re-initialized |
|
my $loncaparev = $r->dir_config('lonVersion'); |
|
my ($result,@reinit) = &Apache::loncommon::needs_coursereinit($loncaparev); |
|
my %prog_state=(); |
|
my $closure; |
|
|
|
if ($result eq 'switch') { |
# Send header, don't cache this page |
|
if ($env{'browser.mathml'}) { |
|
&Apache::loncommon::content_type($r,'text/xml'); |
|
} else { |
|
&Apache::loncommon::content_type($r,'text/html'); |
&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 $cid = $env{'request.course.id'}; |
|
my $cnum = $env{'course.'.$cid.'.num'}; |
|
my $cdom = $env{'course.'.$cid.'.domain'}; |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->send_http_header; |
|
&startpage($r); |
|
my $preamble = '<div id="LC_update_'.$cid.'" class="LC_info">'. |
|
'<br />'. |
|
&mt('Your course session is being updated because of recent changes by course personnel.'). |
|
' '.&mt('Please be patient.').'<br /></div>'. |
|
'<div style="padding:0;clear:both;margin:0;border:0"></div>'; |
|
$closure = <<ENDCLOSE; |
|
<script type="text/javascript"> |
|
// <![CDATA[ |
|
\$("#LC_update_$cid").hide('slow'); |
|
// ]]> |
|
</script> |
|
ENDCLOSE |
|
%prog_state = &Apache::lonhtmlcommon::Create_PrgWin($r,undef,$preamble); |
|
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Updating course')); |
|
$r->rflush(); |
|
my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum",\%prog_state,$r); |
|
&Apache::lonhtmlcommon::Update_PrgWin($r,\%prog_state,&mt('Finished')); |
|
if ($ferr) { |
|
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
|
$r->print($closure.&Apache::loncommon::end_page()); |
|
my $requrl = $r->uri; |
|
$env{'user.error.msg'}="$requrl:bre:0:0:Course not initialized"; |
|
$env{'user.reinit'} = 1; |
|
return HTTP_NOT_ACCEPTABLE; |
|
} |
} |
} |
&Apache::loncommon::no_cache($r); |
|
|
|
my %toplinkitems=(); |
my $course_type = &Apache::loncommon::course_type(); |
|
if (($course_type eq 'Placement') && (!$env{'request.role.adv'})) { |
|
my $furl = &Apache::lonpageflip::first_accessible_resource(); |
|
if ($result eq 'update') { |
|
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
|
$r->print($closure.&Apache::loncommon::end_page()); |
|
return OK; |
|
} else { |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->header_out(Location => $furl); |
|
return REDIRECT; |
|
} |
|
} |
|
|
|
if ($env{'request.lti.login'}) { |
|
if ($env{'request.lti.uri'} ne '') { |
|
my $cid = $env{'request.course.id'}; |
|
my $cnum = $env{'course.'.$cid.'.num'}; |
|
my $cdom = $env{'course.'.$cid.'.domain'}; |
|
my ($scope,$url) = &LONCAPA::ltiutils::lti_provider_scope($env{'request.lti.uri'},$cdom,$cnum); |
|
if (($scope eq 'map') || ($scope eq 'resource')) { |
|
&Apache::loncommon::content_type($r,'text/html'); |
|
$r->header_out(Location => $url); |
|
return REDIRECT; |
|
} |
|
} |
|
} |
|
|
# Create the nav map |
# Create the nav map |
my $navmap = Apache::lonnavmaps::navmap->new(); |
my $navmap = Apache::lonnavmaps::navmap->new(); |
|
|
if (!defined($navmap)) { |
if (!defined($navmap)) { |
|
if ($result eq 'update') { |
|
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
|
$r->print($closure.&Apache::loncommon::end_page()); |
|
} |
my $requrl = $r->uri; |
my $requrl = $r->uri; |
$env{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; |
$env{'user.error.msg'} = "$requrl:bre:0:0:Course not initialized"; |
$env{'user.reinit'} = 1; |
$env{'user.reinit'} = 1; |
return HTTP_NOT_ACCEPTABLE; |
return HTTP_NOT_ACCEPTABLE; |
} |
} |
$r->send_http_header; |
|
|
|
# ------------------------------------------------------------ Get query string |
if ($result eq 'update') { |
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['sort','showOnlyHomework','postsymb','register']); |
$r->rflush(); |
|
&Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state); |
# ----------------------------------------------------- Force menu registration |
$r->print($closure); |
# Header |
$r->rflush(); |
my $course_type = &Apache::loncommon::course_type(); |
|
my $title = $course_type . ' Contents'; |
|
my ($start_page,$args); |
|
if ($env{'form.register'}) { |
|
$args = {'force_register' => $env{'form.register'}}; |
|
$start_page = &Apache::loncommon::start_page($title,undef,$args); |
|
} else { |
} else { |
my $brcrum = [{href => '/adm/navmaps', |
# Send header, don't cache this page |
text => &mt($course_type . ' Contents'), |
&Apache::loncommon::content_type($r,'text/html'); |
no_mt => 1}, |
$r->send_http_header; |
]; |
&startpage($r); |
$args = {'bread_crumbs' => $brcrum}; |
|
$start_page = &Apache::loncommon::start_page($title,undef,$args); |
|
} |
} |
$r->print($start_page. |
|
'<script type="text/javascript">'."\n". |
|
'// <![CDATA['."\n". |
|
'window.focus();'."\n". |
|
'// ]]>'."\n". |
|
'</script>'); |
|
&startContentScreen($r,'navmaps'); |
&startContentScreen($r,'navmaps'); |
$r->rflush(); |
unless ($result eq 'update') { |
|
$r->rflush(); |
|
} |
|
|
# Check that it's defined |
# Check that it's defined |
if (!($navmap->courseMapDefined())) { |
if (!($navmap->courseMapDefined())) { |
Line 127 sub real_handler {
|
Line 180 sub real_handler {
|
return OK; |
return OK; |
} |
} |
|
|
|
my %toplinkitems=(); |
my @resources = $navmap->retrieveResources(); |
my @resources = $navmap->retrieveResources(); |
my $sequenceCount = 0; |
my $sequenceCount = 0; |
my $problemCount = 0; |
my $problemCount = 0; |
Line 293 sub real_handler {
|
Line 347 sub real_handler {
|
$r->print("<p><span class=\"LC_info\">".&mt("This course is empty.")."</span></p>"); |
$r->print("<p><span class=\"LC_info\">".&mt("This course is empty.")."</span></p>"); |
} |
} |
} |
} |
#my $td=&tv_interval($t0); |
|
#$r->print("<br />$td"); |
|
&endContentScreen($r); |
&endContentScreen($r); |
$r->print(&Apache::loncommon::end_page()); |
$r->print(&Apache::loncommon::end_page()); |
$r->rflush(); |
$r->rflush(); |
Line 302 sub real_handler {
|
Line 354 sub real_handler {
|
return OK; |
return OK; |
} |
} |
|
|
|
sub startpage { |
|
my ($r) = @_; |
|
# ----------------------------------------------------- Force menu registration |
|
# Header |
|
my $course_type = &Apache::loncommon::course_type(); |
|
my $title = $course_type . ' Contents'; |
|
my ($start_page,$args); |
|
if ($env{'form.register'}) { |
|
$args = {'force_register' => $env{'form.register'}}; |
|
$start_page = &Apache::loncommon::start_page($title,undef,$args); |
|
} else { |
|
my $brcrum = [{href => '/adm/navmaps', |
|
text => &mt($course_type . ' Contents'), |
|
no_mt => 1}, |
|
]; |
|
$args = {'bread_crumbs' => $brcrum}; |
|
$start_page = &Apache::loncommon::start_page($title,undef,$args); |
|
} |
|
$r->print($start_page. |
|
'<script type="text/javascript">'."\n". |
|
'// <![CDATA['."\n". |
|
'window.focus();'."\n". |
|
'// ]]>'."\n". |
|
'</script>'); |
|
return; |
|
} |
|
|
sub startContentScreen { |
sub startContentScreen { |
my ($r,$mode)=@_; |
my ($r,$mode)=@_; |
|
|