--- loncom/interface/lonextresedit.pm 2020/01/13 19:03:37 1.8.2.4.2.1 +++ loncom/interface/lonextresedit.pm 2016/01/26 14:30:25 1.9 @@ -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.9 2016/01/26 14:30:25 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -60,7 +60,7 @@ sub handler { $symb,$type); if (($env{'form.folderpath'} =~ /^supplemental/) && ($env{'form.suppurl'})) { $supplementalflag = 1; - if (&unescape($env{'form.suppurl'}) =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) { + if (&unescape($env{'form.suppurl'}) =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) { $type = 'tool'; } } @@ -79,7 +79,7 @@ sub handler { if ($symb ne $env{'form.symb'}) { $env{'form.symb'} = $symb; } - if ($url =~ m{/adm/$cdom/$cnum/\d+/ext\.tool$}) { + if ($url =~ m{/adm/$cdom/$cnum/\d+/exttools?$}) { $type = 'tool'; } } @@ -146,7 +146,7 @@ sub process_changes { $oldtitle = &unescape($env{'form.title'}); $container = 'sequence'; $supplementalflag = 1; - if ($oldurl =~ m{^/adm/$cdom/$cnum/\d+/ext\.tool$}) { + if ($oldurl =~ m{^/adm/$cdom/$cnum/\d+/exttools?$}) { $type = 'tool'; } else { $type = 'ext'; @@ -157,7 +157,7 @@ sub process_changes { if ($env{'form.importdetail'}) { ($newtitle,$newurl,$newidx) = map {&unescape($_)} split(/\=/,$env{'form.importdetail'}); - if ($newurl =~ m{^(/adm/$cdom/$cnum/(\d+)/ext\.tool)\:?(.*)$}) { + if ($newurl =~ m{^(/adm/$cdom/$cnum/(\d+)/exttools?)\:?(.*)$}) { $newurl = $1; $marker = $2; $args = $3; @@ -259,59 +259,38 @@ sub process_changes { sub update_exttool { my ($marker,$cdom,$cnum,$args) = @_; my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); - my (%newhash,$changed,@deleted,$errormsg); - ($newhash{'target'},$newhash{'width'},$newhash{'height'},$newhash{'linktext'},$newhash{'explanation'}, - $newhash{'crslabel'},$newhash{'crstitle'}) = split(/:/,$args); - foreach my $item ('linktext','explanation','crslabel','crstitle') { - $newhash{$item} = &unescape($newhash{$item}); - } + my (%newhash,$changed,$errormsg); + ($newhash{'target'},$newhash{'width'},$newhash{'height'}) = split(/:/,$args); my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); - foreach my $item ('target','width','height','linktext','explanation','crslabel','crstitle') { + foreach my $item ('target','width','height') { $newhash{$item} =~ s/^\s+//; $newhash{$item} =~ s/\s+$//; - if (($item eq 'width') || ($item eq 'height') || ($item eq 'linktext') || ($item eq 'explanation')) { + unless ($item eq 'target') { if ($newhash{'target'} eq 'iframe') { $newhash{$item} = ''; - } elsif ($newhash{'target'} eq 'tab') { - if (($item eq 'width') || ($item eq 'height')) { - $newhash{$item} = ''; - } } } if ($toolhash{$item} ne $newhash{$item}) { if ($newhash{$item} eq '') { - unless (($item eq 'target') || - ((($item eq 'width') || ($item eq 'height')) && - (($newhash{'target'} eq 'window') || - (($newhash{'target'} eq '') && ($toolhash{'target'} eq 'window')))) || - ((($item eq 'linktext') || ($item eq 'explanation')) && - ((($newhash{'target'} =~ /^(window|tab)$/)) || - (($newhash{'target'} eq '') && ($toolhash{'target'} =~ /^(window|tab)$/))))) { - delete($toolhash{$item}); - push(@deleted,$item); - $changed = 1; - } + delete($toolhash{$item}); } else { $toolhash{$item} = $newhash{$item}; - $changed = 1; } + $changed = 1; } } if ($changed) { my $putres = &Apache::lonnet::put('exttool_'.$marker,\%toolhash,$cdom,$cnum); unless ($putres eq 'ok') { - $errormsg = &mt('Failed to save updated settings.').' '.&mt('Error: [_1].',$putres); + $errormsg = &mt('Failed to save updated settings.').' '.&mt('Error: [_1].',$putres); } } - if (@deleted) { - &Apache::lonnet::del('exttool_'.$marker,\@deleted,$cdom,$cnum); - } return ($changed,$errormsg); } sub extedit_form { my ($supplementalflag,$residx,$orig_url,$orig_title,$pathitem,$helpitem,$caller, - $symb,$type,$cdom,$cnum,$ltitools,$disabled) = @_; + $symb,$type,$cdom,$cnum,$ltitools) = @_; if ($type ne 'tool') { $type = 'ext'; } @@ -334,23 +313,14 @@ sub extedit_form { $tabid = 'ee'; } my ($formname,$formid,$toggle,$fieldsetid,$urlid,$dispdivstyle,$dimendivstyle, - $windivstyle,$linktextstyle,$explanationstyle,$labelstyle,$titlestyle, $legend,$urlelem,$toolelem,%toolattr); $formname = 'new'.$type; $toggle = $type; $fieldsetid = 'upload'.$type.'form'; $urlid = $type.'url'; - map { $toolattr{$_} = $type.$_; } ('dispdiv','dimendiv','dimenwidth','dimenheight', - 'crstitlediv','crslabeldiv','crstitle','crslabel', - 'windiv','linktextdiv','explanationdiv','linktext', - 'explanation'); + map { $toolattr{$_} = $type.$_; } ('dispdiv','dimendiv','dimenwidth','dimenheight'); $dispdivstyle = 'display:none'; $dimendivstyle = 'display:none'; - $windivstyle = 'display:none'; - $linktextstyle = 'display:none'; - $explanationstyle = 'display:none'; - $labelstyle = 'display:none'; - $titlestyle = 'display:none'; if ($supplementalflag) { $formname = 'newsupp'.$type; $toggle = 'supp'.$type; @@ -358,20 +328,14 @@ sub extedit_form { $urlid = 'supp'.$type.'url'; map { $toolattr{$_} = 'supp'.$toolattr{$_}; } (keys(%toolattr)); } - my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save,$crstitle,$crslabel, - $fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget, - $linktext,$explanation,%chkstate); + my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save, + $fieldsetstyle,$action,$hiddenelem,$form,$width,$height,$tooltarget,%chkstate); $fieldsetstyle = 'display: none;'; $action = '/adm/coursedocs'; - my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http'); - my $rows = 2; - my $cols = 20; if ($residx) { if ($caller eq 'direct') { $fieldsetstyle = 'display: block;'; $action = '/adm/extresedit'; - $rows = 10; - $cols = 45; if ($type eq 'tool') { $legend = $lt{'ee'}; } else { @@ -398,7 +362,7 @@ sub extedit_form { $srcclass = ' class="LC_nobreak"'; if ($type eq 'ext') { $extsrc = ''.$lt{'ul'}.' '; - $preview = ' '.$lt{'pr'}.''; + $preview = ' '.$lt{'pr'}.''; } $title = ''.$lt{'ti'}.' '; $save = $lt{'sv'}; @@ -420,26 +384,27 @@ sub extedit_form { $orig_url = 'http://'; $orig_title = $lt{'ex'}; $extsrc = $lt{'ul'}.':
'; - $preview = ''; + $preview = ''; $save = $lt{'al'}; } else { $orig_title = $lt{'et'}; $save = $lt{'at'}; - $orig_url = "/adm/$cdom/$cnum/new/ext\.tool"; + $orig_url = "/adm/$cdom/$cnum/new/exttool"; } $pathitem .= '
'; } $formid = $formname; if ($type eq 'ext') { - $urlelem = ''; + $urlelem = ''; } else { my $class = 'LC_nobreak'; if ($residx) { $class = 'LC_docs_ext_edit LC_nobreak'; - if ($orig_url =~ m{^/adm/$cdom/$cnum/(\d+)/ext\.tool$}) { + if ($orig_url =~ m{^/adm/$cdom/$cnum/(\d+)/exttools?$}) { my $marker = $1; my %toolhash=&Apache::lonnet::dump('exttool_'.$marker,$cdom,$cnum); if ($toolhash{'id'}) { + $dispdivstyle = 'display:block'; if (ref($ltitools) eq 'HASH') { if (keys(%{$ltitools})) { if (ref($ltitools->{$toolhash{'id'}}) eq 'HASH') { @@ -452,37 +417,12 @@ sub extedit_form { $tooltarget = $toolhash{'target'}; if ($tooltarget eq 'window') { $dimendivstyle = 'display:block'; - $windivstyle = 'display:block'; $chkstate{'window'} = 'checked="checked" '; - } elsif ($tooltarget eq 'tab') { - $windivstyle = 'display:block'; - $chkstate{'tab'} = 'checked="checked" '; } else { $chkstate{'iframe'} = 'checked="checked" '; } $width = $toolhash{'width'}; $height = $toolhash{'height'}; - $linktext = $toolhash{'linktext'}; - $explanation = $toolhash{'explanation'}; - if (ref($ltitools->{$toolhash{'id'}}->{'crsconf'}) eq 'HASH') { - if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'title'}) { - $crstitle = $toolhash{'crstitle'}; - $titlestyle = 'display:inline'; - } - if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'label'}) { - $crslabel = $toolhash{'crslabel'}; - $labelstyle = 'display:inline'; - } - if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'target'}) { - $dispdivstyle = 'display:block'; - } - if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'linktext'}) { - $linktextstyle = 'padding:0;display:inline'; - } - if ($ltitools->{$toolhash{'id'}}->{'crsconf'}->{'explanation'}) { - $explanationstyle = 'padding:0;display:inline'; - } - } $toolelem = ''.$image.' '.$tooltitle.'
'; } } @@ -492,7 +432,7 @@ sub extedit_form { } else { $toolelem = ''."\n". '
'; - $crslabel = $env{'course.'.$cdom.'_'.$cnum.'.internal.coursecode'}; - $crstitle = $env{'course.'.$cdom.'_'.$cnum.'.description'}; + $toolelem .= ''; } $toolelem .= '
'. ''.&mt('Display target:').' '. ''.(' 'x2). - ''.(' 'x2). + "'$toolattr{dimendiv}','$toolattr{dimenwidth}','$toolattr{dimenheight}'".');">'.&mt('iframe').''.(' 'x2). ''. - '
'. - &mt('Width').': '.(' 'x2). - &mt('Height').': '."\n". + "'$toolattr{dimendiv}','$toolattr{dimenwidth}','$toolattr{dimenheight}'".');">'.&mt('window').''. + '
'. + ''. + &mt('Width').''.(' 'x2). + &mt('Height').''."\n". '
'; - $toolelem .= '
'. - '
'. - ''.&mt('Link Text').'
'. - '
'. - ''.&mt('Explanation').'
'. - '
'. - '
'; - $toolelem .= '
'. - ''.&mt('Course label:').' '. - '
'. - '
'. - '
'. - ''.&mt('Course title:').' '. - '
'. - '
'; } my $chooser = $toolelem; if ($type eq 'ext') { @@ -570,11 +487,11 @@ $chooser
$title - + $pathitem $hiddenelem - +
@@ -588,8 +505,8 @@ ENDFORM } sub display_editor { - my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum,$hostname) = @_; - my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap); + my ($url,$folderpath,$symb,$idx,$type,$cdom,$cnum) = @_; + my ($residx,$supplementalflag,$title,$pathitem,$output,$js); if ($folderpath =~ /^supplemental/) { $supplementalflag = 1; $residx = $idx; @@ -599,7 +516,7 @@ 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,\$navmap); + my $path = &Apache::loncommon::symb_to_docspath($symb); $pathitem = ''; } my %ltitools; @@ -608,9 +525,6 @@ sub display_editor { } $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript()); my $args = { 'force_register' => $env{'form.register'} }; - if ($hostname) { - $args->{'hostname'} = $hostname; - } my $description = 'External Resource Editor'; if ($type eq 'tool') { $description = 'External Tool Editor'; @@ -631,42 +545,17 @@ sub extedit_javascript { $toolsjs = " var ltitools = new Array($num);\n". " var ltitoolsTarget = new Array($num);\n". " var ltitoolsWidth = new Array($num);\n". - " var ltitoolsHeight = new Array($num);\n". - " var ltitoolsLinkDef = new Array($num);\n". - " var ltitoolsExplainDef = new Array($num);\n". - " var ltitoolsDisplay = new Array($num);\n". - " 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 ltitoolsHeight = new Array($num);\n"; my $i = 0; foreach my $key (sort { $a <=> $b } keys(%{$toolsref})) { - if (ref($toolsref->{$key}) eq 'HASH') { - if (ref($toolsref->{$key}->{'display'}) eq 'HASH') { - my $target = $toolsref->{$key}->{'display'}->{'target'}; - my $width = $toolsref->{$key}->{'display'}->{'width'}; - my $height = $toolsref->{$key}->{'display'}->{'height'}; - my $linkdef = $toolsref->{$key}->{'display'}->{'linktext'}; - my $explaindef = $toolsref->{$key}->{'display'}->{'explanation'}; - $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"; - } - if (ref($toolsref->{$key}->{'crsconf'}) eq 'HASH') { - my $display = $toolsref->{$key}->{'crsconf'}->{'target'}; - $toolsjs .= ' ltitoolsDisplay['.$i.'] = '."'$display';\n"; - my $linktext = $toolsref->{$key}->{'crsconf'}->{'linktext'}; - $toolsjs .= ' ltitoolsLink['.$i.'] = '."'$linktext';\n"; - my $explanation = $toolsref->{$key}->{'crsconf'}->{'explanation'}; - $toolsjs .= ' ltitoolsExplain['.$i.'] = '."'$explanation';\n"; - my $label = $toolsref->{$key}->{'crsconf'}->{'label'}; - $toolsjs .= ' ltitoolsLabel['.$i.'] = '."'$label';\n"; - my $title = $toolsref->{$key}->{'crsconf'}->{'title'}; - $toolsjs .= ' ltitoolsTitle['.$i.'] = '."'$title';\n"; - } + if (ref($toolsref->{$key})) { + my $target = $toolsref->{$key}->{'target'}; + my $width = $toolsref->{$key}->{'width'}; + my $height = $toolsref->{$key}->{'height'}; + $toolsjs .= ' ltitools['.$i.'] = '."'$key';\n". + ' ltitoolsTarget['.$i.'] = '."'$target';\n". + ' ltitoolsWidth['.$i.'] = '."'$width';\n". + ' ltitoolsHeight['.$i.'] = '."'$height';\n"; $i++; } } @@ -674,12 +563,6 @@ 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', invtool => 'Please select an external tool', ); &js_escape(\%js_lt); @@ -692,7 +575,7 @@ ENDREGEXP var regexp = $urlregexp; -function setExternal(extform,residx,type,exttoolurl,supplementalflag) { +function setExternal(extform,residx,type,exttoolurl) { var title=extform.exttitle.value; if (!String.trim) { String.prototype.trim = function() {return this.replace(\/^\\s+|\\s+$\/g, "");}; } @@ -727,88 +610,20 @@ function setExternal(extform,residx,type } info += ':'+toolid; } - var prefix = ''; - if (supplementalflag == 1) { - prefix = 'supp'; - } - var dispdiv = prefix+'tooldispdiv'; - var windiv = prefix+'toolwindiv'; - if (residx > 0) { - dispdiv += '_'+residx; - windiv += '_'+residx; - } - if (document.getElementById(dispdiv)) { - if (document.getElementById(dispdiv).style.display == 'block') { - if (extform.exttooltarget.length) { - for (var i=0; i 0) { - linktextdiv += '_'+residx; - explanationdiv += '_'+residx; - } - if (document.getElementById(linktextdiv).style.display == 'inline') { - var linktext = extform.exttoollinktext.value; - linktext.trim(); - info += ':'+escape(linktext); - } else { - info += ':'; - } - if (document.getElementById(explanationdiv).style.display == 'inline') { - var explaintext = extform.exttoolexplanation.value; - explaintext.trim(); - info += ':'+escape(explaintext); - } else { - info += ':'; - } - } else { - info += '::'; } - } else { - info += '::'; - } - var labelinput = prefix+'toolcrslabel'; - var titleinput = prefix+'toolcrstitle'; - if (residx > 0) { - labelinput += '_'+residx; - titleinput += '_'+residx; - } - if (document.getElementById(labelinput)) { - var crslabel = document.getElementById(labelinput).value; - crslabel.trim(); - info += ':'+escape(crslabel); - } else { - info += ':'; - } - if (document.getElementById(titleinput)) { - var crstitle = document.getElementById(titleinput).value; - crstitle.trim(); - info += ':'+escape(crstitle); - } else { - info += ':'; } info=escape(info); if (residx > 0) { @@ -833,81 +648,17 @@ function editext(residx,type) { return; } -function extUrlPreview(caller,protocol) { +function extUrlPreview(caller) { if (document.getElementById(caller)) { 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))) { - 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); + openMyModal(url,500,400,'yes'); } 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) { @@ -915,17 +666,8 @@ function updateExttool(caller,form,suppl } dispdiv = prefix+'tooldispdiv'; dimendiv = prefix+'tooldimendiv'; - widthinput = prefix+'tooldimenwidth'; - heightinput = prefix+'tooldimenheight'; - labeldiv = prefix+'toolcrslabeldiv'; - titlediv = prefix+'toolcrstitlediv'; - labelinput = prefix+'toolcrslabel'; - titleinput = prefix+'toolcrstitle'; - windiv = prefix+'toolwindiv'; - linktextdiv = prefix+'toollinktextdiv'; - linktextinput = prefix+'toollinktext'; - explanationdiv = prefix+'toolexplanationdiv'; - explanationinput = prefix+'toolexplanation'; + widthinput = prefix+'toolwidth'; + heightinput = prefix+'toolheight'; if (document.getElementById(dispdiv)) { var toolpick = caller.options[caller.selectedIndex].value; $toolsjs @@ -936,145 +678,65 @@ function updateExttool(caller,form,suppl if (document.getElementById(dimendiv)) { document.getElementById(dimendiv).style.display = 'none'; } - if (document.getElementById(windiv)) { - document.getElementById(windiv).style.display = 'none'; - } - if (document.getElementById(linktextdiv)) { - document.getElementById(linktextdiv).style.display = 'none'; - } - if (document.getElementById(explanationdiv)) { - document.getElementById(explanationdiv).style.display = 'none'; - } - if (document.getElementById(labeldiv)) { - document.getElementById(labeldiv).style.display = 'none'; - } - if (document.getElementById(titlediv)) { - document.getElementById(titlediv).style.display = 'none'; - } } else { + if (document.getElementById(dispdiv)) { + document.getElementById(dispdiv).style.display = 'block'; + } if (ltitools.length > 0) { for (var j=0; j