--- loncom/interface/lonnavmaps.pm 2016/11/22 00:43:12 1.525 +++ loncom/interface/lonnavmaps.pm 2017/07/07 17:04:40 1.531 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Navigate Maps Handler # -# $Id: lonnavmaps.pm,v 1.525 2016/11/22 00:43:12 raeburn Exp $ +# $Id: lonnavmaps.pm,v 1.531 2017/07/07 17:04:40 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -1684,6 +1684,23 @@ END undef($args->{'sort'}); } + # Determine if page will be served with https in case + # it contains a syllabus which uses an external URL + # which points at an http site. + + my ($is_ssl,$cdom,$cnum,$hostname); + if ($ENV{'SERVER_PORT'} == 443) { + $is_ssl = 1; + if ($r) { + $hostname = $r->hostname(); + } else { + $hostname = $ENV{'SERVER_NAME'}; + } + } + if ($env{'request.course.id'}) { + $cdom = $env{'course.'.$env{'request.course.id'}.'.domain'}; + $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; + } while (1) { if ($args->{'sort'}) { @@ -1817,8 +1834,22 @@ END $stack=$it->getStack(); } ($src,$symb,$anchor)=getLinkForResource($stack); + my $srcHasQuestion = $src =~ /\?/; + if ($env{'request.course.id'}) { + if (($is_ssl) && ($src =~ m{^\Q/public/$cdom/$cnum/syllabus\E($|\?)}) && + ($env{'course.'.$env{'request.course.id'}.'.externalsyllabus'} =~ m{^http://})) { + if ($hostname ne '') { + $src = 'http://'.$hostname.$src; + } + $src .= ($srcHasQuestion? '&' : '?') . 'usehttp=1'; + $srcHasQuestion = 1; + } elsif (($is_ssl) && ($src =~ m{^\Q/adm/wrapper/ext/\E(?!https:)})) { + if ($hostname ne '') { + $src = 'http://'.$hostname.$src; + } + } + } if (defined($anchor)) { $anchor='#'.$anchor; } - my $srcHasQuestion = $src =~ /\?/; $args->{"resourceLink"} = $src. ($srcHasQuestion?'&':'?') . 'symb=' . &escape($symb).$anchor; @@ -2688,7 +2719,13 @@ sub parmval_real { } foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; - last if (defined($$useropt{$norecursechk})); + if (defined($$useropt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return [$$useropt{$norecursechk},'map']; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; if (defined($$useropt{$recursechk})) { return [$$useropt{$recursechk},'map']; } } @@ -2706,7 +2743,13 @@ sub parmval_real { } foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(all).'.$what; - last if (defined($$courseopt{$norecursechk})); + if (defined($$courseopt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return [$$courseopt{$norecursechk},'map']; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(rec).'.$what; if (defined($$courseopt{$recursechk})) { return [$$courseopt{$recursechk},'map']; } } @@ -2723,7 +2766,13 @@ sub parmval_real { } foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(all).'.$what; - last if (defined($$courseopt{$norecursechk})); + if (defined($$courseopt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return [$$courseopt{$norecursechk},'map']; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what; if (defined($$courseopt{$recursechk})) { return [$$courseopt{$recursechk},'map']; } } @@ -2757,7 +2806,13 @@ sub parmval_real { } foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; - last if (defined($$courseopt{$norecursechk})); + if (defined($$courseopt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return [$$courseopt{$norecursechk},'map']; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; if (defined($$courseopt{$recursechk})) { return [$$courseopt{$recursechk},'map']; @@ -2896,7 +2951,13 @@ sub get_mapparam { } foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; - last if (defined($$useropt{$norecursechk})); + if (defined($$useropt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return $$useropt{$norecursechk}; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; if (defined($$useropt{$recursechk})) { return $$useropt{$recursechk}; @@ -2921,7 +2982,13 @@ sub get_mapparam { } foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(all).'.$what; - last if (defined($$courseopt{$norecursechk})); + if (defined($$courseopt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return $$courseopt{$norecursechk}; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.['.$cgroup.'].'.$item.'___(rec).'.$what; if (defined($$courseopt{$recursechk})) { return $$courseopt{$recursechk}; @@ -2945,7 +3012,13 @@ sub get_mapparam { } foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(all).'.$what; - last if (defined($$courseopt{$norecursechk})); + if (defined($$courseopt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return $$courseopt{$norecursechk}; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.['.$csec.'].'.$item.'___(rec).'.$what; if (defined($$courseopt{$recursechk})) { return $$courseopt{$recursechk}; @@ -2976,7 +3049,13 @@ sub get_mapparam { if (@recurseup) { foreach my $item (@recurseup) { my $norecursechk=$usercourseprefix.'.'.$item.'___(all).'.$what; - last if (defined($$courseopt{$norecursechk})); + if (defined($$courseopt{$norecursechk})) { + if ($what =~ /\.(encrypturl|hiddenresource)$/) { + return $$courseopt{$norecursechk}; + } else { + last; + } + } my $recursechk=$usercourseprefix.'.'.$item.'___(rec).'.$what; if (defined($$courseopt{$recursechk})) { return $$courseopt{$recursechk}; @@ -5027,7 +5106,7 @@ sub extractParts { my %parts; # Retrieve part count, if this is a problem - if ($self->is_problem()) { + if ($self->is_raw_problem()) { my $partorder = &Apache::lonnet::metadata($self->src(), 'partorder'); my $metadata = &Apache::lonnet::metadata($self->src(), 'packages');