--- loncom/interface/lonextresedit.pm 2017/11/30 01:52:14 1.20 +++ loncom/interface/lonextresedit.pm 2022/09/09 14:24:30 1.30 @@ -1,7 +1,7 @@ # The LearningOnline Network # Documents # -# $Id: lonextresedit.pm,v 1.20 2017/11/30 01:52:14 raeburn Exp $ +# $Id: lonextresedit.pm,v 1.30 2022/09/09 14:24:30 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -98,7 +98,7 @@ sub handler { } my %ltitools; if ($type eq 'tool') { - %ltitools = &Apache::lonnet::get_domain_ltitools($cdom); + %ltitools = &Apache::lonnet::get_domain_lti($cdom,'consumer'); } my $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript()); my $pathitem = ''; if ($symb) { @@ -394,7 +443,7 @@ sub extedit_form { $active = ''; } $formname = 'edit'.$type.'_'.$residx; - $fieldsetid = 'upload'.$type.$residx; + $fieldsetid = 'external'.$type.$residx; $urlid = $type.'url_'.$residx; map { $toolattr{$_} .= '_'.$residx; } (keys(%toolattr)); $srcclass = ' class="LC_nobreak"'; @@ -409,7 +458,7 @@ sub extedit_form { if ($type eq 'tool') { $link = $lt{'et'}; } - $link = ''.$link.''.$helpitem; + $link = ''.$link.''.$helpitem; if ($type eq 'tool') { $legend = $lt{'te'}; } else { @@ -471,6 +520,11 @@ sub extedit_form { $height = $toolhash{'height'}; $linktext = $toolhash{'linktext'}; $explanation = $toolhash{'explanation'}; + if ($toolhash{'gradable'}) { + $chkgrd = ' checked="checked"'; + } else { + $chknogrd = ' checked="checked"'; + } if (ref($ltitools->{$toolhash{'id'}}->{'crsconf'}) eq 'HASH') { if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'title'}) { $crstitle = $toolhash{'crstitle'}; @@ -495,6 +549,7 @@ sub extedit_form { } } $toolelem = ''.$image.' '.$tooltitle.'
'; + $gradablestyle = 'display:inline'; } } } @@ -527,6 +582,7 @@ sub extedit_form { $crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'}; $crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'}; $crsappend = ''; + $chknogrd = ' checked="checked"'; } $toolelem .= '
'. ''.&mt('Display target:').' '. @@ -563,8 +619,14 @@ sub extedit_form { '
'. ''.&mt('Append to URL[_1]', ' ('.$providerurl.')
'). - '

'. - '
'; + '

'. + '
'. + '
'. + ''.&mt('Gradable').' '. + ''.(' 'x2). + '
'; } my $chooser = $toolelem; if ($type eq 'ext') { @@ -621,7 +683,7 @@ sub display_editor { } my %ltitools; if ($type eq 'tool') { - %ltitools = &Apache::lonnet::get_domain_ltitools($cdom); + %ltitools = &Apache::lonnet::get_domain_lti($cdom,'consumer'); } $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript()); my $args = { 'force_register' => $env{'form.register'} }; @@ -656,7 +718,7 @@ sub extedit_javascript { " var ltitoolsLink = new Array($num);\n". " var ltitoolsExplain = new Array($num);\n". " var ltitoolsLabel = new Array($num);\n". - " var ltitoolsTitle = new Array($num);\n"; + " var ltitoolsTitle = new Array($num);\n". " var ltitoolsAppend = new Array($num);\n"; my $i = 0; foreach my $key (sort { $a <=> $b } keys(%{$toolsref})) { @@ -673,6 +735,7 @@ sub extedit_javascript { } else { $providerurl = $toolsref->{$key}->{'url'}; } + $providerurl = &LONCAPA::map::qtunescape($providerurl); $toolsjs .= ' ltitools['.$i.'] = '."'$key';\n". ' ltitoolsTarget['.$i.'] = '."'$target';\n". ' ltitoolsWidth['.$i.'] = '."'$width';\n". @@ -704,6 +767,12 @@ sub extedit_javascript { invurl => 'Invalid URL', titbl => 'Title is blank', invtool => 'Please select an external tool', + 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); @@ -842,6 +911,32 @@ function setExternal(extform,residx,type } else { info += ':'; } + var gradablediv = prefix+'toolgradablediv'; + if (residx > 0) { + gradablediv += '_'+residx; + } + if (document.getElementById(gradablediv)) { + if (document.getElementById(gradablediv).style.display == 'inline') { + if (extform.exttoolgradable.length) { + for (var i=0; i 0) { eval("extform.importdetail.value=title+'='+info+'='+residx;extform.submit();"); @@ -852,14 +947,14 @@ function setExternal(extform,residx,type } function editext(residx,type) { - if (document.getElementById('upload'+type+residx)) { - var curr = document.getElementById('upload'+type+residx).style.display; + if (document.getElementById('external'+type+residx)) { + var curr = document.getElementById('external'+type+residx).style.display; if (curr == 'none') { disp = 'block'; } else { disp = 'none'; } - document.getElementById('upload'+type+residx).style.display=disp; + document.getElementById('external'+type+residx).style.display=disp; } resize_scrollbox('contentscroll','1','1'); return; @@ -870,17 +965,76 @@ function extUrlPreview(caller,protocol) var url = document.getElementById(caller).value; if (regexp.test(url)) { 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))) { - window.open(url,"externalpreview","height=400,width=500,scrollbars=1,resizable=1,menubar=0,location=1"); - } else { - openMyModal(url,500,400,'yes'); + 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'); + } +} + function updateExttool(caller,form,supplementalflag) { var prefix = ''; if (supplementalflag == 1) { @@ -893,6 +1047,7 @@ function updateExttool(caller,form,suppl labeldiv = prefix+'toolcrslabeldiv'; titlediv = prefix+'toolcrstitlediv'; appenddiv = prefix+'toolcrsappenddiv'; + gradablediv = prefix+'toolgradablediv'; providerurl = prefix+'toolproviderurl'; labelinput = prefix+'toolcrslabel'; titleinput = prefix+'toolcrstitle'; @@ -930,6 +1085,9 @@ function updateExttool(caller,form,suppl if (document.getElementById(appenddiv)) { document.getElementById(appenddiv).style.display = 'none'; } + if (document.getElementById(gradablediv)) { + document.getElementById(gradablediv).style.display = 'none'; + } } else { if (ltitools.length > 0) { for (var j=0; j'; + document.getElementById(providerurl).innerHTML = ' ('+ltitoolsUrl[j]+')
'; } } } else { document.getElementById(appenddiv).style.display = 'none'; if (document.getElementById(providerurl)) { - document.getElementById(providerurl).innerHTML.value = ''; + document.getElementById(providerurl).innerHTML = ''; } } } + if (document.getElementById(gradablediv)) { + if (supplementalflag != 1) { + document.getElementById(gradablediv).style.display = 'inline'; + } + } break; } }