Diff for /loncom/interface/londocs.pm between versions 1.260 and 1.281

version 1.260, 2006/11/29 21:00:35 version 1.281, 2007/06/29 23:25:30
Line 42  use HTML::Entities; Line 42  use HTML::Entities;
 use GDBM_File;  use GDBM_File;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Cwd;  use Cwd;
 use LONCAPA;  use LONCAPA qw(:DEFAULT :match);
   
 my $iconpath;  my $iconpath;
   
Line 99  sub authorhosts { Line 99  sub authorhosts {
  $ca=$env{'user.name'};   $ca=$env{'user.name'};
  $cd=$env{'user.domain'};   $cd=$env{'user.domain'};
     } else {      } else {
  ($cd,$ca)=($realm=~/^\/(\w+)\/(\w+)$/);   ($cd,$ca)=($realm=~/^\/($match_domain)\/($match_username)$/);
     }      }
     my $allowed=0;      my $allowed=0;
     my $myhome=&Apache::lonnet::homeserver($ca,$cd);      my $myhome=&Apache::lonnet::homeserver($ca,$cd);
Line 235  sub dumpcourse { Line 235  sub dumpcourse {
     my ($ext)=($_=~/\.(\w+)$/);      my ($ext)=($_=~/\.(\w+)$/);
     my $title=$hash{'title_'.$hash{      my $title=$hash{'title_'.$hash{
  'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};   'ids_/uploaded/'.$origcrsdata{'domain'}.'/'.$origcrsdata{'num'}.'/'.$_}};
     $title=~s/:/:/g;  
     $r->print('<td>'.($title?$title:'&nbsp;').'</td>');      $r->print('<td>'.($title?$title:'&nbsp;').'</td>');
     if (!$title) {      if (!$title) {
  $title=$_;   $title=$_;
Line 366  sub exportcourse { Line 365  sub exportcourse {
             if (ref($curRes)) {              if (ref($curRes)) {
                 my $symb = $curRes->symb();                  my $symb = $curRes->symb();
                 my $ressymb = $symb;                  my $ressymb = $symb;
                 if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) {                  if ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) {
                     unless ($ressymb =~ m|adm/wrapper/adm|) {                      unless ($ressymb =~ m|adm/wrapper/adm|) {
                         $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';                          $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                     }                      }
Line 613  sub build_package { Line 612  sub build_package {
                         if (grep/^$count$/,@$discussions) {                          if (grep/^$count$/,@$discussions) {
                             my $ressymb = $symb;                              my $ressymb = $symb;
                             my $mode;                              my $mode;
                             if ($ressymb =~ m|adm/(\w+)/(\w+)/(\d+)/bulletinboard$|) {                              if ($ressymb =~ m|adm/($match_domain)/($match_username)/(\d+)/bulletinboard$|) {
                                 unless ($ressymb =~ m|adm/wrapper/adm|) {                                  unless ($ressymb =~ m|adm/wrapper/adm|) {
                                     $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';                                      $ressymb = 'bulletin___'.$3.'___adm/wrapper/adm/'.$1.'/'.$2.'/'.$3.'/bulletinboard';
                                 }                                  }
Line 698  sub process_content { Line 697  sub process_content {
         }          }
     } elsif ($symb =~ m-lib/templates/examupload\.problem$-) {      } elsif ($symb =~ m-lib/templates/examupload\.problem$-) {
         $content_type = 'examupload';          $content_type = 'examupload';
     } elsif ($symb =~ m-adm/(\w+)/(\w+)/(\d+)/bulletinboard$-) {      } elsif ($symb =~ m-adm/($match_domain)/($match_username)/(\d+)/bulletinboard$-) {
         $content_type = 'bulletinboard';          $content_type = 'bulletinboard';
         my $contents =  &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2);          my $contents =  &Apache::imsexport::templatedpage($content_type,$3,$count,\@uploads,$1,$2);
         if ($contents) {          if ($contents) {
Line 905  sub store_template { Line 904  sub store_template {
 # Imports the given (name, url) resources into the course  # Imports the given (name, url) resources into the course
 # coursenum, coursedom, and folder must precede the list  # coursenum, coursedom, and folder must precede the list
 sub group_import {  sub group_import {
     my $coursenum = shift;      my ($coursenum, $coursedom, $folder, $container, $caller, @files) = @_;
     my $coursedom = shift;  
     my $folder = shift;      while (@files) {
     my $container = shift;   my $name = shift(@files);
     my $caller = shift;   my $url  = shift(@files);
     while (@_) {   #FIXME check if file exists before overwriting, might be restoring it
  my $name = shift;          if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$}) 
  my $url = shift;       && ($caller eq 'londocs')
         if (($url =~ m#^/uploaded/$coursedom/$coursenum/(default_\d+\.)(page|sequence)$#) && ($caller eq 'londocs')) {       && (!&Apache::lonnet::stat_file($url))) {
       
             my $errtext = '';              my $errtext = '';
             my $fatal = 0;              my $fatal = 0;
             my $newmapstr = '<map>'."\n".              my $newmapstr = '<map>'."\n".
Line 936  sub group_import { Line 936  sub group_import {
     my $idx = &LONCAPA::map::getresidx($url);      my $idx = &LONCAPA::map::getresidx($url);
     $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;      $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
     my $ext = 'false';      my $ext = 'false';
     if ($url=~/^http:\/\//) { $ext = 'true'; }      if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; }
     $url =~ s/:/\&colon;/g;      $url  = &LONCAPA::map::qtunescape($url);
     $name =~ s/:/\&colon;/g;      $name = &LONCAPA::map::qtunescape($name);
     $LONCAPA::map::resources[$idx] =       $LONCAPA::map::resources[$idx] = 
  join ':', ($name, $url, $ext, 'normal', 'res');   join ':', ($name, $url, $ext, 'normal', 'res');
  }   }
Line 958  sub breadcrumbs { Line 958  sub breadcrumbs {
     my $folderpath;      my $folderpath;
     my $cpinfo='';      my $cpinfo='';
     my $plain='';      my $plain='';
     if ($env{'form.markedcopy_url'}) {  
        $cpinfo='&markedcopy_url='.  
                &escape($env{'form.markedcopy_url'}).  
                '&markedcopy_title='.  
                &escape($env{'form.markedcopy_title'});  
     }  
     my $randompick=-1;      my $randompick=-1;
     my $isencrypted=0;      my $isencrypted=0;
     my $ishidden=0;      my $ishidden=0;
Line 988  sub breadcrumbs { Line 982  sub breadcrumbs {
       {'href'=>$url.$cpinfo,        {'href'=>$url.$cpinfo,
        'title'=>$name,         'title'=>$name,
        'text'=>'<font size="+1">'.         'text'=>'<font size="+1">'.
    $name.'</font>'     $name.'</font>',
          'no_mt'=>1,
        });         });
  $plain.=$name.' &gt; ';   $plain.=$name.' &gt; ';
     }      }
Line 1100  sub docs_change_log { Line 1095  sub docs_change_log {
     if ($docslog{$id}{'logentry'}{'currentfolder'} ne $folder) { next; }      if ($docslog{$id}{'logentry'}{'currentfolder'} ne $folder) { next; }
  }   }
         my @changes=keys(%{$docslog{$id}{'logentry'}});          my @changes=keys(%{$docslog{$id}{'logentry'}});
           if ($env{'form.displayfilter'} eq 'containing') {
       my $wholeentry=$docslog{$id}{'exe_uname'}.':'.$docslog{$id}{'exe_udom'}.':'.
    &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},$docslog{$id}{'exe_udom'});
       foreach my $key (@changes) {
    $wholeentry.=':'.$docslog{$id}{'logentry'}{$key};
       }
       if ($wholeentry!~/\Q$env{'form.containingphrase'}\E/i) { next; }         
    }
         my $count = 0;          my $count = 0;
         my $time =          my $time =
             &Apache::lonlocal::locallocaltime($docslog{$id}{'exe_time'});              &Apache::lonlocal::locallocaltime($docslog{$id}{'exe_time'});
Line 1146  sub docs_change_log { Line 1149  sub docs_change_log {
  for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {   for (my $idx=0;$idx<=$docslog{$id}{'logentry'}{'maxidx'};$idx++) {
     my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0];      my $oldname=(split(/\:/,$docslog{$id}{'logentry'}{'before_resources_'.$idx}))[0];
     my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0];      my $newname=(split(/\:/,$docslog{$id}{'logentry'}{'after_resources_'.$idx}))[0];
     if ($oldname ne $newname) {      if ($oldname ne '' && $oldname ne $newname) {
  $r->print(&LONCAPA::map::qtescape($newname));   $r->print(&LONCAPA::map::qtescape($newname));
     }      }
  }           }        
Line 1176  sub docs_change_log { Line 1179  sub docs_change_log {
               || $shown<=$env{'form.show'})) { last; }                || $shown<=$env{'form.show'})) { last; }
     }      }
     $r->print(&Apache::loncommon::end_data_table());      $r->print(&Apache::loncommon::end_data_table());
     $r->print(&Apache::loncommon::end_page());  }
   
   sub update_paste_buffer {
       my ($coursenum,$coursedom) = @_;
   
       return if (!defined($env{'form.markcopy'}));
       return if (!defined($env{'form.copyfolder'}));
       return if ($env{'form.markcopy'} < 0);
   
       my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
       $env{'form.copyfolder'});
       
       return if ($fatal);
   
   # Mark for copying
       my ($title,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$env{'form.markcopy'}]]);
       if (&is_supplemental_title($title)) {
    ($title) = &parse_supplemental_title($title);
       }
       &Apache::lonnet::appenv('docs.markedcopy_title' => $title,
       'docs.markedcopy_url'   => $url);
       delete($env{'form.markcopy'});
   }
   
   sub print_paste_buffer {
       my ($r,$container) = @_;
       return if (!defined($env{'docs.markedcopy_url'}));
   
       $r->print(<<ENDPASTE);
   <p><form name="pasteform" action="/adm/coursedocs" method="post">
   ENDPASTE
       $r->print('<input type="submit" name="pastemarked" value="'.&mt('Paste').'" /> ');
   
       my $type;
       if ($env{'docs.markedcopy_url'} =~ m{^/adm/wrapper/ext}) {
    $type = &mt('External Resource');
    $r->print($type.': '.&Apache::map::qtescape($env{'docs.markedcopy_title'}));
       }  else {
    my $extension = (split(/\./,$env{'docs.markedcopy_url'}))[-1];
    my $type = &Apache::loncommon::filedescription($extension);
    my $icon = '<img src="'.&Apache::loncommon::icon($extension).
       '" class="LC_icon" />';
    $r->print($icon.$type.': '.  &parse_supplemental_title($env{'docs.markedcopy_title'}));
       }
       if ($container eq 'page') {
    $r->print(<<PAGEINFO);
    <input type="hidden" name="pagepath" value="$env{'form.pagepath'}" />
    <input type="hidden" name="pagesymb" value="$env{'form.pagesymb'}" />
   PAGEINFO
       } else {
    $r->print(<<FOLDERINFO);
           <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />
   FOLDERINFO
       }
       $r->print('</form></p>');
 }  }
   
 sub editor {  sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output)=@_;      my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$which)=@_;
     my $errtext='';      my $errtext='';
     my $fatal=0;      my $fatal=0;
     my $container='sequence';      my $container='sequence';
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         $container='page';          $container='page';
     }      }
     ($errtext,$fatal)=      ($errtext,$fatal) = &mapread($coursenum,$coursedom,$folder.'.'.$container);
               &mapread($coursenum,$coursedom,$folder.'.'.$container);  
     if ($#LONCAPA::map::order<1) {      if ($#LONCAPA::map::order<1) {
  my $idx=&LONCAPA::map::getresidx();   my $idx=&LONCAPA::map::getresidx();
  if ($idx<=0) { $idx=1; }   if ($idx<=0) { $idx=1; }
         $LONCAPA::map::order[0]=$idx;          $LONCAPA::map::order[0]=$idx;
         $LONCAPA::map::resources[$idx]='';          $LONCAPA::map::resources[$idx]='';
     }      }
     if (defined($env{'form.markcopy'})) {      
 # Mark for copying  
  my ($title,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$env{'form.markcopy'}]]);  
  $env{'form.markedcopy_title'}=$title;  
  $env{'form.markedcopy_url'}=$url;  
     }  
     my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain)=&breadcrumbs($folder);      my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain)=&breadcrumbs($folder);
     $r->print($breadcrumbtrail);      $r->print($breadcrumbtrail);
     if ($fatal) {      if ($fatal) {
Line 1289  sub editor { Line 1340  sub editor {
     return;      return;
  }   }
     }      }
       
     if ($env{'form.pastemarked'}) {      if ($env{'form.pastemarked'}) {
 # paste resource to end of list  # paste resource to end of list
                 my $url=$env{'form.markedcopy_url'};                  my $url=$env{'docs.markedcopy_url'};
  my $title=$env{'form.markedcopy_title'};   my $title=$env{'docs.markedcopy_title'};
 # Maps need to be copied first  # Maps need to be copied first
  if (($url=~/\.(page|sequence)$/) || ($url=~/^\/uploaded\//)) {   if (($url=~/\.(page|sequence)$/) || ($url=~/^\/uploaded\//)) {
     $title=&mt('Copy of').' '.$title;      $title=&mt('Copy of').' '.$title;
Line 1301  sub editor { Line 1352  sub editor {
     $url=~/^(.+)\.(\w+)$/;      $url=~/^(.+)\.(\w+)$/;
     my $newurl=$1.$newid.'.'.$2;      my $newurl=$1.$newid.'.'.$2;
     my $storefn=$newurl;      my $storefn=$newurl;
                     $storefn=~s/^\/\w+\/\w+\/\w+\///;                      $storefn=~s{^/\w+/$match_domain/$match_username/}{};
     &Apache::lonclonecourse::writefile      &Apache::lonclonecourse::writefile
  ($env{'request.course.id'},$storefn,   ($env{'request.course.id'},$storefn,
  &Apache::lonnet::getfile($url));   &Apache::lonnet::getfile($url));
     $url=$newurl;      $url=$newurl;
  }   }
  $title=~s/\</\&lt\;/g;   $title = &LONCAPA::map::qtunescape($title);
  $title=~s/\>/\&gt\;/g;  
  $title=~s/\:/\&colon;/g;  
  my $ext='false';   my $ext='false';
  if ($url=~/^http\:\/\//) { $ext='true'; }   if ($url=~/^http\:\/\//) { $ext='true'; }
  $url=~s/\:/\&colon;/g;   $url   = &LONCAPA::map::qtunescape($url);
 # Now insert the URL at the bottom  # Now insert the URL at the bottom
                 my $newidx=&LONCAPA::map::getresidx($url);                  my $newidx=&LONCAPA::map::getresidx($url);
  $LONCAPA::map::resources[$newidx]=   $LONCAPA::map::resources[$newidx]=
Line 1364  sub editor { Line 1413  sub editor {
                     my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];                      my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
                     my ($rtitle,@rrest)=split(/\:/,                      my ($rtitle,@rrest)=split(/\:/,
                        $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);                         $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
                     my $comment=                      my $comment=$env{'form.title'};
                      &HTML::Entities::decode($env{'form.title'});                      $comment = &LONCAPA::map::qtunescape($comment);
                     $comment=~s/\</\&lt\;/g;  
                     $comment=~s/\>/\&gt\;/g;  
                     $comment=~s/\:/\&colon;/g;  
     if ($comment=~/\S/) {      if ($comment=~/\S/) {
  $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=   $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
     $comment.':'.join(':',@rrest);      $comment.':'.join(':',@rrest);
     }      }
 # Devalidate title cache  # Devalidate title cache
                     my $renamed_url=$rrest[0];                      my $renamed_url=&LONCAPA::map::qtescape($rrest[0]);
 # Has the &colon;-escaping  
                     $renamed_url=~s/\&colon\;/\:/g;  
     &Apache::lonnet::devalidate_title_cache($renamed_url);      &Apache::lonnet::devalidate_title_cache($renamed_url);
                 }                  }
 # Store the changed version  # Store the changed version
Line 1428  sub editor { Line 1472  sub editor {
                }                 }
            }             }
            &log_differences($plain);             &log_differences($plain);
        }   }
 # ---------------------------------------------------------------- End commands  # ---------------------------------------------------------------- End commands
 # ---------------------------------------------------------------- Print screen  # ---------------------------------------------------------------- Print screen
         my $idx=0;          my $idx=0;
Line 1444  sub editor { Line 1488  sub editor {
            $r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>');             $r->print('<p>'.&mt('Caution: this folder is set to randomly pick a subset of resources. Adding or removing resources from this folder will change the set of resources that the students see, resulting in spurious or missing credit for completed problems, not limited to ones you modify. Do not modify the contents of this folder if it is in active student use.').'</p>');
         }          }
         $r->print('<table>');          $r->print('<table>');
         foreach (@LONCAPA::map::order) {          foreach my $res (@LONCAPA::map::order) {
            my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$_]);             my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
    $name=&LONCAPA::map::qtescape($name);     $name=&LONCAPA::map::qtescape($name);
    $url=&LONCAPA::map::qtescape($url);     $url=&LONCAPA::map::qtescape($url);
            unless ($name) {  $name=(split(/\//,$url))[-1]; }             unless ($name) {  $name=(split(/\//,$url))[-1]; }
            unless ($name) { $idx++; next; }             unless ($name) { $idx++; next; }
            $r->print(&entryline($idx,$name,$url,$folder,$allowed,$_,$coursenum));             $r->print(&entryline($idx,$name,$url,$folder,$allowed,$res,
    $coursenum));
            $idx++;             $idx++;
    $shown++;     $shown++;
         }          }
Line 1458  sub editor { Line 1503  sub editor {
     $r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>');      $r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>');
  }   }
         $r->print("\n</table>\n");          $r->print("\n</table>\n");
  if ($env{'form.markedcopy_url'}) {  
     $r->print(<<ENDPASTE);   &print_paste_buffer($r,$container);
 <p><form name="pasteform" action="/adm/coursedocs" method="post">  
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />  
 <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />  
 ENDPASTE  
             $r->print(  
    '<input type="submit" name="pastemarked" value="'.&mt('Paste').  
       '" /> '.&Apache::loncommon::filedescription(  
  (split(/\./,$env{'form.markedcopy_url'}))[-1]).': '.  
       $env{'form.markedcopy_title'});  
             if ($container eq 'page') {  
  $r->print(<<PAGEINFO);  
 <input type="hidden" name="pagepath" value="$env{'form.pagepath'}" />  
 <input type="hidden" name="pagesymb" value="$env{'form.pagesymb'}" />  
 PAGEINFO  
             } else {  
  $r->print(<<FOLDERINFO);  
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  
 FOLDERINFO  
     }  
     $r->print('</form></p>');  
  }  
     }      }
 }  }
   
Line 1530  sub process_file_upload { Line 1555  sub process_file_upload {
  $codebase);   $codebase);
         my $ext='false';          my $ext='false';
         if ($url=~/^http\:\/\//) { $ext='true'; }          if ($url=~/^http\:\/\//) { $ext='true'; }
         $url=~s/\:/\&colon;/g;   $url     = &LONCAPA::map::qtunescape($url);
         my $comment=$env{'form.comment'};          my $comment=$env{'form.comment'};
         $comment=~s/\</\&lt\;/g;   $comment = &LONCAPA::map::qtunescape($comment);
         $comment=~s/\>/\&gt\;/g;  
         $comment=~s/\:/\&colon;/g;  
         if ($folder=~/^supplemental/) {          if ($folder=~/^supplemental/) {
               $comment=time.'___&&&___'.$env{'user.name'}.'___&&&___'.                $comment=time.'___&&&___'.$env{'user.name'}.'___&&&___'.
                   $env{'user.domain'}.'___&&&___'.$comment;                    $env{'user.domain'}.'___&&&___'.$comment;
Line 1553  sub process_file_upload { Line 1576  sub process_file_upload {
                 my $total_embedded = keys(%{$allfiles});                  my $total_embedded = keys(%{$allfiles});
                 if ($total_embedded > 0) {                  if ($total_embedded > 0) {
                     my $num = 0;                      my $num = 0;
                     $$upload_output .= 'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />      my $state = '
    <form name="upload_embedded" action="/adm/coursedocs"     <input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" />
                   method="post" enctype="multipart/form-data">     <input type="hidden" name="cmd" value="upload_embedded" />
    <input type="hidden" name="folderpath" value="'.$env{'form.folderpath'}.'" />   <input type="hidden" name="cmd" value="upload_embedded" />  
    <input type="hidden" name="newidx" value="'.$newidx.'" />     <input type="hidden" name="newidx" value="'.$newidx.'" />
    <input type="hidden" name="primaryurl" value="'.&escape($url).'" />     <input type="hidden" name="primaryurl" value="'.&escape($url).'" />
    <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';     <input type="hidden" name="phasetwo" value="'.$total_embedded.'" />';
                     $$upload_output .= '<b>Upload embedded files</b>:<br />      $phase_status = 'phasetwo';
    <table>';  
                     foreach my $embed_file (keys(%{$allfiles})) {                      $$upload_output .= 
                         $$upload_output .= '<tr><td>'.$embed_file.   'This file contains embedded multimedia objects, which need to be uploaded to LON-CAPA.<br />'.
           '<input name="embedded_item_'.$num.'" type="file" />   &ask_for_embedded_content('/adm/coursedocs',
            <input name="embedded_orig_'.$num.'" type="hidden" value="'.&escape($embed_file).'" />';    $state,$allfiles,$codebase);
                         my $attrib;  
                         if (@{$$allfiles{$embed_file}} > 1) {  
                             $attrib = join(':',@{$$allfiles{$embed_file}});  
                         } else {  
                             $attrib = $$allfiles{$embed_file}[0];  
                         }  
                         $$upload_output .=  
            '<input name="embedded_attrib_'.$num.'" type="hidden" value="'.$attrib.'" />';  
                         if (exists($$codebase{$embed_file})) {  
                             $$upload_output .=   
           '<input name="codebase_'.$num.'" type="hidden" value="'.&escape($$codebase{$embed_file}).'" />';  
                         }  
                         $$upload_output .= '</td></tr>';  
                         $num ++;  
                     }  
                     $phase_status = 'phasetwo';  
                     $$upload_output .= '</table><br />  
    <input type ="submit" value="Complete upload" />  
    </form>';  
                 } else {                  } else {
                     $$upload_output .= 'No embedded items identified<br />';                      $$upload_output .= 'No embedded items identified<br />';
                 }                  }
Line 1594  sub process_file_upload { Line 1597  sub process_file_upload {
     return $phase_status;      return $phase_status;
 }  }
   
   sub ask_for_embedded_content {
       my ($actionurl,$state,$allfiles,$codebase,$args)=@_;
       my $upload_output = '
      <form name="upload_embedded" action="'.$actionurl.'"
                     method="post" enctype="multipart/form-data">';
       $upload_output .= $state;
       $upload_output .= '<b>Upload embedded files</b>:<br />'.
    &Apache::loncommon::start_data_table();
   
       my $num = 0;
       foreach my $embed_file (sort {lc($a) cmp lc($b)} keys(%{$allfiles})) {
    $upload_output .= &Apache::loncommon::start_data_table_row().
       '<td>'.$embed_file.'</td><td>';
    if ($args->{'ignore_remote_references'}
       && $embed_file =~ m{^\w+://}) {
       $upload_output.='<span class="LC_warning">'.&mt("URL points to other server.").'</span>';
    } elsif ($args->{'error_on_invalid_names'}
       && $embed_file ne &Apache::lonnet::clean_filename($embed_file,{'keep_path' => 1,})) {
       
       $upload_output.='<span class="LC_warning">'.&mt("Invalid characters").'</span>';
       
    } else {
   
       $upload_output .='
              <input name="embedded_item_'.$num.'" type="file" value="bob" />
              <input name="embedded_orig_'.$num.'" type="hidden" value="'.&escape($embed_file).'" />';
       my $attrib = join(':',@{$$allfiles{$embed_file}});
       $upload_output .=
    "\n\t\t".
    '<input name="embedded_attrib_'.$num.'" type="hidden" value="'.
    $attrib.'" />';
       if (exists($$codebase{$embed_file})) {
    $upload_output .= 
       "\n\t\t".
       '<input name="codebase_'.$num.'" type="hidden" value="'.
       &escape($$codebase{$embed_file}).'" />';
       }
    }
    $upload_output .= '</td>'.&Apache::loncommon::end_data_table_row();
    $num++;
       }
       $upload_output .= &Apache::loncommon::end_data_table().'<br />
      <input type ="hidden" name="number_embedded_items" value="'.$num.'" />
      <input type ="submit" value="'.&mt('Upload Listed Files').'" />
      '.&mt('(only files for which a location has been provided will be uploaded)').'
      </form>';
       return $upload_output;
   }
   
 sub process_secondary_uploads {  sub process_secondary_uploads {
     my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_;      my ($upload_output,$coursedom,$coursenum,$formname,$num,$newidx) = @_;
     my $folder=$env{'form.folder'};      my $folder=$env{'form.folder'};
Line 1609  sub process_secondary_uploads { Line 1661  sub process_secondary_uploads {
     $destination .= $newidx;      $destination .= $newidx;
     my ($url,$filename);      my ($url,$filename);
     $url=&Apache::lonnet::userfileupload($formname.$num,1,$destination);      $url=&Apache::lonnet::userfileupload($formname.$num,1,$destination);
     ($filename) = ($url =~ m-^/uploaded/$coursedom/$coursenum/$destination/(.+)$-);      ($filename) = ($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/\Q$destination\E/(.+)$});
     return $filename;      return $filename;
 }  }
   
   sub is_supplemental_title {
       my ($title) = @_;
       return scalar($title =~ m/^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/);
   }
   
   sub parse_supplemental_title {
       my ($title) = @_;
   
       my ($foldertitle,$renametitle);
       if ($title =~ /&amp;&amp;&amp;/) {
    $title = &HTML::Entites::decode($title);
       }
    if ($title =~ m/^(\d+)___&&&___($match_username)___&&&___($match_domain)___&&&___(.*)$/) {
    $renametitle=$4;
    my ($time,$uname,$udom) = ($1,$2,$3);
    $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
    my $name =  &Apache::loncommon::plainname($uname,$udom);
    $name = &HTML::Entities::encode($name,'"<>&\'');
    $title='<i>'.&Apache::lonlocal::locallocaltime($time).'</i> '.
       $name.': <br />'.$foldertitle;
       }
       if (wantarray) {
    return ($title,$foldertitle,$renametitle);
       } 
       return $title;
   }
   
 # --------------------------------------------------------------- An entry line  # --------------------------------------------------------------- An entry line
   
 sub entryline {  sub entryline {
     my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;      my ($index,$title,$url,$folder,$allowed,$residx,$coursenum)=@_;
     $title=~s/\&colon\;/\:/g;  
     $title=&HTML::Entities::encode(&HTML::Entities::decode(      my ($foldertitle,$pagetitle,$renametitle);
      &unescape($title)),'"<>&\'');      if (&is_supplemental_title($title)) {
     my $renametitle=$title;   ($title,$foldertitle,$renametitle) = &parse_supplemental_title($title);
     my $foldertitle=$title;   $pagetitle = $foldertitle;
     my $pagetitle=$title;      } else {
     my $orderidx=$LONCAPA::map::order[$index];   $title=&HTML::Entities::encode($title,'"<>&\'');
     if ($title=~ /^(\d+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(.*)$/ ) {    $renametitle=$title;
  $foldertitle=&Apache::lontexconvert::msgtexconverted($4);   $foldertitle=$title;
  $renametitle=$4;   $pagetitle=$title;
  $title='<i>'.&Apache::lonlocal::locallocaltime($1).'</i> '.  
     &Apache::loncommon::plainname($2,$3).': <br />'.  
     $foldertitle;  
     }      }
   
       my $orderidx=$LONCAPA::map::order[$index];
       
   
     $renametitle=~s/\\/\\\\/g;      $renametitle=~s/\\/\\\\/g;
     $renametitle=~s/\&quot\;/\\\"/g;      $renametitle=~s/\&quot\;/\\\"/g;
     my $line='<tr>';      my $line='<tr>';
 # Edit commands  # Edit commands
     my $container;      my $container;
     my $folderpath;      my ($container, $type, $esc_path, $path, $symb);
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
    $type = 'folder';
         $container = 'sequence';          $container = 'sequence';
  $folderpath=&escape($env{'form.folderpath'});   $esc_path=&escape($path = $env{'form.folderpath'});
  # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"');   # $htmlfoldername=&HTML::Entities::encode($env{'form.foldername'},'<>&"');
     }      }
     my ($pagepath,$pagesymb);  
     if ($env{'form.pagepath'}) {      if ($env{'form.pagepath'}) {
         $container = 'page';          $type = $container = 'page';
         $pagepath=&escape($env{'form.pagepath'});          $esc_path=&escape($path = $env{'form.pagepath'});
         $pagesymb=&escape($env{'form.pagesymb'});          $symb=&escape($env{'form.pagesymb'});
     }      }
     my $cpinfo='';      my $cpinfo='';
     if ($env{'form.markedcopy_url'}) {  
        $cpinfo='&markedcopy_url='.  
                &escape($env{'form.markedcopy_url'}).  
                '&markedcopy_title='.  
                &escape($env{'form.markedcopy_title'});  
     }  
     if ($allowed) {      if ($allowed) {
  my $incindex=$index+1;   my $incindex=$index+1;
  my $selectbox='';   my $selectbox='';
Line 1686  sub entryline { Line 1760  sub entryline {
  'rn' => 'Rename',   'rn' => 'Rename',
  'cp' => 'Copy');   'cp' => 'Copy');
  my $nocopy=0;   my $nocopy=0;
           my $nocut=0;
         if ($url=~/\.(page|sequence)$/) {          if ($url=~/\.(page|sequence)$/) {
     foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url))) {      foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url))) {
  my ($title,$url,$ext,$type)=split(/\:/,$_);   my ($title,$url,$ext,$type)=split(/\:/,$_);
Line 1695  sub entryline { Line 1770  sub entryline {
  }   }
     }      }
  }   }
           if ($url=~/^\/res\/lib\/templates\//) { 
              $nocopy=1; 
              $nocut=1;
           }
         my $copylink='&nbsp;';          my $copylink='&nbsp;';
         if ($env{'form.pagepath'}) {          my $cutlink='&nbsp;';
            unless ($nocopy) {  
                $copylink=(<<ENDCOPY);   if (!$nocopy) {
 <a href='javascript:markcopy("$pagepath","$index","$renametitle","page","$pagesymb");'>      $copylink=(<<ENDCOPY);
 <font size="-2" color="#000099">$lt{'cp'}</font></a></td>  <a href='javascript:markcopy("$esc_path","$index","$renametitle","$container","$symb","$folder");'>
 ENDCOPY  <font size="-2" color="#000099">$lt{'cp'}</font></a>
             }  
             $line.=(<<END);  
 <form name="entry_$index" action="/adm/coursedocs" method="post">  
 <input type="hidden" name="pagepath" value="$env{'form.pagepath'}" />  
 <input type="hidden" name="pagesymb" value="$env{'form.pagesymb'}" />  
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />  
 <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />  
 <input type="hidden" name="setparms" value="$orderidx" />  
 <input type="hidden" name="changeparms" value="0" />  
 <td><table border='0' cellspacing='2' cellpadding='0'>  
 <tr><td bgcolor="#DDDDDD">  
 <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'>  
 <img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr>  
 <tr><td bgcolor="#DDDDDD">  
 <a href='/adm/coursedocs?cmd=down_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'>  
 <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr>  
 </table></td>  
 <td>$selectbox  
 </td><td bgcolor="#DDDDDD">  
 <a href='javascript:removeres("$pagepath","$index","$renametitle","page","$pagesymb");'>  
 <font size="-2" color="#990000">$lt{'rm'}</font></a>  
 <a href='javascript:cutres("$pagepath","$index","$renametitle","page","$pagesymb");'>  
 <font size="-2" color="#550044">$lt{'ct'}</font></a>  
 <a href='javascript:changename("$pagepath","$index","$renametitle","page","$pagesymb");'>  
 <font size="-2" color="#009900">$lt{'rn'}</font></a>  
 $copylink  
 END  
         } else {  
            unless ($nocopy) {  
                $copylink=(<<ENDCOPY);  
 <a href='javascript:markcopy("$folderpath","$index","$renametitle","sequence");'>  
 <font size="-2" color="#000099">$lt{'cp'}</font></a></td>  
 ENDCOPY  ENDCOPY
             }          }
             $line.=(<<END);    if (!$nocut) {
 <form name="entry_$index" action="/adm/coursedocs" method="post">      $cutlink=(<<ENDCUT);
 <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  <a href='javascript:cutres("$esc_path","$index","$renametitle","$container","$symb","$folder");'>
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />  
 <input type="hidden" name="markedcopy_title" value="$env{'form.markedcopy_title'}" />  
 <input type="hidden" name="setparms" value="$orderidx" />  
 <input type="hidden" name="changeparms" value="0" />  
 <td><table border='0' cellspacing='2' cellpadding='0'>  
 <tr><td bgcolor="#DDDDDD">  
 <a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'>  
 <img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a></td></tr>  
 <tr><td bgcolor="#DDDDDD">  
 <a href='/adm/coursedocs?cmd=down_$index&folderpath=$folderpath$cpinfo'>  
 <img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a></td></tr>  
 </table></td>  
 <td>$selectbox  
 </td><td bgcolor="#DDDDDD">  
 <a href='javascript:removeres("$folderpath","$index","$renametitle","sequence");'>  
 <font size="-2" color="#990000">$lt{'rm'}</font></a>  
 <a href='javascript:cutres("$folderpath","$index","$renametitle","sequence");'>  
 <font size="-2" color="#550044">$lt{'ct'}</font></a>  <font size="-2" color="#550044">$lt{'ct'}</font></a>
 <a href='javascript:changename("$folderpath","$index","$renametitle","sequence");'>  ENDCUT
 <font size="-2" color="#009900">$lt{'rn'}</font></a>          }
    $line.=(<<END);
      <form name="entry_$index" action="/adm/coursedocs" method="post">
      <input type="hidden" name="${type}path" value="$path" />
      <input type="hidden" name="${type}symb" value="$symb" />
      <input type="hidden" name="setparms" value="$orderidx" />
      <input type="hidden" name="changeparms" value="0" />
   <td>
      <table border='0' cellspacing='2' cellpadding='0'>
         <tr>
            <td bgcolor="#DDDDDD">
               <a href='/adm/coursedocs?cmd=up_$index&${type}path=$esc_path&${type}symb=$symb$cpinfo'><img src="${iconpath}move_up.gif" alt='$lt{'up'}' border='0' /></a>
            </td>
         </tr>
         <tr>
           <td bgcolor="#DDDDDD">
              <a href='/adm/coursedocs?cmd=down_$index&${type}path=$esc_path&${type}symb=$symb$cpinfo'><img src="${iconpath}move_down.gif" alt='$lt{'dw'}' border='0' /></a>
           </td>
         </tr>
       </table>
   </td>
   <td>
      $selectbox
   </td>
   <td bgcolor="#DDDDDD">
      <a href='javascript:removeres("$esc_path","$index","$renametitle","$container","$symb");'><font size="-2" color="#990000">$lt{'rm'}</font></a>
   $cutlink
      <a href='javascript:changename("$esc_path","$index","$renametitle","$container","$symb");'><font size="-2" color="#009900">$lt{'rn'}</font></a>
 $copylink  $copylink
   </td>
 END  END
         }  
     }      }
 # Figure out what kind of a resource this is  # Figure out what kind of a resource this is
     my ($extension)=($url=~/\.(\w+)$/);      my ($extension)=($url=~/\.(\w+)$/);
Line 1775  END Line 1833  END
     if ($uploaded) {      if ($uploaded) {
  if ($extension eq 'sequence') {   if ($extension eq 'sequence') {
     $icon=$iconpath.'/folder_closed.gif';      $icon=$iconpath.'/folder_closed.gif';
     $url=~/$coursenum\/([\/\w]+)\.sequence$/;      $url=~/\Q$coursenum\E\/([\/\w]+)\.sequence$/;
     $url='/adm/coursedocs?';      $url='/adm/coursedocs?';
     $folderarg=$1;      $folderarg=$1;
     $isfolder=1;      $isfolder=1;
         } elsif ($extension eq 'page') {          } elsif ($extension eq 'page') {
             $icon=$iconpath.'/page.gif';              $icon=$iconpath.'/page.gif';
             $url=~/$coursenum\/([\/\w]+)\.page$/;              $url=~/\Q$coursenum\E\/([\/\w]+)\.page$/;
             $pagearg=$1;              $pagearg=$1;
             $url='/adm/coursedocs?';              $url='/adm/coursedocs?';
             $ispage=1;              $ispage=1;
Line 1844  END Line 1902  END
     (&LONCAPA::map::getparameter($orderidx,      (&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0].                                                'parameter_randompick'))[0].
                                               '" />'.                                                '" />'.
 '<font size="-2"><a href="javascript:void(0)">'.&mt('Store').'</a></font></label>';  '<font size="-2"><a href="javascript:void(0)">'.&mt('Save').'</a></font></label>';
                 
     }      }
     if ($ispage) {      if ($ispage) {
Line 2103  sub checkversions { Line 2161  sub checkversions {
         if (&Apache::lonnet::put('resourceversions',\%newsetversions,          if (&Apache::lonnet::put('resourceversions',\%newsetversions,
   $env{'course.'.$env{'request.course.id'}.'.domain'},    $env{'course.'.$env{'request.course.id'}.'.domain'},
   $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') {    $env{'course.'.$env{'request.course.id'}.'.num'}) eq 'ok') {
     $r->print('<h1>'.&mt('Your Version Settings have been Stored').'</h1>');      $r->print('<h1>'.&mt('Your Version Settings have been Saved').'</h1>');
  } else {   } else {
     $r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Store your Version Settings').'</font></h1>');      $r->print('<h1><font color="red">'.&mt('An Error Occured while Attempting to Save your Version Settings').'</font></h1>');
  }   }
  &mark_hash_old();   &mark_hash_old();
     }      }
Line 2422  sub handler { Line 2480  sub handler {
     my $uploadtag;      my $uploadtag;
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},      &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},
     ['folderpath','pagepath',      ['folderpath','pagepath',
      'pagesymb','markedcopy_url',       'pagesymb']);
      'markedcopy_title']);  
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
  my (@folderpath)=split('&',$env{'form.folderpath'});   my (@folderpath)=split('&',$env{'form.folderpath'});
  $env{'form.foldername'}=&unescape(pop(@folderpath));   $env{'form.foldername'}=&unescape(pop(@folderpath));
Line 2482  sub handler { Line 2539  sub handler {
   my %codebase = ();    my %codebase = ();
   my ($upload_result,$upload_output);    my ($upload_result,$upload_output);
   if ($allowed) {    if ($allowed) {
       if (($env{'form.uploaddoc.filename'}) &&                                               ($env{'form.cmd'}=~/^upload_(\w+)/)) {        if (($env{'form.uploaddoc.filename'}) &&
     ($env{'form.cmd'}=~/^upload_(\w+)/)) {
 # Process file upload - phase one - upload and parse primary file.    # Process file upload - phase one - upload and parse primary file.  
           $upload_result = &process_file_upload(\$upload_output,$coursenum,            $upload_result = &process_file_upload(\$upload_output,$coursenum,
  $coursedom,\%allfiles,   $coursedom,\%allfiles,
Line 2597  sub handler { Line 2655  sub handler {
   );    );
 # -----------------------------------------------------------------------------  # -----------------------------------------------------------------------------
     if ($allowed) {      if ($allowed) {
    &update_paste_buffer($coursenum,$coursedom);
        my $dumpbut=&dumpbutton();         my $dumpbut=&dumpbutton();
        my $exportbut=&exportbutton();         my $exportbut=&exportbutton();
        my %lt=&Apache::lonlocal::texthash(         my %lt=&Apache::lonlocal::texthash(
Line 2624  sub handler { Line 2683  sub handler {
 <input type="hidden" name="title" />  <input type="hidden" name="title" />
 <input type="hidden" name="cmd" />  <input type="hidden" name="cmd" />
 <input type="hidden" name="markcopy" />  <input type="hidden" name="markcopy" />
   <input type="hidden" name="copyfolder" />
 $containertag  $containertag
 </form>  </form>
 <form name="simpleedit" method="post" action="/adm/coursedocs">  <form name="simpleedit" method="post" action="/adm/coursedocs">
Line 3108  function finishpick() { Line 3168  function finishpick() {
 function changename(folderpath,index,oldtitle,container,pagesymb) {  function changename(folderpath,index,oldtitle,container,pagesymb) {
     var title=prompt('New Title',oldtitle);      var title=prompt('New Title',oldtitle);
     if (title) {      if (title) {
    this.document.forms.renameform.markcopy.value=-1;
  this.document.forms.renameform.title.value=title;   this.document.forms.renameform.title.value=title;
  this.document.forms.renameform.cmd.value='rename_'+index;   this.document.forms.renameform.cmd.value='rename_'+index;
         if (container == 'sequence') {          if (container == 'sequence') {
Line 3123  function changename(folderpath,index,old Line 3184  function changename(folderpath,index,old
   
 function removeres(folderpath,index,oldtitle,container,pagesymb) {  function removeres(folderpath,index,oldtitle,container,pagesymb) {
     if (confirm('WARNING: Removing a resource makes associated grades and scores inaccessible!\\nRemove "'+oldtitle+'"?')) {      if (confirm('WARNING: Removing a resource makes associated grades and scores inaccessible!\\nRemove "'+oldtitle+'"?')) {
    this.document.forms.renameform.markcopy.value=-1;
  this.document.forms.renameform.cmd.value='del_'+index;   this.document.forms.renameform.cmd.value='del_'+index;
         if (container == 'sequence') {          if (container == 'sequence') {
             this.document.forms.renameform.folderpath.value=folderpath;              this.document.forms.renameform.folderpath.value=folderpath;
Line 3135  function removeres(folderpath,index,oldt Line 3197  function removeres(folderpath,index,oldt
     }      }
 }  }
   
 function cutres(folderpath,index,oldtitle,container,pagesymb) {  function cutres(folderpath,index,oldtitle,container,pagesymb,folder) {
     if (confirm('WARNING: Cutting a resource makes associated grades and scores inaccessible!\\nGrades remain inaccessible if resource is pasted into another folder.\\nCut "'+oldtitle+'"?')) {      if (confirm('WARNING: Cutting a resource makes associated grades and scores inaccessible!\\nGrades remain inaccessible if resource is pasted into another folder.\\nCut "'+oldtitle+'"?')) {
  this.document.forms.renameform.cmd.value='cut_'+index;   this.document.forms.renameform.cmd.value='cut_'+index;
  this.document.forms.renameform.markcopy.value=index;   this.document.forms.renameform.markcopy.value=index;
    this.document.forms.renameform.copyfolder.value=folder+'.'+container;
         if (container == 'sequence') {          if (container == 'sequence') {
             this.document.forms.renameform.folderpath.value=folderpath;              this.document.forms.renameform.folderpath.value=folderpath;
         }          }
Line 3150  function cutres(folderpath,index,oldtitl Line 3213  function cutres(folderpath,index,oldtitl
     }      }
 }  }
   
 function markcopy(folderpath,index,oldtitle,container,pagesymb) {  function markcopy(folderpath,index,oldtitle,container,pagesymb,folder) {
     this.document.forms.renameform.markcopy.value=index;      this.document.forms.renameform.markcopy.value=index;
       this.document.forms.renameform.copyfolder.value=folder+'.'+container;
     if (container == 'sequence') {      if (container == 'sequence') {
  this.document.forms.renameform.folderpath.value=folderpath;   this.document.forms.renameform.folderpath.value=folderpath;
     }      }

Removed from v.1.260  
changed lines
  Added in v.1.281


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