Diff for /loncom/interface/londocs.pm between versions 1.239 and 1.248

version 1.239, 2006/07/20 01:46:14 version 1.248, 2006/11/12 06:29:33
Line 33  use Apache::Constants qw(:common :http); Line 33  use Apache::Constants qw(:common :http);
 use Apache::imsexport;  use Apache::imsexport;
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon;  use Apache::loncommon;
 use Apache::lonratedt;  use LONCAPA::map();
 use Apache::lonratsrv;  use Apache::lonratedt();
 use Apache::lonxml;  use Apache::lonxml;
 use Apache::loncreatecourse;  use Apache::lonclonecourse;
 use Apache::lonnavmaps;  use Apache::lonnavmaps;
 use HTML::Entities;  use HTML::Entities;
 use GDBM_File;  use GDBM_File;
 use Apache::lonlocal;  use Apache::lonlocal;
 use Cwd;  use Cwd;
 use lib '/home/httpd/lib/perl/';  
 use LONCAPA;  use LONCAPA;
   
 my $iconpath;  my $iconpath;
Line 58  my $hadchanges; Line 57  my $hadchanges;
   
 my %help=();  my %help=();
   
 # Mapread read maps into lonratedt::global arrays   # Mapread read maps into LONCAPA::map:: global arrays 
 # @order and @resources, determines status  # @order and @resources, determines status
 # sets @order - pointer to resources in right order  # sets @order - pointer to resources in right order
 # sets @resources - array with the resources with correct idx  # sets @resources - array with the resources with correct idx
