--- loncom/interface/lonextresedit.pm 2015/06/09 21:22:56 1.8 +++ loncom/interface/lonextresedit.pm 2019/07/30 19:53:22 1.8.2.4 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: lonextresedit.pm,v 1.8 2015/06/09 21:22:56 damieng Exp $ +# $Id: lonextresedit.pm,v 1.8.2.4 2019/07/30 19:53:22 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -201,7 +201,7 @@ sub process_changes { } sub extedit_form { - my ($supplementalflag,$residx,$orig_url,$orig_title,$pathitem,$helpitem,$caller,$symb) = @_; + my ($supplementalflag,$residx,$orig_url,$orig_title,$pathitem,$helpitem,$caller,$symb,$disabled) = @_; my %lt = &Apache::lonlocal::texthash( ex => 'External Resource', ed => 'Edit', @@ -229,6 +229,7 @@ sub extedit_form { $fieldsetstyle,$action,$hiddenelem,$form); $fieldsetstyle = 'display: none;'; $action = '/adm/coursedocs'; + my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http'); if ($residx) { if ($caller eq 'direct') { $fieldsetstyle = 'display: block;'; @@ -252,7 +253,7 @@ sub extedit_form { $urlid = "exturl_$residx"; $srcclass = ' class="LC_nobreak"'; $extsrc = ''.$lt{'ul'}.' '; - $preview = ' '.$lt{'pr'}.''; + $preview = ' '.$lt{'pr'}.''; $title = ''.$lt{'ti'}.' '; $save = $lt{'sv'}; } else { @@ -263,7 +264,7 @@ sub extedit_form { $residx = 0; $orig_url = 'http://'; $orig_title = $lt{'ex'}; - $preview = ''; + $preview = ''; $save = $lt{'al'}; $pathitem .= '
'; } @@ -274,17 +275,17 @@ $legend $active $extsrc - + $preview
$title - + $pathitem $hiddenelem - + @@ -297,8 +298,8 @@ ENDFORM } sub display_editor { - my ($url,$folderpath,$symb,$idx) = @_; - my ($residx,$supplementalflag,$title,$pathitem,$output); + my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum,$hostname) = @_; + my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap); if ($folderpath =~ /^supplemental/) { $supplementalflag = 1; $residx = $idx; @@ -308,11 +309,14 @@ sub display_editor { (my $map,$residx,my $res) = &Apache::lonnet::decode_symb($symb); $title = &Apache::lonnet::gettitle($symb); - my $path = &Apache::loncommon::symb_to_docspath($symb); + my $path = &Apache::loncommon::symb_to_docspath($symb,\$navmap); $pathitem = ''; } - my $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript()); + $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript()); my $args = { 'force_register' => $env{'form.register'} }; + if ($hostname) { + $args->{'hostname'} = $hostname; + } return &Apache::loncommon::start_page('External Resource Editor',$js,$args). '
'. &extedit_form($supplementalflag,$residx,$url,$title,$pathitem,undef,'direct',$symb). @@ -324,6 +328,12 @@ sub extedit_javascript { my %js_lt = &Apache::lonlocal::texthash( invurl => 'Invalid URL', titbl => 'Title is blank', + mixfra => 'Show preview in pop-up? (http in https page + no framing)', + mixonly => 'Show preview in pop-up? (http in https page)', + fraonly => 'Show preview in pop-up? (framing disallowed)', + nopopup => 'Pop-up blocked', + nopriv => 'Insufficient privileges to use preview', + badurl => 'URL is not: http://hostname/path or https://hostname/path', ); &js_escape(\%js_lt); @@ -374,17 +384,81 @@ function editext(residx) { return; } -function extUrlPreview(caller) { +function extUrlPreview(caller,protocol) { if (document.getElementById(caller)) { var url = document.getElementById(caller).value; if (regexp.test(url)) { - openMyModal(url,500,400,'yes'); + var http_regex = /^http\:\/\//gi; + var mixed = 0; + var noiframe = 0; + var nopriv = 0; + var badurl = 0; + var name = "externalpreview"; + if ((protocol == 'https') && (http_regex.test(url))) { + mixed = 1; + } + var http = new XMLHttpRequest(); + var lcurl = "/adm/exturlcheck"; + var params = "exturl="+url; + http.open("POST",lcurl, true); + http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); + http.onreadystatechange = function() { + if (http.readyState == 4) { + if (http.status == 200) { + if (http.responseText.length > 0) { + if (http.responseText == 1) { + noiframe = 1; + } else if (http.responseText == -1) { + nopriv = 1; + } else if (http.responseText == 0) { + badurl = 1; + } + } + openPreviewWindow(url,name,noiframe,mixed,nopriv,badurl); + } + } + } + http.send(params); } else { alert("$js_lt{'invurl'}"); } } } +var previewLCWindow = null; +function openPreviewWindow(url,name,noiframe,mixed,nopriv,badurl) { + if (previewLCWindow !=null) { + previewLCWindow.close(); + } + if (badurl) { + alert("$js_lt{'badurl'}"); + } else if (nopriv) { + alert("$js_lt{'nopriv'}"); + } else if ((noiframe == 1) || (mixed == 1)) { + var encurl = encodeURI(url); + var msg; + if (mixed == 1) { + if (noiframe == 1) { + msg = "$js_lt{'mixfra'}"; + } else { + msg = "$js_lt{'mixonly'}"; + } + } else { + msg = "$js_lt{'fraonly'}"; + } + if (confirm(msg)) { + previewLCWindow = window.open(url,name,"height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1"); + if (previewLCWindow != null) { + previewLCWindow.focus(); + } else { + alert("$js_lt{'nopopup'}"); + } + } + } else { + openMyModal(url,500,400,'yes'); + } +} + ENDJS }