version 1.2, 2012/12/02 18:25:11
|
version 1.8.2.1, 2016/11/29 16:28:16
|
Line 57 sub handler {
|
Line 57 sub handler {
|
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $cnum = $env{'course.'.$env{'request.course.id'}.'.num'}; |
my $chome = $env{'course.'.$env{'request.course.id'}.'.home'}; |
my $chome = $env{'course.'.$env{'request.course.id'}.'.home'}; |
my ($supplementalflag,$updated,$output,$errormsg,$residx,$url,$title,$symb); |
my ($supplementalflag,$updated,$output,$errormsg,$residx,$url,$title,$symb); |
if ((($env{'form.folderpath'} =~ /^supplemental/) && ($env{'form.suppurl'})) || |
if (($env{'form.folderpath'} =~ /^supplemental/) && ($env{'form.suppurl'})) { |
($env{'form.symb'} =~ /^uploaded/)) { |
$supplementalflag = 1; |
$supplementalflag = 1; |
} |
($updated,$output,$errormsg,$residx,$url,$title,$symb) = |
if (($supplementalflag) || ($env{'form.symb'} =~ /^uploaded/)) { |
|
($updated,$output,$errormsg,$residx,$url,$title,$symb) = |
&process_changes($supplementalflag,$cdom,$cnum,$chome); |
&process_changes($supplementalflag,$cdom,$cnum,$chome); |
if ($supplementalflag) { |
if ($supplementalflag) { |
if ($url ne $env{'form.suppurl'}) { |
if ($url ne $env{'form.suppurl'}) { |
Line 69 sub handler {
|
Line 70 sub handler {
|
if ($title ne $env{'form.title'}) { |
if ($title ne $env{'form.title'}) { |
$env{'form.title'} = $title; |
$env{'form.title'} = $title; |
} |
} |
|
$env{'form.idx'} = $residx; |
} else { |
} else { |
if ($symb ne $env{'form.symb'}) { |
if ($symb ne $env{'form.symb'}) { |
$env{'form.symb'} = $symb; |
$env{'form.symb'} = $symb; |
Line 99 sub handler {
|
Line 101 sub handler {
|
sub process_changes { |
sub process_changes { |
my ($supplementalflag,$cdom,$cnum,$chome) = @_; |
my ($supplementalflag,$cdom,$cnum,$chome) = @_; |
my ($folder,$container,$output,$errormsg,$updated,$symb,$oldidx,$oldurl, |
my ($folder,$container,$output,$errormsg,$updated,$symb,$oldidx,$oldurl, |
$oldtitle,$residx,$newurl,$newtitle); |
$oldtitle,$newidx,$newurl,$newtitle,$residx,$url,$title); |
if ($env{'form.symb'}) { |
if ($env{'form.symb'}) { |
$symb = $env{'form.symb'}; |
$symb = $env{'form.symb'}; |
(my $map,$oldidx,my $url)=&Apache::lonnet::decode_symb($symb); |
(my $map,$oldidx,$oldurl)=&Apache::lonnet::decode_symb($symb); |
if ($map =~ m{^uploaded/$cdom/$cnum/(default(_\d+|))\.(sequence|page)$}) { |
if ($map =~ m{^uploaded/$cdom/$cnum/(default(_\d+|))\.(sequence|page)$}) { |
$folder = $1; |
$folder = $1; |
$container = $3; |
$container = $3; |
} |
} |
if ($url =~ m{^ext/(.+)$}) { |
|
$oldurl = $1; |
|
if ($oldurl !~ m{^https://}) { |
|
$oldurl = 'http://'.$oldurl; |
|
} |
|
} |
|
$oldtitle = &Apache::lonnet::gettitle($env{'form.symb'}); |
$oldtitle = &Apache::lonnet::gettitle($env{'form.symb'}); |
} elsif ($env{'form.folderpath'}) { |
} elsif ($env{'form.folderpath'}) { |
$folder = &unescape( (split('&',$env{'form.folderpath'}))[-2] ); |
$folder = &unescape( (split('&',$env{'form.folderpath'}))[-2] ); |
Line 121 sub process_changes {
|
Line 117 sub process_changes {
|
$container = 'sequence'; |
$container = 'sequence'; |
$supplementalflag = 1; |
$supplementalflag = 1; |
} |
} |
|
if ($oldurl =~ m{^ext/(.+)$}) { |
|
my $external = $1; |
|
if ($external =~ m{^https://}) { |
|
$oldurl = $external; |
|
} else { |
|
$oldurl = 'http://'.$oldurl; |
|
} |
|
} |
|
$url = $oldurl; |
|
$title = $oldtitle; |
|
if ($env{'form.importdetail'}) { |
|
($newtitle,$newurl,$newidx) = |
|
map {&unescape($_)} split(/\=/,$env{'form.importdetail'}); |
|
} |
|
if ($supplementalflag) { |
|
$residx = $newidx; |
|
} else { |
|
$residx = $oldidx; |
|
} |
if ($folder && $container) { |
if ($folder && $container) { |
if ($env{'form.importdetail'}) { |
if ($env{'form.importdetail'}) { |
my ($errtext,$fatal,$mismatchedid); |
my ($errtext,$fatal,$mismatchedid,@imports); |
($newtitle,$newurl, $residx) = |
if (!$supplementalflag) { |
map {&unescape($_)} split(/\=/,$env{'form.importdetail'}); |
if (($oldidx) && ($oldidx != $newidx)) { |
if (!$supplementalflag && $oldidx) { |
$mismatchedid = 1; |
if ($oldidx != $residx) { |
} |
$mismatchedid = 1; |
|
$residx = $oldidx; |
|
} |
|
} |
} |
my @imports; |
|
if ($mismatchedid) { |
if ($mismatchedid) { |
$errormsg = 'Wrong item identifier'; |
$errormsg = 'Wrong item identifier'; |
} elsif (($newtitle eq $oldtitle) && ($newurl eq $oldurl)) { |
} elsif (($newtitle eq $oldtitle) && ($newurl eq $oldurl)) { |
Line 152 sub process_changes {
|
Line 163 sub process_changes {
|
$errormsg = &mt('Update failed: [_1].',$errtext); |
$errormsg = &mt('Update failed: [_1].',$errtext); |
} else { |
} else { |
$updated = 1; |
$updated = 1; |
|
$title = $newtitle; |
|
if ($newurl ne $oldurl) { |
|
$url = $newurl; |
|
$newurl =~ s{^http://}{}; |
|
$newurl = "ext/$newurl"; |
|
} |
if (!$supplementalflag) { |
if (!$supplementalflag) { |
if ($newurl ne $oldurl) { |
if ($newurl ne $oldurl) { |
$symb = &Apache::lonnet::encode_symb($map,$residx,"ext/$newurl"); |
$symb = &Apache::lonnet::encode_symb($map,$residx,$newurl); |
} else { |
} else { |
$symb = $env{'form.symb'}; |
$symb = $env{'form.symb'}; |
if ($symb) { |
if ($symb) { |
Line 162 sub process_changes {
|
Line 179 sub process_changes {
|
} |
} |
} |
} |
} |
} |
my ($furl,$ferr) = &Apache::lonuserstate::readmap("$cdom/$cnum"); |
my ($furl,$ferr) = |
|
&Apache::lonuserstate::readmap("$cdom/$cnum"); |
if ($ferr) { |
if ($ferr) { |
$errormsg = &mt('Reload failed: [_1].',$ferr); |
$errormsg = &mt('Reload failed: [_1].',$ferr); |
} else { |
} else { |
&Apache::loncommon::update_content_constraints($cdom,$cnum,$chome, |
unless ($supplementalflag) { |
$cdom.'_'.$cnum); |
&Apache::loncommon::update_content_constraints($cdom,$cnum,$chome,$cdom.'_'.$cnum); |
|
} |
} |
} |
} |
} |
} |
} |
Line 178 sub process_changes {
|
Line 197 sub process_changes {
|
} else { |
} else { |
$errormsg = &mt('Information about current external resource is incomplete.'); |
$errormsg = &mt('Information about current external resource is incomplete.'); |
} |
} |
if ($updated) { |
return ($updated,$output,$errormsg,$residx,$url,$title,$symb); |
return ($updated,$output,$errormsg,$residx,$newurl,$newtitle,$symb); |
|
} else { |
|
return ($updated,$output,$errormsg,$residx,$oldurl,$oldtitle,$symb); |
|
} |
|
} |
} |
|
|
sub extedit_form { |
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( |
my %lt = &Apache::lonlocal::texthash( |
ex => 'External Resource', |
ex => 'External Resource', |
ed => 'Edit', |
ed => 'Edit', |
Line 211 sub extedit_form {
|
Line 226 sub extedit_form {
|
$urlid = 'suppexturl'; |
$urlid = 'suppexturl'; |
} |
} |
my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save, |
my ($link,$legend,$active,$srcclass,$extsrc,$preview,$title,$save, |
$fieldsetstyle,$action,$hiddenelem); |
$fieldsetstyle,$action,$hiddenelem,$form); |
$fieldsetstyle = 'display: none;'; |
$fieldsetstyle = 'display: none;'; |
$action = '/adm/coursedocs'; |
$action = '/adm/coursedocs'; |
if ($residx) { |
if ($residx) { |
Line 228 sub extedit_form {
|
Line 243 sub extedit_form {
|
&HTML::Entities::encode(&escape($orig_title),'<>&"').'" />'; |
&HTML::Entities::encode(&escape($orig_title),'<>&"').'" />'; |
} |
} |
} else { |
} else { |
$link = '<a class="LC_docs_ext_edit" href="javascript:editext('."'$residx'".');">'.$lt{'ed'}.'</a>'; |
$link = '<a class="LC_docs_ext_edit" href="javascript:editext('."'$residx'".');">'.$lt{'ed'}.'</a> '."\n"; |
$size = 40; |
$size = 40; |
$active = '<input type="hidden" name="active" value="'.$tabid.'" />'; |
$active = '<input type="hidden" name="active" value="'.$tabid.'" />'; |
} |
} |
$formname = "editext_$residx"; |
$formname = "editext_$residx"; |
$fieldsetid = "uploadext$residx"; |
$fieldsetid = "uploadext$residx"; |
Line 248 sub extedit_form {
|
Line 263 sub extedit_form {
|
$residx = 0; |
$residx = 0; |
$orig_url = 'http://'; |
$orig_url = 'http://'; |
$orig_title = $lt{'ex'}; |
$orig_title = $lt{'ex'}; |
$preview = '<input type="button" name="view" value="'.$lt{'pr'}.'" onclick="javascript:extUrlPreview('."'$urlid'".');" />'; |
$preview = '<input type="button" name="view" value="'.$lt{'pr'}.'" onclick="javascript:extUrlPreview('."'$urlid'".');"'.$disabled.' />'; |
$save = $lt{'al'}; |
$save = $lt{'al'}; |
$pathitem .= '<br />'; |
$pathitem .= '<br />'; |
} |
} |
return <<ENDFORM |
$form = <<ENDFORM; |
$link |
|
<form action="$action" method="post" name="$formname"> |
<form action="$action" method="post" name="$formname"> |
<fieldset id="$fieldsetid" style="$fieldsetstyle"> |
<fieldset id="$fieldsetid" style="$fieldsetstyle"> |
$legend |
$legend |
$active |
$active |
<span$srcclass> |
<span$srcclass> |
$extsrc |
$extsrc |
<input type="text" size="$size" name="exturl" id="$urlid" value="$orig_url" /> |
<input type="text" size="$size" name="exturl" id="$urlid" value="$orig_url" $disabled /> |
$preview |
$preview |
</span> |
</span> |
<br /> |
<br /> |
<span$srcclass> |
<span$srcclass> |
$title |
$title |
<input type="text" size="$size" name="exttitle" value="$orig_title" /> |
<input type="text" size="$size" name="exttitle" value="$orig_title" $disabled /> |
<input type="hidden" name="importdetail" value="" /> |
<input type="hidden" name="importdetail" value="" /> |
$pathitem |
$pathitem |
$hiddenelem |
$hiddenelem |
<input type="button" value="$save" onclick="javascript:setExternal(this.form,'$residx');" /> |
<input type="button" value="$save" onclick="javascript:setExternal(this.form,'$residx');" $disabled /> |
</span> |
</span> |
</fieldset> |
</fieldset> |
</form> |
</form> |
ENDFORM |
ENDFORM |
|
if (wantarray) { |
|
return ($link,$form); |
|
} else { |
|
return $link.$form; |
|
} |
} |
} |
|
|
sub display_editor { |
sub display_editor { |
my ($url,$folderpath,$symb,$idx) = @_; |
my ($url,$folderpath,$symb,$idx) = @_; |
my ($residx,$supplementalflag,$title,$pathitem,$output); |
my ($residx,$supplementalflag,$title,$pathitem,$output,$js,$navmap); |
if ($folderpath =~ /^supplemental/) { |
if ($folderpath =~ /^supplemental/) { |
$supplementalflag = 1; |
$supplementalflag = 1; |
$residx = $idx; |
$residx = $idx; |
Line 290 sub display_editor {
|
Line 308 sub display_editor {
|
(my $map,$residx,my $res) = |
(my $map,$residx,my $res) = |
&Apache::lonnet::decode_symb($symb); |
&Apache::lonnet::decode_symb($symb); |
$title = &Apache::lonnet::gettitle($symb); |
$title = &Apache::lonnet::gettitle($symb); |
my $path = &Apache::lonnet::getdocspath($symb); |
my $path = &Apache::loncommon::symb_to_docspath($symb,\$navmap); |
if ($map =~ /\.page$/) { |
$pathitem = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($path,'<>&"').'" />'; |
$pathitem = '<input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($path,'<>&"').'" />'; |
|
} else { |
|
$pathitem = '<input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($path,'<>&"').'" />'; |
|
} |
|
} |
} |
my $js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript()); |
$js = &Apache::lonhtmlcommon::scripttag(&extedit_javascript()); |
my $args = { 'force_register' => $env{'form.register'} }; |
my $args = { 'force_register' => $env{'form.register'} }; |
return &Apache::loncommon::start_page('External Resource Editor',$js,$args). |
return &Apache::loncommon::start_page('External Resource Editor',$js,$args). |
'<div class="LC_left_float">'. |
'<div class="LC_left_float">'. |
Line 307 sub display_editor {
|
Line 321 sub display_editor {
|
} |
} |
|
|
sub extedit_javascript { |
sub extedit_javascript { |
my %lt = &Apache::lonlocal::texthash( |
my %js_lt = &Apache::lonlocal::texthash( |
invurl => 'Invalid URL', |
invurl => 'Invalid URL', |
titbl => 'Title is blank', |
titbl => 'Title is blank', |
); |
); |
|
&js_escape(\%js_lt); |
|
|
my $urlregexp = <<'ENDREGEXP'; |
my $urlregexp = <<'ENDREGEXP'; |
/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i |
/^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i |
Line 326 function setExternal(extform,residx) {
|
Line 341 function setExternal(extform,residx) {
|
String.prototype.trim = function() {return this.replace(\/^\\s+|\\s+$\/g, "");}; } |
String.prototype.trim = function() {return this.replace(\/^\\s+|\\s+$\/g, "");}; } |
var url=extform.exturl.value; |
var url=extform.exturl.value; |
if (title == null || title.trim()=="") { |
if (title == null || title.trim()=="") { |
alert("$lt{'titbl'}"); |
alert("$js_lt{'titbl'}"); |
extform.exttitle.focus(); |
extform.exttitle.focus(); |
return; |
return; |
} |
} |
if (regexp.test(url)) { |
if (regexp.test(url)) { |
url = escape(url); |
url = escape(url); |
|
title = escape(title); |
if (residx > 0) { |
if (residx > 0) { |
eval("extform.importdetail.value=title+'='+url+'='+residx;extform.submit();"); |
eval("extform.importdetail.value=title+'='+url+'='+residx;extform.submit();"); |
} else { |
} else { |
eval("extform.importdetail.value=title+'='+url;extform.submit();"); |
eval("extform.importdetail.value=title+'='+url;extform.submit();"); |
} |
} |
} else { |
} else { |
alert("$lt{'invurl'}"); |
alert("$js_lt{'invurl'}"); |
extform.exturl.focus(); |
extform.exturl.focus(); |
return; |
return; |
} |
} |
Line 364 function extUrlPreview(caller) {
|
Line 380 function extUrlPreview(caller) {
|
if (regexp.test(url)) { |
if (regexp.test(url)) { |
openMyModal(url,500,400,'yes'); |
openMyModal(url,500,400,'yes'); |
} else { |
} else { |
alert("$lt{'invurl'}"); |
alert("$js_lt{'invurl'}"); |
} |
} |
} |
} |
} |
} |