Line 67  my %help=(); Line 66  my %help=();
 sub mapread {  sub mapread {
     my ($coursenum,$coursedom,$map)=@_;      my ($coursenum,$coursedom,$map)=@_;
     return      return
       &Apache::lonratedt::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.        &LONCAPA::map::mapread('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
                                 $map);       $map);
 }  }
   
 sub storemap {  sub storemap {
     my ($coursenum,$coursedom,$map)=@_;      my ($coursenum,$coursedom,$map)=@_;
     my ($outtext,$errtext)=      my ($outtext,$errtext)=
       &Apache::lonratedt::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.        &LONCAPA::map::storemap('/uploaded/'.$coursedom.'/'.$coursenum.'/'.
                                 $map,1);        $map,1);
     if ($errtext) { return ($errtext,2); }      if ($errtext) { return ($errtext,2); }
           
     $hadchanges=1;      $hadchanges=1;
Line 186  sub dumpcourse { Line 185  sub dumpcourse {
     $r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: ');      $r->print('<br /><tt>'.$_.'</tt> => <tt>'.$newfilename.'</tt>: ');
     if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {      if (my $fh=Apache::File->new('>'.$path.'/'.$newfilename)) {
  if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) {   if ($_=~/\.(sequence|page|html|htm|xml|xhtml)$/) {
     print $fh &Apache::loncreatecourse::rewritefile(      print $fh &Apache::lonclonecourse::rewritefile(
          &Apache::loncreatecourse::readfile($env{'request.course.id'},$_),           &Apache::lonclonecourse::readfile($env{'request.course.id'},$_),
      (%replacehash,$crs => '')       (%replacehash,$crs => '')
     );      );
  } else {   } else {
     print $fh      print $fh
          &Apache::loncreatecourse::readfile($env{'request.course.id'},$_);           &Apache::lonclonecourse::readfile($env{'request.course.id'},$_);
        }         }
  $fh->close();   $fh->close();
     } else {      } else {
Line 230  sub dumpcourse { Line 229  sub dumpcourse {
  $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');   $r->print('<h3>'.&mt('Folder in Construction Space').'</h3><input type="text" size="50" name="authorfolder" value="'.$title.'" /><br />');
  &tiehash();   &tiehash();
  $r->print('<h3>'.&mt('Filenames in Construction Space').'</h3><table border="2"><tr><th>'.&mt('Internal Filename').'</th><th>'.&mt('Title').'</th><th>'.&mt('Save as ...').'</th></tr>');   $r->print('<h3>'.&mt('Filenames in Construction Space').'</h3><table border="2"><tr><th>'.&mt('Internal Filename').'</th><th>'.&mt('Title').'</th><th>'.&mt('Save as ...').'</th></tr>');
  foreach (&Apache::loncreatecourse::crsdirlist($origcrsid,'userfiles')) {   foreach (&Apache::lonclonecourse::crsdirlist($origcrsid,'userfiles')) {
     $r->print('<tr><td>'.$_.'</td>');      $r->print('<tr><td>'.$_.'</td>');
     my ($ext)=($_=~/\.(\w+)$/);      my ($ext)=($_=~/\.(\w+)$/);
     my $title=$hash{'title_'.$hash{      my $title=$hash{'title_'.$hash{
Line 931  sub group_import { Line 930  sub group_import {
             }              }
         }          }
  if ($url) {   if ($url) {
     my $idx = &Apache::lonratedt::getresidx($url);      my $idx = &LONCAPA::map::getresidx($url);
     $Apache::lonratedt::order[$#Apache::lonratedt::order+1]=$idx;      $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
     my $ext = 'false';      my $ext = 'false';
     if ($url=~/^http:\/\//) { $ext = 'true'; }      if ($url=~/^http:\/\//) { $ext = 'true'; }
     $url =~ s/:/\&colon;/g;      $url =~ s/:/\&colon;/g;
     $name =~ s/:/\&colon;/g;      $name =~ s/:/\&colon;/g;
     $Apache::lonratedt::resources[$idx] =       $LONCAPA::map::resources[$idx] = 
  join ':', ($name, $url, $ext, 'normal', 'res');   join ':', ($name, $url, $ext, 'normal', 'res');
  }   }
     }      }
Line 961  sub breadcrumbs { Line 960  sub breadcrumbs {
                '&markedcopy_title='.                 '&markedcopy_title='.
                &escape($env{'form.markedcopy_title'});                 &escape($env{'form.markedcopy_title'});
     }      }
       my $randompick=-1;
       my $isencrypted=0;
       my $ishidden=0;
     while (@folders) {      while (@folders) {
  my $folder=shift(@folders);   my $folder=shift(@folders);
  my $foldername=shift(@folders);   my $foldername=shift(@folders);
Line 968  sub breadcrumbs { Line 970  sub breadcrumbs {
  $folderpath.=$folder.'&'.$foldername;   $folderpath.=$folder.'&'.$foldername;
  my $url='/adm/coursedocs?folderpath='.   my $url='/adm/coursedocs?folderpath='.
     &escape($folderpath);      &escape($folderpath);
               my $name=&unescape($foldername);
   # randompick number, hidden, encrypted is appended with ":"s to the foldername
               $name=~s/\:(\d*)\:(\w*)\:(\w*)$//;
               if ($1 ne '') { 
                  $randompick=$1;
               } else {
                  $randompick=-1;
               }
               if ($2) { $ishidden=1; }
               if ($3) { $isencrypted=1; }
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
       {'href'=>$url.$cpinfo,        {'href'=>$url.$cpinfo,
        'title'=>&unescape($foldername),         'title'=>$name,
        'text'=>'<font size="+1">'.         'text'=>'<font size="+1">'.
    &unescape($foldername).'</font>'     $name.'</font>'
        });         });
          
     
     }      }
     return &Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',      return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
        'LC_docs_path');         'LC_docs_path'),$randompick,$ishidden,$isencrypted);
   }
   
   sub log_docs {
       return &Apache::lonnet::instructor_log('docslog',@_);
   }
   
   {
       my @oldresources=();
       my @oldorder=();
       my $parmidx;
       my %parmaction=();
       my %parmvalue=();
   
       sub snapshotbefore {
           @oldresources=@LONCAPA::map::resources;
           @oldorder=@LONCAPA::map::order;
           $parmidx=undef;
           %parmaction=();
           %parmvalue=();
       }
   
       sub remember_parms {
           my ($idx,$parameter,$action,$value)=@_;
           $parmidx=$idx;
           $parmaction{$parameter}=$action;
           $parmvalue{$parameter}=$value;
       }
   
       sub log_differences {
           my $r=shift;
           my %storehash=('folder' => $env{'form.folder'});
           if ($parmidx) {
              $storehash{'parameter_idx'}=$parmidx;
              $storehash{'parameter_res'}=$oldresources[$parmidx];
              foreach my $parm (keys %parmaction) {
                 $storehash{'parameter_action_'.$parm}=$parmaction{$parm};
                 $storehash{'parameter_value_'.$parm}=$parmvalue{$parm};
              }
           }
           my $maxidx=$#oldresources;
           if ($#LONCAPA::map::resources>$#oldresources) {
              $maxidx=$#LONCAPA::map::resources;
           }
           for (my $idx=0; $idx<=$maxidx; $idx++) {
              if ($LONCAPA::map::resources[$idx] ne $oldresources[$idx]) {
                 $storehash{'before_resources_'.$idx}=$oldresources[$idx];
                 $storehash{'after_resources_'.$idx}=$LONCAPA::map::resources[$idx];
              }
              if ($LONCAPA::map::order[$idx] ne $oldorder[$idx]) {
                 $storehash{'before_order_'.$idx}=$oldorder[$idx];
                 $storehash{'after_order_'.$idx}=$LONCAPA::map::order[$idx];
                 $storehash{'before_order_res_'.$idx}=$oldresources[$idx];
                 $storehash{'after_order_res_'.$idx}=$LONCAPA::map::resources[$idx];
              }
           }
           &log_docs(\%storehash);
       }
   }
   
   
   #
   # Docs Change Log
   #
   sub docs_change_log {
       my ($r)=@_;
       $r->print(&Apache::loncommon::start_page('Course Document Change Log'));
       $r->print(&Apache::lonhtmlcommon::breadcrumbs('Course Document Change Log'));
                                                                                                                               
       my %docslog=&Apache::lonnet::dump('nohist_docslog',
                                         $env{'course.'.$env{'request.course.id'}.'.domain'},
                                         $env{'course.'.$env{'request.course.id'}.'.num'});
                                                                                                                               
       if ((keys(%docslog))[0]=~/^error\:/) { undef(%docslog); }
                                                                                                                               
       $r->print('<form action="/adm/coursedocs" method="post" name="docslog">'.
                 '<input type="hidden" name="docslog" value="1" />');
                                                                                                                               
       my %saveable_parameters = ('show' => 'scalar',);
       &Apache::loncommon::store_course_settings('docs_log',
                                                 \%saveable_parameters);
       &Apache::loncommon::restore_course_settings('docs_log',
                                                   \%saveable_parameters);
       if (!$env{'form.show'}) { $env{'form.show'}=10; }
                                                                                                                               
       my $countselect =
           &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>');
       $r->print(&Apache::loncommon::start_data_table().&Apache::loncommon::start_data_table_header_row().
                 '<th>'.&mt('Time').'</th><th>'.&mt('User').'</th><th>'.&mt('Extent').'</th><th>'.&mt('Users').'</th><th>'.
                 &mt('Parameter').'</th><th>'.&mt('Part').'</th><th>'.&mt('New Value').'</th><th>'.&mt('Announce').'</th>'.
                 &Apache::loncommon::end_data_table_header_row());
       my $shown=0;
       foreach my $id (sort { $docslog{$b}{'exe_time'}<=>$docslog{$a}{'exe_time'} } (keys(%docslog))) {
           my @changes=keys(%{$docslog{$id}{'logentry'}});
           my $count = 0;
           my $time =
               &Apache::lonlocal::locallocaltime($docslog{$id}{'exe_time'});
           my $plainname =
               &Apache::loncommon::plainname($docslog{$id}{'exe_uname'},
                                             $docslog{$id}{'exe_udom'});
           my $about_me_link =
               &Apache::loncommon::aboutmewrapper($plainname,
                                                  $docslog{$id}{'exe_uname'},
                                                  $docslog{$id}{'exe_udom'});
           my $send_msg_link='';
           if ((($docslog{$id}{'exe_uname'} ne $env{'user.name'})
                || ($docslog{$id}{'exe_udom'} ne $env{'user.domain'}))) {
               $send_msg_link ='<br />'.
                   &Apache::loncommon::messagewrapper(&mt('Send message'),
                                                      $docslog{$id}{'exe_uname'},
                                                      $docslog{$id}{'exe_udom'});
           }
           $r->print(&Apache::loncommon::start_data_table_row());
           $r->print('<td>'.$time.'</td>
                          <td>'.$about_me_link.
                     '<br /><tt>'.$docslog{$id}{'exe_uname'}.
                                     ':'.$docslog{$id}{'exe_udom'}.'</tt>'.
                     $send_msg_link.'</td>');
   
           $r->print(&Apache::loncommon::end_data_table_row());
           $shown++;
           if (!($env{'form.show'} eq &mt('all')
                 || $shown<=$env{'form.show'})) { last; }
       }
       $r->print(&Apache::loncommon::end_data_table());
       $r->print(&Apache::loncommon::end_page());
 }  }
   
 sub editor {  sub editor {
Line 991  sub editor { Line 1130  sub editor {
     }      }
     ($errtext,$fatal)=      ($errtext,$fatal)=
               &mapread($coursenum,$coursedom,$folder.'.'.$container);                &mapread($coursenum,$coursedom,$folder.'.'.$container);
     if ($#Apache::lonratedt::order<1) {      if ($#LONCAPA::map::order<1) {
  my $idx=&Apache::lonratedt::getresidx();   my $idx=&LONCAPA::map::getresidx();
  if ($idx<=0) { $idx=1; }   if ($idx<=0) { $idx=1; }
         $Apache::lonratedt::order[0]=$idx;          $LONCAPA::map::order[0]=$idx;
         $Apache::lonratedt::resources[$idx]='';          $LONCAPA::map::resources[$idx]='';
     }      }
     if (defined($env{'form.markcopy'})) {      if (defined($env{'form.markcopy'})) {
 # Mark for copying  # Mark for copying
  my ($title,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$env{'form.markcopy'}]]);   my ($title,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$env{'form.markcopy'}]]);
  $env{'form.markedcopy_title'}=$title;   $env{'form.markedcopy_title'}=$title;
  $env{'form.markedcopy_url'}=$url;   $env{'form.markedcopy_url'}=$url;
     }      }
     $r->print(&breadcrumbs($folder));      my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted)=&breadcrumbs($folder);
       $r->print($breadcrumbtrail);
     if ($fatal) {      if ($fatal) {
    $r->print('<p><font color="red">'.$errtext.'</font></p>');     $r->print('<p><font color="red">'.$errtext.'</font></p>');
     } else {      } else {
Line 1012  sub editor { Line 1152  sub editor {
 # ---------------- if they are for this folder and user allowed to make changes  # ---------------- if they are for this folder and user allowed to make changes
  if (($allowed) && ($env{'form.folder'} eq $folder)) {   if (($allowed) && ($env{'form.folder'} eq $folder)) {
 # set parameters and change order  # set parameters and change order
     if (defined($env{'form.setparms'})) {              &snapshotbefore();
       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.randpick_'.$idx}) {
     &Apache::lonratedt::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');      &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');
                       &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});
  } else {   } else {
     &Apache::lonratedt::delparameter($idx,'parameter_randompick');      &LONCAPA::map::delparameter($idx,'parameter_randompick');
                       &remember_parms($idx,'randompick','del');
  }   }
  if ($env{'form.hidprs_'.$idx}) {   if ($env{'form.hidprs_'.$idx}) {
     &Apache::lonratedt::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');      &LONCAPA::map::storeparameter($idx,'parameter_hiddenresource','yes','string_yesno');
  } else {                      &remember_parms($idx,'hiddenresource','set',$env{'form.hidprs_'.$idx});
     &Apache::lonratedt::delparameter($idx,'parameter_hiddenresource');    } else {
  }      &LONCAPA::map::delparameter($idx,'parameter_hiddenresource');
                       &remember_parms($idx,'hiddenresource','del');
     }
  if ($env{'form.encprs_'.$idx}) {   if ($env{'form.encprs_'.$idx}) {
     &Apache::lonratedt::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');      &LONCAPA::map::storeparameter($idx,'parameter_encrypturl','yes','string_yesno');
  } else {                      &remember_parms($idx,'encrypturl','set',$env{'form.encprs_'.$idx});
     &Apache::lonratedt::delparameter($idx,'parameter_encrypturl');    } else {
  }      &LONCAPA::map::delparameter($idx,'parameter_encrypturl');
                       &remember_parms($idx,'encrypturl','del');
     }
       }
   
  if ($env{'form.newpos'}) {      if ($env{'form.newpos'}) {
 # change order  # change order
    my $newpos=$env{'form.newpos'}-1;
     my $newpos=$env{'form.newpos'}-1;   my $currentpos=$env{'form.currentpos'}-1;
     my $currentpos=$env{'form.currentpos'}-1;   my $i;
     my $i;   my @neworder=();
     my @neworder=();   if ($newpos>$currentpos) {
     if ($newpos>$currentpos) {  
 # moving stuff up  # moving stuff up
  for ($i=0;$i<$currentpos;$i++) {      for ($i=0;$i<$currentpos;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }      }
  for ($i=$currentpos;$i<$newpos;$i++) {      for ($i=$currentpos;$i<$newpos;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i+1];   $neworder[$i]=$LONCAPA::map::order[$i+1];
  }      }
                         $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];      $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
  for ($i=$newpos+1;$i<=$#Apache::lonratedt::order;$i++) {      for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }      }
     } else {   } else {
 # moving stuff down  # moving stuff down
  for ($i=0;$i<$newpos;$i++) {      for ($i=0;$i<$newpos;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }      }
  $neworder[$newpos]=$Apache::lonratedt::order[$currentpos];      $neworder[$newpos]=$LONCAPA::map::order[$currentpos];
  for ($i=$newpos+1;$i<$currentpos+1;$i++) {      for ($i=$newpos+1;$i<$currentpos+1;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i-1];   $neworder[$i]=$LONCAPA::map::order[$i-1];
  }      }
  for ($i=$currentpos+1;$i<=$#Apache::lonratedt::order;$i++) {      for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) {
     $neworder[$i]=$Apache::lonratedt::order[$i];   $neworder[$i]=$LONCAPA::map::order[$i];
  }  
     }      }
     @Apache::lonratedt::order=@neworder;  
  }   }
    @LONCAPA::map::order=@neworder;
 # 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) {
     $r->print('<p><font color="red">'.$errtext.'</font></p>');      $r->print('<p><font color="red">'.$errtext.'</font></p>');
     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{'form.markedcopy_url'};
