--- rat/lonwrapper.pm 2012/11/27 23:45:15 1.42 +++ rat/lonwrapper.pm 2013/10/15 10:17:19 1.45 @@ -1,7 +1,7 @@ # The LearningOnline Network with CAPA # Wrapper for external and binary files as standalone resources # -# $Id: lonwrapper.pm,v 1.42 2012/11/27 23:45:15 raeburn Exp $ +# $Id: lonwrapper.pm,v 1.45 2013/10/15 10:17:19 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -40,7 +40,7 @@ use Apache::lonextresedit(); # ================================================================ Main Handler sub wrapper { - my ($url,$brcrum) = @_; + my ($url,$brcrum,$absolute,$is_ext) = @_; my $forcereg; unless ($env{'form.folderpath'}) { @@ -52,7 +52,10 @@ sub wrapper { $args->{'force_register'} = $forcereg; } if (ref($brcrum) eq 'ARRAY') { - $args->{'bread_crumbs'} = $brcrum; + $args->{'bread_crumbs'} = $brcrum; + } + if ($absolute) { + $args->{'use_absolute'} = $absolute; } my $startpage = Apache::loncommon::start_page('Menu',undef,$args); @@ -103,7 +106,7 @@ sub handler { return OK if $r->header_only; my $url = $r->uri; - my ($is_ext,$brcrum); + my ($is_ext,$brcrum,$absolute); for ($url){ s|^/adm/wrapper||; @@ -113,6 +116,15 @@ sub handler { } if ($is_ext) { + my $hostname = $r->hostname(); + my $lonhost = &Apache::lonnet::host_from_dns($hostname); + if ($lonhost) { + my $actual = &Apache::lonnet::absolute_url($hostname); + my $expected = $Apache::lonnet::protocol{$lonhost}.'://'.$hostname; + unless ($actual eq $expected) { + $absolute = $expected; + } + } &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'}, ['forceedit','register','folderpath','symb','idx','title']); if (($env{'form.forceedit'}) && @@ -126,20 +138,12 @@ sub handler { return OK; } elsif ($env{'form.folderpath'} =~ /^supplemental/) { my $crstype = &Apache::loncommon::course_type(); - $brcrum = - &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$env{'form.title'},1); - if (ref($brcrum) eq 'ARRAY') { - my $last = $env{'form.title'}; - if ($last eq '') { - $last = &mt('External Resource'); - } - push(@{$brcrum}, - {'title' => $last, - 'text' => $last, - 'no_mt' => 1, - }); - + my $title = $env{'form.title'}; + if ($title eq '') { + $title = &mt('External Resource'); } + $brcrum = + &Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1); } } @@ -168,7 +172,7 @@ sub handler { # encrypt url if not external &Apache::lonenc::check_encrypt(\$url) if $url !~ /^https?\:/ ; - $r->print( wrapper($url,$brcrum) ); + $r->print( wrapper($url,$brcrum,$absolute,$is_ext) ); } # not just the menu @@ -195,11 +199,44 @@ described at http://www.lon-capa.org. =over -=item wrapper($url,$brcrum) +=item wrapper($url,$brcrum,$absolute,$is_ext) + +=over + +=item $url + +url to display by including in an iframe within a +LON-CAPA page which has a standard LON-CAPA inline menu. -Wraps $url in an iframe and generates a page for it. -$brcrum contains breadcrumbs for unregistered urls +=item $brcrum + +breadcrumbs for unregistered urls (i.e., external resources in Supplemental Content). + +=item $absolute + +contains protocol (http or https) followed by +the hostname, if menu items in the standard LON-CAPA +interface created by the call to loncommon::start_page() +within &wrapper() need to use absolute URLs rather than +relative URLs. + +That will be the case where an external resource has been +served from port 80, when the server customarily serves +requests using Apache/SSL (i.e., port 443). mod_rewrite +is used to switch requests for external resources +from https:// to http:// where the the URL of the remote site +specified in the resource itself is http://. + +This is done to avoid default mixed content blocking +in Firefox 23 and later, when serving from Apache/SSL. + +=item $is_ext + +true if URL is for an external resource. + +=back + Returns markup for the entire page. =item handler()