Diff for /loncom/interface/lonextresedit.pm between versions 1.3 and 1.8.2.2

version 1.3, 2012/12/02 22:40:09 version 1.8.2.2, 2017/03/14 21:09:20
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 214  sub extedit_form { Line 229  sub extedit_form {
         $fieldsetstyle,$action,$hiddenelem,$form);          $fieldsetstyle,$action,$hiddenelem,$form);
     $fieldsetstyle = 'display: none;';      $fieldsetstyle = 'display: none;';
     $action = '/adm/coursedocs';      $action = '/adm/coursedocs';
       my $protocol = ($ENV{'SERVER_PORT'} == 443?'https':'http');
     if ($residx) {      if ($residx) {
         if ($caller eq 'direct') {          if ($caller eq 'direct') {
             $fieldsetstyle = 'display: block;';              $fieldsetstyle = 'display: block;';
Line 237  sub extedit_form { Line 253  sub extedit_form {
         $urlid = "exturl_$residx";          $urlid = "exturl_$residx";
         $srcclass = ' class="LC_nobreak"';          $srcclass = ' class="LC_nobreak"';
         $extsrc = '<span class="LC_docs_ext_edit">'.$lt{'ul'}.'&nbsp;</span>';          $extsrc = '<span class="LC_docs_ext_edit">'.$lt{'ul'}.'&nbsp;</span>';
         $preview = '&nbsp;<a class="LC_docs_ext_edit" href="javascript:extUrlPreview('."'$urlid'".');">'.$lt{'pr'}.'</a>';          $preview = '&nbsp;<a class="LC_docs_ext_edit" href="javascript:extUrlPreview('."'$urlid','$protocol'".');">'.$lt{'pr'}.'</a>';
         $title = '<span class="LC_docs_ext_edit">'.$lt{'ti'}.'&nbsp;</span>';          $title = '<span class="LC_docs_ext_edit">'.$lt{'ti'}.'&nbsp;</span>';
         $save = $lt{'sv'};          $save = $lt{'sv'};
     } else {      } else {
Line 248  sub extedit_form { Line 264  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','$protocol'".');"'.$disabled.' />';
         $save = $lt{'al'};          $save = $lt{'al'};
         $pathitem .= '<br />';          $pathitem .= '<br />';
     }      }
Line 259  $legend Line 275  $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>
Line 283  ENDFORM Line 299  ENDFORM
   
 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 293  sub display_editor { Line 309  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 310  sub display_editor { Line 322  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 329  function setExternal(extform,residx) { Line 342  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 361  function editext(residx) { Line 375  function editext(residx) {
     return;      return;
 }  }
   
 function extUrlPreview(caller) {  function extUrlPreview(caller,protocol) {
     if (document.getElementById(caller)) {      if (document.getElementById(caller)) {
         var url = document.getElementById(caller).value;          var url = document.getElementById(caller).value;
         if (regexp.test(url)) {          if (regexp.test(url)) {
             openMyModal(url,500,400,'yes');              var http_regex = /^http\:\/\//gi;
               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');
               }
         } else {          } else {
             alert("$lt{'invurl'}");              alert("$js_lt{'invurl'}");
         }          }
     }      }
 }  }

Removed from v.1.3  
changed lines
  Added in v.1.8.2.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>