Line 1086  sub editor { Line 1231  sub editor {
     my $newurl=$1.$newid.'.'.$2;      my $newurl=$1.$newid.'.'.$2;
     my $storefn=$newurl;      my $storefn=$newurl;
                     $storefn=~s/^\/\w+\/\w+\/\w+\///;                      $storefn=~s/^\/\w+\/\w+\/\w+\///;
     &Apache::loncreatecourse::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;
Line 1098  sub editor { Line 1243  sub editor {
  if ($url=~/^http\:\/\//) { $ext='true'; }   if ($url=~/^http\:\/\//) { $ext='true'; }
  $url=~s/\:/\&colon;/g;   $url=~s/\:/\&colon;/g;
 # Now insert the URL at the bottom  # Now insert the URL at the bottom
                 my $newidx=&Apache::lonratedt::getresidx($url);                  my $newidx=&LONCAPA::map::getresidx($url);
  $Apache::lonratedt::resources[$newidx]=   $LONCAPA::map::resources[$newidx]=
     $title.':'.$url.':'.$ext.':normal:res';      $title.':'.$url.':'.$ext.':normal:res';
  $Apache::lonratedt::order[1+$#Apache::lonratedt::order]=$newidx;   $LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx;
 # Store the result  # Store the result
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);   ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
  if ($fatal) {   if ($fatal) {
Line 1114  sub editor { Line 1259  sub editor {
     if ($env{'form.cmd'}) {      if ($env{'form.cmd'}) {
                 my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});                  my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});
                 if ($cmd eq 'del') {                  if ($cmd eq 'del') {
     my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);      my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
     if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&      if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
  ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {   ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
  &Apache::lonnet::removeuploadedurl($url);   &Apache::lonnet::removeuploadedurl($url);
     } else {      } else {
  &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);   &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
     }      }
     for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {      for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
                         $Apache::lonratedt::order[$i]=                          $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
                           $Apache::lonratedt::order[$i+1];  
                     }                      }
                     $#Apache::lonratedt::order--;                      $#LONCAPA::map::order--;
                 } elsif ($cmd eq 'cut') {                  } elsif ($cmd eq 'cut') {
     my (undef,$url)=split(':',$Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]]);      my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
     &Apache::lonratedt::makezombie($Apache::lonratedt::order[$idx]);      &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
     for (my $i=$idx;$i<$#Apache::lonratedt::order;$i++) {      for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {
                         $Apache::lonratedt::order[$i]=                          $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];
                           $Apache::lonratedt::order[$i+1];  
                     }                      }
                     $#Apache::lonratedt::order--;                      $#LONCAPA::map::order--;
                 } elsif ($cmd eq 'up') {                  } elsif ($cmd eq 'up') {
   if (($idx) && (defined($Apache::lonratedt::order[$idx-1]))) {    if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
                     my $i=$Apache::lonratedt::order[$idx-1];                      my $i=$LONCAPA::map::order[$idx-1];
                     $Apache::lonratedt::order[$idx-1]=                      $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx];
  $Apache::lonratedt::order[$idx];                      $LONCAPA::map::order[$idx] = $i;
                     $Apache::lonratedt::order[$idx]=$i;  
    }     }
                 } elsif ($cmd eq 'down') {                  } elsif ($cmd eq 'down') {
    if (defined($Apache::lonratedt::order[$idx+1])) {     if (defined($LONCAPA::map::order[$idx+1])) {
                     my $i=$Apache::lonratedt::order[$idx+1];                      my $i=$LONCAPA::map::order[$idx+1];
                     $Apache::lonratedt::order[$idx+1]=                      $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx];
  $Apache::lonratedt::order[$idx];                      $LONCAPA::map::order[$idx] = $i;
                     $Apache::lonratedt::order[$idx]=$i;  
    }     }
                 } elsif ($cmd eq 'rename') {                  } elsif ($cmd eq 'rename') {
                     my $ratstr = $Apache::lonratedt::resources[$Apache::lonratedt::order[$idx]];                      my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
                     my ($rtitle,@rrest)=split(/\:/,                      my ($rtitle,@rrest)=split(/\:/,
                        $Apache::lonratedt::resources[                         $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);
        $Apache::lonratedt::order[$idx]]);  
                     my $comment=                      my $comment=
                      &HTML::Entities::decode($env{'form.title'});                       &HTML::Entities::decode($env{'form.title'});
                     $comment=~s/\</\&lt\;/g;                      $comment=~s/\</\&lt\;/g;
                     $comment=~s/\>/\&gt\;/g;                      $comment=~s/\>/\&gt\;/g;
                     $comment=~s/\:/\&colon;/g;                      $comment=~s/\:/\&colon;/g;
     if ($comment=~/\S/) {      if ($comment=~/\S/) {
  $Apache::lonratedt::resources[   $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
        $Apache::lonratedt::order[$idx]]=      $comment.':'.join(':',@rrest);
             $comment.':'.join(':',@rrest);  
     }      }
 # Devalidate title cache  # Devalidate title cache
     &Apache::lonnet::devalidate_title_cache(&unescape($rrest[0]));                      my $renamed_url=$rrest[0];
   # Has the &colon;-escaping
                       $renamed_url=~s/\&colon\;/\:/g;
       &Apache::lonnet::devalidate_title_cache($renamed_url);
                 }                  }
 # Store the changed version  # Store the changed version
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,   ($errtext,$fatal)=&storemap($coursenum,$coursedom,
Line 1177  sub editor { Line 1319  sub editor {
 # Group import/search  # Group import/search
     if ($env{'form.importdetail'}) {      if ($env{'form.importdetail'}) {
  my @imports;   my @imports;
  &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'});  # &Apache::lonnet::logthis("imp detail ".$env{'form.importdetail'});
  foreach (split(/\&/,$env{'form.importdetail'})) {   foreach (split(/\&/,$env{'form.importdetail'})) {
     if (defined($_)) {      if (defined($_)) {
  my ($name,$url)=split(/\=/,$_);   my ($name,$url)=split(/\=/,$_);
Line 1199  sub editor { Line 1341  sub editor {
                if ($env{'form.importmap'}=~/\w/) {                 if ($env{'form.importmap'}=~/\w/) {
           foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {            foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
       my ($title,$url,$ext,$type)=split(/\:/,$_);        my ($title,$url,$ext,$type)=split(/\:/,$_);
                       my $idx=&Apache::lonratedt::getresidx($url);                        my $idx=&LONCAPA::map::getresidx($url);
                       $Apache::lonratedt::resources[$idx]=$_;                        $LONCAPA::map::resources[$idx]=$_;
                       $Apache::lonratedt::order                        $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
           [$#Apache::lonratedt::order+1]=$idx;  
           }            }
 # Store the changed version  # Store the changed version
            ($errtext,$fatal)=&storemap($coursenum,$coursedom,             ($errtext,$fatal)=&storemap($coursenum,$coursedom,
Line 1215  sub editor { Line 1356  sub editor {
                    $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>');                     $r->print('<p><font color="red">'.&mt('No map selected.').'</font></p>');
                }                 }
            }             }
              &log_differences($r);
        }         }
 # ---------------------------------------------------------------- End commands  # ---------------------------------------------------------------- End commands
 # ---------------------------------------------------------------- Print screen  # ---------------------------------------------------------------- Print screen
         my $idx=0;          my $idx=0;
  my $shown=0;   my $shown=0;
           if (($ishidden) || ($isencrypted) || ($randompick>=0)) {
              $r->print('<p>'.&mt('Parameters').':<ul>'.
                        ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').
                        ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
                        ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
                        '</ul></p>');
           }                                                                                                     
           if ($randompick>=0) {
              $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 (@Apache::lonratedt::order) {          foreach (@LONCAPA::map::order) {
            my ($name,$url)=split(/\:/,$Apache::lonratedt::resources[$_]);             my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$_]);
    $name=&Apache::lonratsrv::qtescape($name);     $name=&LONCAPA::map::qtescape($name);
    $url=&Apache::lonratsrv::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,$_,$coursenum));
Line 1282  sub process_file_upload { Line 1434  sub process_file_upload {
         }          }
         ($errtext,$fatal)=          ($errtext,$fatal)=
               &mapread($coursenum,$coursedom,$folder.'.'.$container);                &mapread($coursenum,$coursedom,$folder.'.'.$container);
         if ($#Apache::lonratedt::order<1) {          if ($#LONCAPA::map::order<1) {
             $Apache::lonratedt::order[0]=1;              $LONCAPA::map::order[0]=1;
             $Apache::lonratedt::resources[1]='';              $LONCAPA::map::resources[1]='';
         }          }
         if ($fatal) {          if ($fatal) {
             return 'failed';              return 'failed';
Line 1300  sub process_file_upload { Line 1452  sub process_file_upload {
         }          }
 # this is for a course, not a user, so set coursedoc flag  # this is for a course, not a user, so set coursedoc flag
 # probably the only place in the system where this should be "1"  # probably the only place in the system where this should be "1"
         my $newidx=&Apache::lonratedt::getresidx();          my $newidx=&LONCAPA::map::getresidx();
         $destination .= $newidx;          $destination .= $newidx;
         my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,          my $url=&Apache::lonnet::userfileupload('uploaddoc',1,$destination,
  $parseaction,$allfiles,   $parseaction,$allfiles,
Line 1317  sub process_file_upload { Line 1469  sub process_file_upload {
                   $env{'user.domain'}.'___&&&___'.$comment;                    $env{'user.domain'}.'___&&&___'.$comment;
         }          }
   
         $Apache::lonratedt::resources[$newidx]=          $LONCAPA::map::resources[$newidx]=
                   $comment.':'.$url.':'.$ext.':normal:res';      $comment.':'.$url.':'.$ext.':normal:res';
         $Apache::lonratedt::order[$#Apache::lonratedt::order+1]= $newidx;          $LONCAPA::map::order[$#LONCAPA::map::order+1]= $newidx;
         ($errtext,$fatal)=&storemap($coursenum,$coursedom,          ($errtext,$fatal)=&storemap($coursenum,$coursedom,
     $folder.'.'.$container);      $folder.'.'.$container);
         if ($fatal) {          if ($fatal) {
Line 1400  sub entryline { Line 1552  sub entryline {
     my $renametitle=$title;      my $renametitle=$title;
     my $foldertitle=$title;      my $foldertitle=$title;
     my $pagetitle=$title;      my $pagetitle=$title;
     my $orderidx=$Apache::lonratedt::order[$index];      my $orderidx=$LONCAPA::map::order[$index];
     if ($title=~ /^(\d+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(.*)$/ ) {       if ($title=~ /^(\d+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(\w+)___&amp;&amp;&amp;___(.*)$/ ) { 
  $foldertitle=&Apache::lontexconvert::msgtexconverted($4);   $foldertitle=&Apache::lontexconvert::msgtexconverted($4);
  $renametitle=$4;   $renametitle=$4;
Line 1436  sub entryline { Line 1588  sub entryline {
  my $incindex=$index+1;   my $incindex=$index+1;
  my $selectbox='';   my $selectbox='';
  if (($folder!~/^supplemental/) &&   if (($folder!~/^supplemental/) &&
     ($#Apache::lonratedt::order>0) &&       ($#LONCAPA::map::order>0) && 
     ((split(/\:/,      ((split(/\:/,
      $Apache::lonratedt::resources[$Apache::lonratedt::order[0]]))[1]        $LONCAPA::map::resources[$LONCAPA::map::order[0]]))[1] 
      ne '') &&        ne '') && 
     ((split(/\:/,      ((split(/\:/,
      $Apache::lonratedt::resources[$Apache::lonratedt::order[1]]))[1]        $LONCAPA::map::resources[$LONCAPA::map::order[1]]))[1] 
      ne '')) {       ne '')) {
     $selectbox=      $selectbox=
  '<input type="hidden" name="currentpos" value="'.$incindex.'" />'.   '<input type="hidden" name="currentpos" value="'.$incindex.'" />'.
  '<select name="newpos" onChange="this.form.submit()">';   '<select name="newpos" onChange="this.form.submit()">';
     for (my $i=1;$i<=$#Apache::lonratedt::order+1;$i++) {      for (my $i=1;$i<=$#LONCAPA::map::order+1;$i++) {
  if ($i==$incindex) {   if ($i==$incindex) {
     $selectbox.='<option value="" selected="1">('.$i.')</option>';      $selectbox.='<option value="" selected="1">('.$i.')</option>';
  } else {   } else {
Line 1487  ENDCOPY Line 1639  ENDCOPY
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />  <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="markedcopy_title" value="$env{'form.markedcopy_title'}" />
 <input type="hidden" name="setparms" value="$orderidx" />  <input type="hidden" name="setparms" value="$orderidx" />
   <input type="hidden" name="changeparms" value="0" />
 <td><table border='0' cellspacing='2' cellpadding='0'>  <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'>  <a href='/adm/coursedocs?cmd=up_$index&pagepath=$pagepath&pagesymb=$pagesymb$cpinfo'>
Line 1518  ENDCOPY Line 1671  ENDCOPY
 <input type="hidden" name="markedcopy_url" value="$env{'form.markedcopy_url'}" />  <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="markedcopy_title" value="$env{'form.markedcopy_title'}" />
 <input type="hidden" name="setparms" value="$orderidx" />  <input type="hidden" name="setparms" value="$orderidx" />
   <input type="hidden" name="changeparms" value="0" />
 <td><table border='0' cellspacing='2' cellpadding='0'>  <td><table border='0' cellspacing='2' cellpadding='0'>
 <tr><td bgcolor="#DDDDDD">  <tr><td bgcolor="#DDDDDD">
 <a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'>  <a href='/adm/coursedocs?cmd=up_$index&folderpath=$folderpath$cpinfo'>
Line 1588  END Line 1742  END
  } elsif ($url=~m|^/ext/|) {    } elsif ($url=~m|^/ext/|) { 
     $url='/adm/wrapper'.$url;      $url='/adm/wrapper'.$url;
  }   }
  $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);          if (&Apache::lonnet::symbverify($symb,$url)) {
       $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
           } else {
               $url='';
           }
  if ($container eq 'page') {   if ($container eq 'page') {
     my $symb=$env{'form.pagesymb'};      my $symb=$env{'form.pagesymb'};
                   
Line 1601  END Line 1759  END
  my $foldername=&escape($foldertitle);   my $foldername=&escape($foldertitle);
  my $folderpath=$env{'form.folderpath'};   my $folderpath=$env{'form.folderpath'};
  if ($folderpath) { $folderpath.='&' };   if ($folderpath) { $folderpath.='&' };
  $folderpath.=$folderarg.'&'.$foldername;  # Append randompick number, hidden, and encrypted with ":" to foldername, 
   # so it gets transferred between levels
    $folderpath.=$folderarg.'&'.$foldername.':'.(&LONCAPA::map::getparameter($orderidx,
                                                 'parameter_randompick'))[0]
                                                  .':'.((&LONCAPA::map::getparameter($orderidx,
                                                 'parameter_hiddenresource'))[0]=~/^yes$/i)
                                                  .':'.((&LONCAPA::map::getparameter($orderidx,
                                                 '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.submit()" name="randpick_'.$orderidx.'" value="'.      '<input type="text" size="4" onChange="this.form.changeparms.value=1;this.form.submit()" name="randpick_'.$orderidx.'" value="'.
     (&Apache::lonratedt::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('Store').'</a></font></label>';
Line 1631  END Line 1796  END
     }      }
     $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.      $line.='<td bgcolor="#FFFFBB"><a href="'.$url.'"><img src="'.$icon.
  '" border="0"></a></td>'.   '" border="0"></a></td>'.
         "<td bgcolor='#FFFFBB'><a href=\"$url\">$title</a></td>";          "<td bgcolor='#FFFFBB'>".($url?"<a href=\"$url\">":'').$title.
           ($url?'</a>':' <font size="-2">'.&mt('(re-initialize course to access)').'</font>')."</td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
        'hd' => 'Hidden',         'hd' => 'Hidden',
        'ec' => 'URL hidden');         'ec' => 'URL hidden');
  my $enctext=   my $enctext=
     ((&Apache::lonratedt::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');      ((&LONCAPA::map::getparameter($orderidx,'parameter_encrypturl'))[0]=~/^yes$/i?' checked="1"':'');
  my $hidtext=   my $hidtext=
     ((&Apache::lonratedt::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.submit()" $hidtext /> $lt{'hd'}</label></nobr></td>  <nobr><label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value=1;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.submit()" $enctext /> $lt{'ec'}</label></nobr></td>  <nobr><label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value=1;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 2140  sub handler { Line 2306  sub handler {
       &verifycontent($r);        &verifycontent($r);
   } elsif ($allowed && $env{'form.listsymbs'}) {    } elsif ($allowed && $env{'form.listsymbs'}) {
       &list_symbs($r);        &list_symbs($r);
     } elsif ($allowed && $env{'form.docslog'}) {
         &docs_change_log($r);
   } elsif ($allowed && $env{'form.versions'}) {    } elsif ($allowed && $env{'form.versions'}) {
       &checkversions($r);        &checkversions($r);
   } elsif ($allowed && $env{'form.dumpcourse'}) {    } elsif ($allowed && $env{'form.dumpcourse'}) {
Line 2199  sub handler { Line 2367  sub handler {
 # get personal data   # get personal data 
     my $uname=$env{'user.name'};      my $uname=$env{'user.name'};
     my $udom=$env{'user.domain'};      my $udom=$env{'user.domain'};
     my $plainname=&escape(      my $plainname=&escape(&Apache::loncommon::plainname($uname,$udom));
                      &Apache::loncommon::plainname($uname,$udom));  
   
 # graphics settings  # graphics settings
   
Line 2339  sub handler { Line 2506  sub handler {
  'vc' => 'Verify Content',   'vc' => 'Verify Content',
  'cv' => 'Check/Set Resource Versions',   'cv' => 'Check/Set Resource Versions',
  'ls' => 'List Symbs',   'ls' => 'List Symbs',
                                            'sl' => 'Show Log'
   );    );
   
        my $folderpath=$env{'form.folderpath'};         my $folderpath=$env{'form.folderpath'};
Line 2375  $dumpbut Line 2543  $dumpbut
 $exportbut  $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">
       <input type="submit" name="docslog" value="$lt{'sl'}" />
 </td></tr></table>  </td></tr></table>
 </form>  </form>
 ENDCOURSEVERIFY  ENDCOURSEVERIFY

Removed from v.1.239  
changed lines
  Added in v.1.248


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