--- loncom/interface/lonextresedit.pm 2020/01/13 19:03:37 1.8.2.4.2.1 +++ 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.8.2.4.2.1 2020/01/13 19:03:37 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) { @@ -392,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"'; @@ -407,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 { @@ -449,6 +500,11 @@ sub extedit_form { if ($icon) { $image = ''.$tooltitle.''; } + if ($ltitools->{$toolhash{'id'}}->{'url'} =~ m{://}) { + (my $prot,my $host,$providerurl) = ($ltitools->{$toolhash{'id'}}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$}); + } else { + $providerurl = $ltitools->{$toolhash{'id'}}->{'url'}; + } $tooltarget = $toolhash{'target'}; if ($tooltarget eq 'window') { $dimendivstyle = 'display:block'; @@ -464,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'}; @@ -473,6 +534,10 @@ sub extedit_form { $crslabel = $toolhash{'crslabel'}; $labelstyle = 'display:inline'; } + if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'append'}) { + $crsappend = $toolhash{'crsappend'}; + $appendstyle = 'display:inline'; + } if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'target'}) { $dispdivstyle = 'display:block'; } @@ -484,6 +549,7 @@ sub extedit_form { } } $toolelem = ''.$image.' '.$tooltitle.'
'; + $gradablestyle = 'display:inline'; } } } @@ -515,6 +581,8 @@ sub extedit_form { $toolelem .= '
'; $crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'}; $crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'}; + $crsappend = ''; + $chknogrd = ' checked="checked"'; } $toolelem .= '
'. ''.&mt('Display target:').' '. @@ -547,7 +615,18 @@ sub extedit_form { '
'. ''.&mt('Course title:').' '. '
'. - '
'; + '
'. + '
'. + ''.&mt('Append to URL[_1]', + ' ('.$providerurl.')
'). + '

'. + '
'. + '
'. + ''.&mt('Gradable').' '. + ''.(' 'x2). + '
'; } my $chooser = $toolelem; if ($type eq 'ext') { @@ -604,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'} }; @@ -629,6 +708,7 @@ sub extedit_javascript { if (ref($toolsref) eq 'HASH') { my $num = scalar(keys(%{$toolsref})); $toolsjs = " var ltitools = new Array($num);\n". + " var ltitoolsUrl = new Array($num);\n". " var ltitoolsTarget = new Array($num);\n". " var ltitoolsWidth = new Array($num);\n". " var ltitoolsHeight = new Array($num);\n". @@ -638,7 +718,8 @@ 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})) { if (ref($toolsref->{$key}) eq 'HASH') { @@ -648,12 +729,20 @@ sub extedit_javascript { my $height = $toolsref->{$key}->{'display'}->{'height'}; my $linkdef = $toolsref->{$key}->{'display'}->{'linktext'}; my $explaindef = $toolsref->{$key}->{'display'}->{'explanation'}; + my $providerurl; + if ($toolsref->{$key}->{'url'} =~ m{://}) { + (my $prot,my $host,$providerurl) = ($toolsref->{$key}->{'url'} =~ m{^([^/]+)://([^/]+)(|/.+)$}); + } else { + $providerurl = $toolsref->{$key}->{'url'}; + } + $providerurl = &LONCAPA::map::qtunescape($providerurl); $toolsjs .= ' ltitools['.$i.'] = '."'$key';\n". ' ltitoolsTarget['.$i.'] = '."'$target';\n". ' ltitoolsWidth['.$i.'] = '."'$width';\n". ' ltitoolsHeight['.$i.'] = '."'$height';\n". ' ltitoolsLinkDef['.$i.'] = '."'$linkdef';\n". - ' ltitoolsExplainDef['.$i.'] = '."'$explaindef';\n"; + ' ltitoolsExplainDef['.$i.'] = '."'$explaindef';\n". + ' ltitoolsUrl['.$i.'] = '."'$providerurl';\n"; } if (ref($toolsref->{$key}->{'crsconf'}) eq 'HASH') { my $display = $toolsref->{$key}->{'crsconf'}->{'target'}; @@ -666,7 +755,10 @@ sub extedit_javascript { $toolsjs .= ' ltitoolsLabel['.$i.'] = '."'$label';\n"; my $title = $toolsref->{$key}->{'crsconf'}->{'title'}; $toolsjs .= ' ltitoolsTitle['.$i.'] = '."'$title';\n"; + my $append = $toolsref->{$key}->{'crsconf'}->{'append'}; + $toolsjs .= ' ltitoolsAppend['.$i.'] = '."'$append';\n"; } + $i++; } } @@ -674,13 +766,13 @@ sub extedit_javascript { my %js_lt = &Apache::lonlocal::texthash( 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', - invtool => 'Please select an external tool', ); &js_escape(\%js_lt); @@ -792,9 +884,11 @@ function setExternal(extform,residx,type } var labelinput = prefix+'toolcrslabel'; var titleinput = prefix+'toolcrstitle'; + var appendinput = prefix+'toolcrsappend'; if (residx > 0) { labelinput += '_'+residx; titleinput += '_'+residx; + appendinput += '_'+residx; } if (document.getElementById(labelinput)) { var crslabel = document.getElementById(labelinput).value; @@ -810,6 +904,39 @@ function setExternal(extform,residx,type } else { info += ':'; } + if (document.getElementById(appendinput)) { + var crsappend = document.getElementById(appendinput).value; + crsappend.trim(); + info += ':'+escape(crsappend); + } 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();"); @@ -820,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; @@ -919,8 +1046,12 @@ function updateExttool(caller,form,suppl heightinput = prefix+'tooldimenheight'; labeldiv = prefix+'toolcrslabeldiv'; titlediv = prefix+'toolcrstitlediv'; + appenddiv = prefix+'toolcrsappenddiv'; + gradablediv = prefix+'toolgradablediv'; + providerurl = prefix+'toolproviderurl'; labelinput = prefix+'toolcrslabel'; titleinput = prefix+'toolcrstitle'; + appendinput = prefix+'toolcrsappend'; windiv = prefix+'toolwindiv'; linktextdiv = prefix+'toollinktextdiv'; linktextinput = prefix+'toollinktext'; @@ -951,6 +1082,12 @@ function updateExttool(caller,form,suppl if (document.getElementById(titlediv)) { document.getElementById(titlediv).style.display = 'none'; } + 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'; + } + } + } else { + document.getElementById(appenddiv).style.display = 'none'; + if (document.getElementById(providerurl)) { + document.getElementById(providerurl).innerHTML = ''; + } + } + } + if (document.getElementById(gradablediv)) { + if (supplementalflag != 1) { + document.getElementById(gradablediv).style.display = 'inline'; + } + } break; } }