$endpage
ENDFRAME
@@ -139,7 +156,7 @@ sub handler {
return OK if $r->header_only;
my $url = $r->uri;
- my ($is_ext,$brcrum,$absolute,$is_pdf);
+ my ($is_ext,$brcrum,$absolute,$is_pdf,$exttool,$cdom,$cnum);
for ($url){
s|^/adm/wrapper||;
@@ -148,36 +165,57 @@ sub handler {
s|:|:|g;
}
+
if ($url =~ /\.pdf$/i) {
$is_pdf = 1;
- }
-
- 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;
- }
+ } elsif ($url =~ m{^/adm/($match_domain)/($match_courseid)/(\d+)/exttools?$}) {
+ $cdom = $1;
+ $cnum = $2;
+ my $marker = $3;
+ $exttool = 'iframe';
+ my %toolhash = &Apache::lonnet::get('exttool_'.$marker,['target'],$cdom,$cnum);
+ if ($toolhash{'target'} eq 'window') {
+ $exttool = 'window';
}
+ }
+ if (($is_ext) || ($exttool)) {
&Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
- ['forceedit','register','folderpath','symb','idx','title']);
+ ['forceedit','register','folderpath','symb','idx','title','anchor']);
if (($env{'form.forceedit'}) &&
(&Apache::lonnet::allowed('mdc',$env{'request.course.id'})) &&
(($env{'form.folderpath'} =~ /^supplemental/) ||
($env{'form.symb'} =~ /^uploaded/))) {
+ if ($env{'form.symb'}) {
+ (undef,undef,my $res) = &Apache::lonnet::decode_symb($env{'form.symb'});
+ if ($res =~ /(#[^#]+)$/) {
+ $url .= $1;
+ }
+ } elsif ($env{'form.folderpath'} =~ /^supplemental/) {
+ if ($env{'form.anchor'} ne '') {
+ $url .= '#'.$env{'form.anchor'};
+ }
+ }
+ my $type = 'ext';
+ my %ltitools;
+ if ($exttool) {
+ $type = 'tool';
+ %ltitools = &Apache::lonnet::get_domain_ltitools($cdom);
+ }
$r->print(
&Apache::lonextresedit::display_editor($url,$env{'form.folderpath'},
$env{'form.symb'},
- $env{'form.idx'}));
+ $env{'form.idx'},$type,$cdom,
+ $cnum,\%ltitools));
return OK;
} elsif ($env{'form.folderpath'} =~ /^supplemental/) {
my $crstype = &Apache::loncommon::course_type();
my $title = $env{'form.title'};
if ($title eq '') {
- $title = &mt('External Resource');
+ if ($is_ext) {
+ $title = &mt('External Resource');
+ } else {
+ $title = &mt('External Tool');
+ }
}
$brcrum =
&Apache::lonhtmlcommon::docs_breadcrumbs(undef,$crstype,undef,$title,1);
@@ -197,7 +235,8 @@ sub handler {
#
# This is not homework
#
- if ($is_ext) {
+ if (($is_ext) || ($exttool)) {
+ $absolute = $env{'request.use_absolute'};
$ENV{'QUERY_STRING'} =~ s/(^|\&)symb=[^\&]*/$1/;
$ENV{'QUERY_STRING'} =~ s/\&$//;
}
@@ -207,9 +246,11 @@ sub handler {
}
# encrypt url if not external
- &Apache::lonenc::check_encrypt(\$url) if $url !~ /^https?\:/ ;
+ unless ($is_ext || $exttool) {
+ &Apache::lonenc::check_encrypt(\$url);
+ }
- $r->print( wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf) );
+ $r->print( wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf,$exttool) );
} # not just the menu
@@ -236,7 +277,7 @@ described at http://www.lon-capa.org.
=over
-=item wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf))
+=item wrapper($url,$brcrum,$absolute,$is_ext,$is_pdf,$title))
=over
@@ -261,7 +302,9 @@ 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
+is used to switch requests for external resources and
+the syllabus: /public///syllabus
+(which might also point at an external resource)
from https:// to http:// where the the URL of the remote site
specified in the resource itself is http://.
@@ -276,6 +319,14 @@ true if URL is for an external resource.
true if URL is for a PDF (based on file extension).
+=item $title
+
+optional. If wrapped item is a PDF, and $env{'browser.mobile'}
+is true, a link to a PDF is shown. The "title" will be displayed
+above the link, but if not provided as an arg, $env{'form.title'}
+will be used, otherwise, the filename will be displayed (unless
+hidden URL set for the resource).
+
=back
Returns markup for the entire page.