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

version 1.257, 2006/11/27 21:20:29 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 1028  sub log_docs { Line 1023  sub log_docs {
   
     sub log_differences {      sub log_differences {
         my ($plain)=@_;          my ($plain)=@_;
         my %storehash=('folder' => $plain);          my %storehash=('folder' => $plain,
                          'currentfolder' => $env{'form.folder'});
         if ($parmidx) {          if ($parmidx) {
            $storehash{'parameter_res'}=$oldresources[$parmidx];             $storehash{'parameter_res'}=$oldresources[$parmidx];
            foreach my $parm (keys %parmaction) {             foreach my $parm (keys %parmaction) {
Line 1063  sub log_docs { Line 1059  sub log_docs {
 #  #
 sub docs_change_log {  sub docs_change_log {
     my ($r)=@_;      my ($r)=@_;
       my $folder=$env{'form.folder'};
     $r->print(&Apache::loncommon::start_page('Course Document Change Log'));      $r->print(&Apache::loncommon::start_page('Course Document Change Log'));
     $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Document Change Log'));      $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Document Change Log'));
   
     my %docslog=&Apache::lonnet::dump('nohist_docslog',      my %docslog=&Apache::lonnet::dump('nohist_docslog',
                                       $env{'course.'.$env{'request.course.id'}.'.domain'},                                        $env{'course.'.$env{'request.course.id'}.'.domain'},
                                       $env{'course.'.$env{'request.course.id'}.'.num'});                                        $env{'course.'.$env{'request.course.id'}.'.num'});
Line 1086  sub docs_change_log { Line 1082  sub docs_change_log {
     'randompick'     => 'Randomly pick',      'randompick'     => 'Randomly pick',
     'set'            => 'set to',      'set'            => 'set to',
     'del'            => 'deleted');      'del'            => 'deleted');
       $r->print(&Apache::loncommon::display_filter().
     my $countselect =                '<input type="hidden" name="folder" value="'.$folder.'" />'.
         &Apache::lonmeta::selectbox('show',$env{'form.show'},undef,  
                                     (&mt('all'),10,20,50,100,1000,10000));  
   
     $r->print('<nobr>'.&mt('[_1] Records',$countselect).'</nobr>'.  
               '<input type="submit" value="'.&mt('Display').'" /></form>');                '<input type="submit" value="'.&mt('Display').'" /></form>');
     $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row().      $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row().
               '<th>'.&mt('Time').'</th><th>'.&mt('User').'</th><th>'.&mt('Folder').'</th><th>'.&mt('Before').'</th><th>'.                '<th>'.&mt('Time').'</th><th>'.&mt('User').'</th><th>'.&mt('Folder').'</th><th>'.&mt('Before').'</th><th>'.
Line 1099  sub docs_change_log { Line 1091  sub docs_change_log {
               &Apache::loncommon::end_data_table_header_row());                &Apache::loncommon::end_data_table_header_row());
     my $shown=0;      my $shown=0;
     foreach my $id (sort { $docslog{$b}{'exe_time'}<=>$docslog{$a}{'exe_time'} } (keys(%docslog))) {      foreach my $id (sort { $docslog{$b}{'exe_time'}<=>$docslog{$a}{'exe_time'} } (keys(%docslog))) {
    if ($env{'form.displayfilter'} eq 'currentfolder') {
       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 1215  sub editor { Line 1266  sub editor {
     if ($env{'form.changeparms'}) {      if ($env{'form.changeparms'}) {
  my $idx=$env{'form.setparms'};   my $idx=$env{'form.setparms'};
 # set parameters  # set parameters
  if ($env{'form.randpick_'.$idx}) {   if ($env{'form.changeparms'} eq 'randompick') {
     &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');      if ($env{'form.randpick_'.$idx}) {
                     &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});   &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
  } else {   &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});
     &LONCAPA::map::delparameter($idx,'parameter_randompick');      } else {
                     &remember_parms($idx,'randompick','del');   &LONCAPA::map::delparameter($idx,'parameter_randompick');
    &remember_parms($idx,'randompick','del');
       }
    }
    if ($env{'form.changeparms'} eq 'hiddenresource') {
       if ($env{'form.hidprs_'.$idx}) {
    &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
    &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx});
       } else {
    &LONCAPA::map::delparameter($idx,'parameter_hiddenresource');
    &remember_parms($idx,'hiddenresource','del');
       }
    }
    if ($env{'form.changeparms'} eq 'encrypturl') {
       if ($env{'form.encprs_'.$idx}) {
    &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
    &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx});
       } else {
    &LONCAPA::map::delparameter($idx,'parameter_encrypturl');
    &remember_parms($idx,'encrypturl','del');
       }
  }   }
  if ($env{'form.hidprs_'.$idx}) {  
     &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');  
                     &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx});  
   } else {  
     &LONCAPA::map::delparameter($idx,'parameter_hiddenresource');  
                     &remember_parms($idx,'hiddenresource','del');  
   }  
  if ($env{'form.encprs_'.$idx}) {  
     &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');  
                     &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx});  
   } else {  
     &LONCAPA::map::delparameter($idx,'parameter_encrypturl');  
                     &remember_parms($idx,'encrypturl','del');  
   }  
 # store the changed version  # store the changed version
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);   ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
  if ($fatal) {   if ($fatal) {
Line 1283  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 1295  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 1358  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 1422  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 1438  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 1452  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 1524  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 1547  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 1588  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 1603  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 1680  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 1689  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 1769  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 1834  END Line 1898  END
                                               'parameter_encrypturl'))[0]=~/^yes$/i);                                                'parameter_encrypturl'))[0]=~/^yes$/i);
  $url.='folderpath='.&escape($folderpath).$cpinfo;   $url.='folderpath='.&escape($folderpath).$cpinfo;
  $parameterset='<label>'.&mt('Randomly Pick: ').   $parameterset='<label>'.&mt('Randomly Pick: ').
     '<input type="text" size="4" onChange="this.form.changeparms.value=1;this.form.submit()" name="randpick_'.$orderidx.'" value="'.      '<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randpick_'.$orderidx.'" value="'.
     (&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 1873  END Line 1937  END
     ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');      ((&LONCAPA::map::getparameter($orderidx,'parameter_hiddenresource'))[0]=~/^yes$/i?' checked="1"':'');
  $line.=(<<ENDPARMS);   $line.=(<<ENDPARMS);
 <td bgcolor="#BBBBFF"><font size='-2'>  <td bgcolor="#BBBBFF"><font size='-2'>
 <nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value=1;this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td>  <nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label></nobr></td>
 <td bgcolor="#BBBBFF"><font size='-2'>  <td bgcolor="#BBBBFF"><font size='-2'>
 <nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value=1;this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td>  <nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label></nobr></td>
 <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td>  <td bgcolor="#BBBBFF"><font size="-2">$parameterset</font></td>
 ENDPARMS  ENDPARMS
     }      }
Line 2097  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 2416  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 2476  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 2591  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 2618  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 2635  $exportbut Line 2701  $exportbut
 </td><td bgcolor="#DDDDCC">  </td><td bgcolor="#DDDDCC">
     <input type="submit" name="listsymbs" value="$lt{'ls'}" />      <input type="submit" name="listsymbs" value="$lt{'ls'}" />
 </td><td bgcolor="#DDDDCC">  </td><td bgcolor="#DDDDCC">
       <input type="hidden" name="folder" value="$env{'form.folder'}" />
     <input type="submit" name="docslog" value="$lt{'sl'}" />      <input type="submit" name="docslog" value="$lt{'sl'}" />
 </td></tr></table>  </td></tr></table>
 </form>  </form>
Line 3101  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 3116  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 3128  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 3143  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.257  
changed lines
  Added in v.1.281


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