Diff for /loncom/interface/londocs.pm between versions 1.285 and 1.306

version 1.285, 2007/07/03 23:02:53 version 1.306, 2008/05/22 17:47:33
Line 908  sub group_import { Line 908  sub group_import {
     my ($coursenum, $coursedom, $folder, $container, $caller, @files) = @_;      my ($coursenum, $coursedom, $folder, $container, $caller, @files) = @_;
   
     while (@files) {      while (@files) {
  my $name = shift(@files);   my ($name, $url, $residx) = @{ shift(@files) };
  my $url  = shift(@files);  
  #FIXME check if file exists before overwriting, might be restoring it  
         if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$})           if (($url =~ m{^/uploaded/\Q$coursedom\E/\Q$coursenum\E/(default_\d+\.)(page|sequence)$}) 
      && ($caller eq 'londocs')       && ($caller eq 'londocs')
      && (!&Apache::lonnet::stat_file($url))) {       && (!&Apache::lonnet::stat_file($url))) {
Line 934  sub group_import { Line 932  sub group_import {
             }              }
         }          }
  if ($url) {   if ($url) {
     my $idx = &LONCAPA::map::getresidx($url);      if (!$residx 
     $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;   || defined($LONCAPA::map::zombies[$residx])) {
    $residx = &LONCAPA::map::getresidx($url,$residx);
    push(@LONCAPA::map::order, $residx);
       }
     my $ext = 'false';      my $ext = 'false';
     if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; }      if ($url=~m{^http://} || $url=~m{^https://}) { $ext = 'true'; }
     $url  = &LONCAPA::map::qtunescape($url);      $url  = &LONCAPA::map::qtunescape($url);
     $name = &LONCAPA::map::qtunescape($name);      $name = &LONCAPA::map::qtunescape($name);
     $LONCAPA::map::resources[$idx] =       $LONCAPA::map::resources[$residx] = 
  join ':', ($name, $url, $ext, 'normal', 'res');   join(':', ($name, $url, $ext, 'normal', 'res'));
  }   }
     }      }
     return &storemap($coursenum, $coursedom, $folder.'.'.$container);      return &storemap($coursenum, $coursedom, $folder.'.'.$container);
Line 962  sub breadcrumbs { Line 963  sub breadcrumbs {
     my $randompick=-1;      my $randompick=-1;
     my $isencrypted=0;      my $isencrypted=0;
     my $ishidden=0;      my $ishidden=0;
       my $is_random_order=0;
     while (@folders) {      while (@folders) {
  my $folder=shift(@folders);   my $folder=shift(@folders);
  my $foldername=shift(@folders);   my $foldername=shift(@folders);
Line 969  sub breadcrumbs { Line 971  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);      my $name=&unescape($foldername);
 # randompick number, hidden, encrypted is appended with ":"s to the foldername  # randompick number, hidden, encrypted, random order, is appended with ":"s to the foldername
             $name=~s/\:(\d*)\:(\w*)\:(\w*)$//;       $name=~s/\:(\d*)\:(\w*)\:(\w*):(\d*)$//;
             if ($1 ne '') {       if ($1 ne '') { 
                $randompick=$1;                 $randompick=$1;
             } else {              } else {
                $randompick=-1;                 $randompick=-1;
             }              }
             if ($2) { $ishidden=1; }              if ($2) { $ishidden=1; }
             if ($3) { $isencrypted=1; }              if ($3) { $isencrypted=1; }
       if ($4 ne '') { $is_random_order = 1; }
     &Apache::lonhtmlcommon::add_breadcrumb(      &Apache::lonhtmlcommon::add_breadcrumb(
       {'href'=>$url.$cpinfo,        {'href'=>$url.$cpinfo,
        'title'=>$name,         'title'=>$name,
Line 990  sub breadcrumbs { Line 993  sub breadcrumbs {
     }      }
     $plain=~s/\&gt\;\s*$//;      $plain=~s/\&gt\;\s*$//;
     return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',      return (&Apache::lonhtmlcommon::breadcrumbs(undef,undef,0,'nohelp',
        'LC_docs_path'),$randompick,$ishidden,$isencrypted,$plain);         'LC_docs_path'),$randompick,$ishidden,$isencrypted,$plain,$is_random_order);
 }  }
   
 sub log_docs {  sub log_docs {
Line 1081  sub docs_change_log { Line 1084  sub docs_change_log {
     my %lt=('hiddenresource' => 'Resources hidden',      my %lt=('hiddenresource' => 'Resources hidden',
     'encrypturl'     => 'URL hidden',      'encrypturl'     => 'URL hidden',
     'randompick'     => 'Randomly pick',      'randompick'     => 'Randomly pick',
       'randomorder'    => 'Randomly ordered',
     'set'            => 'set to',      'set'            => 'set to',
     'del'            => 'deleted');      'del'            => 'deleted');
     $r->print(&Apache::loncommon::display_filter().      $r->print(&Apache::loncommon::display_filter().
Line 1163  sub docs_change_log { Line 1167  sub docs_change_log {
  $r->print('</ul>');   $r->print('</ul>');
  if ($docslog{$id}{'logentry'}{'parameter_res'}) {   if ($docslog{$id}{'logentry'}{'parameter_res'}) {
     $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');      $r->print(&LONCAPA::map::qtescape((split(/\:/,$docslog{$id}{'logentry'}{'parameter_res'}))[0]).':<ul>');
     foreach my $parameter ('randompick','hiddenresource','encrypturl') {      foreach my $parameter ('randompick','hiddenresource','encrypturl','randomorder') {
  if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {   if ($docslog{$id}{'logentry'}{'parameter_action_'.$parameter}) {
     $r->print('<li>'.      $r->print('<li>'.
       &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',        &mt($lt{$parameter}.' '.$lt{$docslog{$id}{'logentry'}{'parameter_action_'.$parameter}}.' [_1]',
Line 1199  sub update_paste_buffer { Line 1203  sub update_paste_buffer {
     if (&is_supplemental_title($title)) {      if (&is_supplemental_title($title)) {
  ($title) = &parse_supplemental_title($title);   ($title) = &parse_supplemental_title($title);
     }      }
     &Apache::lonnet::appenv('docs.markedcopy_title' => $title,      $url=~s{http(&colon;|:)//https(&colon;|:)//}{https$2//};
     'docs.markedcopy_url'   => $url);  
       &Apache::lonnet::appenv({'docs.markedcopy_title' => $title,
       'docs.markedcopy_url'   => $url});
     delete($env{'form.markcopy'});      delete($env{'form.markcopy'});
 }  }
   
Line 1209  sub print_paste_buffer { Line 1215  sub print_paste_buffer {
     return if (!defined($env{'docs.markedcopy_url'}));      return if (!defined($env{'docs.markedcopy_url'}));
   
     $r->print(<<ENDPASTE);      $r->print(<<ENDPASTE);
 <p><form name="pasteform" action="/adm/coursedocs" method="post">  <form name="pasteform" action="/adm/coursedocs" method="post"><p>
 ENDPASTE  ENDPASTE
     $r->print('<input type="submit" name="pastemarked" value="'.&mt('Paste').'" /> ');      $r->print('<input type="submit" name="pastemarked" value="'.&mt('Paste').'" /> ');
   
     my $type;      my $type;
     if ($env{'docs.markedcopy_url'} =~ m{^/adm/wrapper/ext}) {      if ($env{'docs.markedcopy_url'} =~ m{^(?:/adm/wrapper/ext|(?:http|https)(?:&colon;|:))//} ) {
  $type = &mt('External Resource');   $type = &mt('External Resource');
  $r->print($type.': '.&Apache::map::qtescape($env{'docs.markedcopy_title'}));   $r->print($type.': '.
     &LONCAPA::map::qtescape($env{'docs.markedcopy_title'}).' ('.
     &LONCAPA::map::qtescape($env{'docs.markedcopy_url'}).')');
     }  else {      }  else {
  my $extension = (split(/\./,$env{'docs.markedcopy_url'}))[-1];   my $extension = (split(/\./,$env{'docs.markedcopy_url'}))[-1];
  my $type = &Apache::loncommon::filedescription($extension);   my $icon = &Apache::loncommon::icon($extension);
  my $icon = '<img src="'.&Apache::loncommon::icon($extension).   if ($extension eq 'sequence' &&
     '" class="LC_icon" />';      $env{'docs.markedcopy_url'} =~ m{/default_\d+\.sequence$ }x) {
  $r->print($icon.$type.': '.  &parse_supplemental_title($env{'docs.markedcopy_title'}));      $icon = &Apache::loncommon::lonhttpdurl($r->dir_config('lonIconsURL'));
       $icon .= '/folder_closed.gif';
    }
    $icon = '<img src="'.$icon.'" alt="" class="LC_icon" />';
    $r->print($icon.$type.': '.  &parse_supplemental_title(&LONCAPA::map::qtescape($env{'docs.markedcopy_title'})));
     }      }
     if ($container eq 'page') {      if ($container eq 'page') {
  $r->print(<<PAGEINFO);   $r->print('
  <input type="hidden" name="pagepath" value="$env{'form.pagepath'}" />   <input type="hidden" name="pagepath" value="'.&HTML::Entities::encode($env{'form.pagepath'},'<>&"').'" />
  <input type="hidden" name="pagesymb" value="$env{'form.pagesymb'}" />   <input type="hidden" name="pagesymb" value="'.&HTML::Entities::encode($env{'form.pagesymb'},'<>&"').'" />
 PAGEINFO  ');
       } else {
    $r->print('
           <input type="hidden" name="folderpath" value="'.&HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />
   ');
       }
       $r->print('</p></form>');
   }
   
   sub do_paste_from_buffer {
       my ($coursenum,$coursedom) = @_;
   
       return 0 if (!$env{'form.pastemarked'});
   
   # paste resource to end of list
       my $url=&LONCAPA::map::qtescape($env{'docs.markedcopy_url'});
       my $title=&LONCAPA::map::qtescape($env{'docs.markedcopy_title'});
   # Maps need to be copied first
       if (($url=~/\.(page|sequence)$/) && ($url=~/^\/uploaded\//)) {
    $title=&mt('Copy of').' '.$title;
    my $newid=$$.time;
    $url=~/^(.+)\.(\w+)$/;
    my $newurl=$1.$newid.'.'.$2;
    my $storefn=$newurl;
    $storefn=~s{^/\w+/$match_domain/$match_username/}{};
    &Apache::lonclonecourse::writefile($env{'request.course.id'},$storefn,
      &Apache::lonnet::getfile($url));
    $url = $newurl;
       }
   # published maps can only exists once, so remove it from paste buffer when done
       if (($url=~/\.(page|sequence)$/) && ($url=~m {^/res/})) {
    &Apache::lonnet::delenv('docs\\.markedcopy');
       }
       if ($url=~ m{/smppg$}) {
    my $db_name = &Apache::lonsimplepage::get_db_name($url);
    if ($db_name =~ /^smppage_/) {
       #simple pages, need to copy the db contents to a new one.
       my %contents=&Apache::lonnet::dump($db_name,$coursedom,$coursenum);
       my $now = time();
       $db_name =~ s{_\d*$ }{_$now}x;
       my $result=&Apache::lonnet::put($db_name,\%contents,
       $coursedom,$coursenum);
       $url =~ s{/(\d*)/smppg$ }{/$now/smppg}x; 
       $title=&mt('Copy of').' '.$title;
    }
       }
       $title = &LONCAPA::map::qtunescape($title);
       my $ext='false';
       if ($url=~m{^http(|s)://}) { $ext='true'; }
       $url       = &LONCAPA::map::qtunescape($url);
   # Now insert the URL at the bottom
       my $newidx = &LONCAPA::map::getresidx($url);
       $LONCAPA::map::resources[$newidx]= $title.':'.$url.':'.$ext.':normal:res';
       push(@LONCAPA::map::order, $newidx);
   # Store the result
   }
   
   my %parameter_type = ( 'randompick'     => 'int_pos',
          'hiddenresource' => 'string_yesno',
          'encrypturl'     => 'string_yesno',
          'randomorder'    => 'string_yesno',);
   my $valid_parameters_re = join('|',keys(%parameter_type));
   # set parameters
   sub update_parameter {
   
       return 0 if ($env{'form.changeparms'} !~ /^($valid_parameters_re)$/);
   
       my $which = $env{'form.changeparms'};
       my $idx = $env{'form.setparms'};
       if ($env{'form.'.$which.'_'.$idx}) {
    my $value = ($which eq 'randompick') ? $env{'form.'.$which.'_'.$idx}
                                        : 'yes';
    &LONCAPA::map::storeparameter($idx, 'parameter_'.$which, $value,
         $parameter_type{$which});
    &remember_parms($idx,$which,'set',$value);
       } else {
    &LONCAPA::map::delparameter($idx,'parameter_'.$which);
   
    &remember_parms($idx,$which,'del');
       }
       return 1;
   }
   
   
   sub handle_edit_cmd {
       my ($coursenum,$coursedom) =@_;
   
       my ($cmd,$idx)=split('_',$env{'form.cmd'});
   
       my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];
       my ($title, $url, @rrest) = split(':', $ratstr);
   
       if ($cmd eq 'del') {
    if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&
       ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {
       &Apache::lonnet::removeuploadedurl($url);
    } else {
       &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
    }
    splice(@LONCAPA::map::order, $idx, 1);
   
       } elsif ($cmd eq 'cut') {
    &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);
    splice(@LONCAPA::map::order, $idx, 1);
   
       } elsif ($cmd eq 'up' 
        && ($idx) && (defined($LONCAPA::map::order[$idx-1]))) {
    @LONCAPA::map::order[$idx-1,$idx] = @LONCAPA::map::order[$idx,$idx-1];
   
       } elsif ($cmd eq 'down'
        && defined($LONCAPA::map::order[$idx+1])) {
    @LONCAPA::map::order[$idx+1,$idx] = @LONCAPA::map::order[$idx,$idx+1];
   
       } elsif ($cmd eq 'rename') {
   
    my $comment = &LONCAPA::map::qtunescape($env{'form.title'});
    if ($comment=~/\S/) {
       $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=
    $comment.':'.join(':', $url, @rrest);
    }
   # Devalidate title cache
    my $renamed_url=&LONCAPA::map::qtescape($url);
    &Apache::lonnet::devalidate_title_cache($renamed_url);
     } else {      } else {
  $r->print(<<FOLDERINFO);   return 0;
         <input type="hidden" name="folderpath" value="$env{'form.folderpath'}" />  
 FOLDERINFO  
     }      }
     $r->print('</form></p>');      return 1;
 }  }
   
 sub editor {  sub editor {
     my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$which)=@_;      my ($r,$coursenum,$coursedom,$folder,$allowed,$upload_output,$which)=@_;
     my $errtext='';  
     my $fatal=0;      my $container= ($env{'form.pagepath'}) ? 'page'
     my $container='sequence';                             : 'sequence';
     if ($env{'form.pagepath'}) {  
         $container='page';      my ($errtext,$fatal) = &mapread($coursenum,$coursedom,
     }      $folder.'.'.$container);
     ($errtext,$fatal) = &mapread($coursenum,$coursedom,$folder.'.'.$container);      return $errtext if ($fatal);
   
     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; }
Line 1253  sub editor { Line 1386  sub editor {
         $LONCAPA::map::resources[$idx]='';          $LONCAPA::map::resources[$idx]='';
     }      }
           
     my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain)=&breadcrumbs($folder);      my ($breadcrumbtrail,$randompick,$ishidden,$isencrypted,$plain,$is_random_order)=
    &breadcrumbs($folder);
     $r->print($breadcrumbtrail);      $r->print($breadcrumbtrail);
     if ($fatal) {      
    $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');  
     } else {  
 # ------------------------------------------------------------ Process commands  # ------------------------------------------------------------ Process commands
   
 # ---------------- 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
             &snapshotbefore();   &snapshotbefore();
     if ($env{'form.changeparms'}) {  
  my $idx=$env{'form.setparms'};  
 # set parameters  
  if ($env{'form.changeparms'} eq 'randompick') {  
     if ($env{'form.randpick_'.$idx}) {  
  &LONCAPA::map::storeparameter($idx,'parameter_randompick',$env{'form.randpick_'.$idx},'int_pos');  
  &remember_parms($idx,'randompick','set',$env{'form.randpick_'.$idx});  
     } else {  
  &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');  
     }  
  }  
 # store the changed version  
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);  
  if ($fatal) {  
     $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');  
     return;  
  }  
     }  
   
     if ($env{'form.newpos'}) {   if (&update_parameter()) {
       ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
       return $errtext if ($fatal);
    }
   
    if ($env{'form.newpos'} && $env{'form.currentpos'}) {
 # change order  # change order
  my $newpos=$env{'form.newpos'}-1;      my $res = splice(@LONCAPA::map::order,$env{'form.currentpos'}-1,1);
  my $currentpos=$env{'form.currentpos'}-1;      splice(@LONCAPA::map::order,$env{'form.newpos'}-1,0,$res);
  my $i;  
  my @neworder=();      ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
  if ($newpos>$currentpos) {      return $errtext if ($fatal);
 # moving stuff up   }
     for ($i=0;$i<$currentpos;$i++) {  
  $neworder[$i]=$LONCAPA::map::order[$i];  
     }  
     for ($i=$currentpos;$i<$newpos;$i++) {  
  $neworder[$i]=$LONCAPA::map::order[$i+1];  
     }  
     $neworder[$newpos]=$LONCAPA::map::order[$currentpos];  
     for ($i=$newpos+1;$i<=$#LONCAPA::map::order;$i++) {  
  $neworder[$i]=$LONCAPA::map::order[$i];  
     }  
  } else {  
 # moving stuff down  
     for ($i=0;$i<$newpos;$i++) {  
  $neworder[$i]=$LONCAPA::map::order[$i];  
     }  
     $neworder[$newpos]=$LONCAPA::map::order[$currentpos];  
     for ($i=$newpos+1;$i<$currentpos+1;$i++) {  
  $neworder[$i]=$LONCAPA::map::order[$i-1];  
     }  
     for ($i=$currentpos+1;$i<=$#LONCAPA::map::order;$i++) {  
  $neworder[$i]=$LONCAPA::map::order[$i];  
     }  
  }  
  @LONCAPA::map::order=@neworder;  
 # store the changed version  
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);  
  if ($fatal) {  
     $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');  
     return;  
  }  
     }  
           
     if ($env{'form.pastemarked'}) {   if ($env{'form.pastemarked'}) {
 # paste resource to end of list      &do_paste_from_buffer($coursenum,$coursedom);
                 my $url=$env{'docs.markedcopy_url'};      ($errtext,$fatal) = &storemap($coursenum,$coursedom,$folder.'.'.$container);
  my $title=$env{'docs.markedcopy_title'};      return $errtext if ($fatal);
 # Maps need to be copied first   }
  if (($url=~/\.(page|sequence)$/) || ($url=~/^\/uploaded\//)) {  
     $title=&mt('Copy of').' '.$title;  
                     my $newid=$$.time;  
     $url=~/^(.+)\.(\w+)$/;  
     my $newurl=$1.$newid.'.'.$2;  
     my $storefn=$newurl;  
                     $storefn=~s{^/\w+/$match_domain/$match_username/}{};  
     &Apache::lonclonecourse::writefile  
  ($env{'request.course.id'},$storefn,  
  &Apache::lonnet::getfile($url));  
     $url=$newurl;  
  }  
  $title = &LONCAPA::map::qtunescape($title);  
  my $ext='false';  
  if ($url=~/^http\:\/\//) { $ext='true'; }  
  $url   = &LONCAPA::map::qtunescape($url);  
 # Now insert the URL at the bottom  
                 my $newidx=&LONCAPA::map::getresidx($url);  
  $LONCAPA::map::resources[$newidx]=  
     $title.':'.$url.':'.$ext.':normal:res';  
  $LONCAPA::map::order[1+$#LONCAPA::map::order]=$newidx;  
 # Store the result  
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);  
  if ($fatal) {  
     $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');  
     return;  
  }  
   
     }   $r->print($upload_output);
             $r->print($upload_output);  
     if ($env{'form.cmd'}) {   if (&handle_edit_cmd()) {
                 my ($cmd,$idx)=split(/\_/,$env{'form.cmd'});      ($errtext,$fatal)=&storemap($coursenum,$coursedom,$folder.'.'.$container);
                 if ($cmd eq 'del') {      return $errtext if ($fatal);
     my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);   }
     if (($url=~m|/+uploaded/\Q$coursedom\E/\Q$coursenum\E/|) &&  
  ($url!~/\.(page|sequence|problem|exam|quiz|assess|survey|form|library|task)$/)) {  
  &Apache::lonnet::removeuploadedurl($url);  
     } else {  
  &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);  
     }  
     for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {  
                         $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];  
                     }  
                     $#LONCAPA::map::order--;  
                 } elsif ($cmd eq 'cut') {  
     my (undef,$url)=split(':',$LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);  
     &LONCAPA::map::makezombie($LONCAPA::map::order[$idx]);  
     for (my $i=$idx;$i<$#LONCAPA::map::order;$i++) {  
                         $LONCAPA::map::order[$i] = $LONCAPA::map::order[$i+1];  
                     }  
                     $#LONCAPA::map::order--;  
                 } elsif ($cmd eq 'up') {  
   if (($idx) && (defined($LONCAPA::map::order[$idx-1]))) {  
                     my $i=$LONCAPA::map::order[$idx-1];  
                     $LONCAPA::map::order[$idx-1] = $LONCAPA::map::order[$idx];  
                     $LONCAPA::map::order[$idx] = $i;  
    }  
                 } elsif ($cmd eq 'down') {  
    if (defined($LONCAPA::map::order[$idx+1])) {  
                     my $i=$LONCAPA::map::order[$idx+1];  
                     $LONCAPA::map::order[$idx+1] = $LONCAPA::map::order[$idx];  
                     $LONCAPA::map::order[$idx] = $i;  
    }  
                 } elsif ($cmd eq 'rename') {  
                     my $ratstr = $LONCAPA::map::resources[$LONCAPA::map::order[$idx]];  
                     my ($rtitle,@rrest)=split(/\:/,  
                        $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]);  
                     my $comment=$env{'form.title'};  
                     $comment = &LONCAPA::map::qtunescape($comment);  
     if ($comment=~/\S/) {  
  $LONCAPA::map::resources[$LONCAPA::map::order[$idx]]=  
     $comment.':'.join(':',@rrest);  
     }  
 # Devalidate title cache  
                     my $renamed_url=&LONCAPA::map::qtescape($rrest[0]);  
     &Apache::lonnet::devalidate_title_cache($renamed_url);  
                 }  
 # Store the changed version  
  ($errtext,$fatal)=&storemap($coursenum,$coursedom,  
     $folder.'.'.$container);  
  if ($fatal) {  
     $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');  
     return;  
  }  
             }  
 # 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'});      foreach (split(/\&/,$env{'form.importdetail'})) {
  foreach (split(/\&/,$env{'form.importdetail'})) {   if (defined($_)) {
     if (defined($_)) {      my ($name,$url,$residx)=
  my ($name,$url)=split(/\=/,$_);   map {&unescape($_)} split(/\=/,$_);
  $name=&unescape($name);      push(@imports, [$name, $url, $residx]);
  $url=&unescape($url);  
  push @imports, $name, $url;  
     }  
  }  
 # Store the changed version  
  ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder,  
        $container,'londocs',@imports);  
  if ($fatal) {  
     $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');  
     return;  
  }   }
             }      }
       ($errtext,$fatal)=&group_import($coursenum, $coursedom, $folder,
       $container,'londocs',@imports);
       return $errtext if ($fatal);
    }
 # Loading a complete map  # Loading a complete map
    if ($env{'form.loadmap'}) {   if ($env{'form.loadmap'}) {
                if ($env{'form.importmap'}=~/\w/) {      if ($env{'form.importmap'}=~/\w/) {
           foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {   foreach my $res (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$env{'form.importmap'}))) {
       my ($title,$url,$ext,$type)=split(/\:/,$_);      my ($title,$url,$ext,$type)=split(/\:/,$res);
                       my $idx=&LONCAPA::map::getresidx($url);      my $idx=&LONCAPA::map::getresidx($url);
                       $LONCAPA::map::resources[$idx]=$_;      $LONCAPA::map::resources[$idx]=$res;
                       $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;      $LONCAPA::map::order[$#LONCAPA::map::order+1]=$idx;
           }   }
 # Store the changed version   ($errtext,$fatal)=&storemap($coursenum,$coursedom,
            ($errtext,$fatal)=&storemap($coursenum,$coursedom,      $folder.'.'.$container);
    $folder.'.'.$container);   return $errtext if ($fatal);
           if ($fatal) {      } else {
       $r->print('<p><span class="LC_error">'.$errtext.'</span></p>');   $r->print('<p><span class="LC_error">'.&mt('No map selected.').'</span></p>');
       return;  
           }      }
                } else {  
     $r->print('<p><span class="LC_error">'.&mt('No map selected.').'</span></p>');  
   
                }  
            }  
            &log_differences($plain);  
  }   }
    &log_differences($plain);
       }
 # ---------------------------------------------------------------- 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)) {      if (($ishidden) || ($isencrypted) || ($randompick>=0) || ($is_random_order)) {
            $r->print('<p>'.&mt('Parameters').':<ul>'.   $r->print('<p>'.&mt('Parameters').':<ul>'.
                      ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').    ($randompick>=0?'<li>'.&mt('randomly pick [_1] resources',$randompick).'</li>':'').
                      ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').    ($ishidden?'<li>'.&mt('contents hidden').'</li>':'').
                      ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').    ($isencrypted?'<li>'.&mt('URLs hidden').'</li>':'').
                      '</ul></p>');    '</ul></p>');
         }                                                                                                           }                                                                                                     
         if ($randompick>=0) {      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('<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 class="LC_docs_editor">');      if ($is_random_order) {
         foreach my $res (@LONCAPA::map::order) {   $r->print('<p>'.&mt('Caution: this folder is set to randomly order its contents. Adding or removing resources from this folder will change the order of resources shown.').'</p>');
            my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);      }
    $name=&LONCAPA::map::qtescape($name);      $r->print('<table class="LC_docs_editor">');
    $url=&LONCAPA::map::qtescape($url);      foreach my $res (@LONCAPA::map::order) {
            unless ($name) {  $name=(split(/\//,$url))[-1]; }   my ($name,$url)=split(/\:/,$LONCAPA::map::resources[$res]);
            unless ($name) { $idx++; next; }   $name=&LONCAPA::map::qtescape($name);
            $r->print(&entryline($idx,$name,$url,$folder,$allowed,$res,   $url=&LONCAPA::map::qtescape($url);
  $coursenum));   unless ($name) {  $name=(split(/\//,$url))[-1]; }
            $idx++;   unless ($name) { $idx++; next; }
    $shown++;   $r->print(&entryline($idx,$name,$url,$folder,$allowed,$res,
         }       $coursenum));
  unless ($shown) {   $idx++;
     $r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>');   $shown++;
  }  
         $r->print("\n</table>\n");  
   
  &print_paste_buffer($r,$container);  
   
     }      }
       unless ($shown) {
    $r->print('<tr><td>'.&mt('Currently no documents.').'</td></tr>');
       }
       $r->print("\n</table>\n");
       
       &print_paste_buffer($r,$container);
       return;
 }  }
   
 sub process_file_upload {  sub process_file_upload {
Line 1556  sub process_file_upload { Line 1539  sub process_file_upload {
  $parseaction,$allfiles,   $parseaction,$allfiles,
  $codebase);   $codebase);
         my $ext='false';          my $ext='false';
         if ($url=~/^http\:\/\//) { $ext='true'; }          if ($url=~m{^http://}) { $ext='true'; }
  $url     = &LONCAPA::map::qtunescape($url);   $url     = &LONCAPA::map::qtunescape($url);
         my $comment=$env{'form.comment'};          my $comment=$env{'form.comment'};
  $comment = &LONCAPA::map::qtunescape($comment);   $comment = &LONCAPA::map::qtunescape($comment);
Line 1715  sub entryline { Line 1698  sub entryline {
   
     $renametitle=~s/\\/\\\\/g;      $renametitle=~s/\\/\\\\/g;
     $renametitle=~s/\&quot\;/\\\"/g;      $renametitle=~s/\&quot\;/\\\"/g;
       $renametitle=~s/ /%20/g;
     my $line='<tr>';      my $line='<tr>';
       my ($form_start,$form_end);
 # Edit commands  # Edit commands
     my $container;  
     my ($container, $type, $esc_path, $path, $symb);      my ($container, $type, $esc_path, $path, $symb);
     if ($env{'form.folderpath'}) {      if ($env{'form.folderpath'}) {
  $type = 'folder';   $type = 'folder';
Line 1766  sub entryline { Line 1750  sub entryline {
  my $nocopy=0;   my $nocopy=0;
         my $nocut=0;          my $nocut=0;
         if ($url=~/\.(page|sequence)$/) {          if ($url=~/\.(page|sequence)$/) {
     foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url))) {      if ($url =~ m{/res/}) {
  my ($title,$url,$ext,$type)=split(/\:/,$_);   # no copy for published maps
  if (($url=~/\.(page|sequence)/) && ($type ne 'zombie')) {   $nocopy = 1;
     $nocopy=1;      } else {
     last;   foreach (&Apache::lonsequence::attemptread(&Apache::lonnet::filelocation('',$url),1)) {
       my ($title,$url,$ext,$type)=split(/\:/,$_);
       if (($url=~/\.(page|sequence)/) && ($type ne 'zombie')) {
    $nocopy=1;
    last;
       }
  }   }
     }      }
  }   }
Line 1781  sub entryline { Line 1770  sub entryline {
         my $copylink='&nbsp;';          my $copylink='&nbsp;';
         my $cutlink='&nbsp;';          my $cutlink='&nbsp;';
   
    my $skip_confirm = 0;
    if ( $folder =~ /^supplemental/
        || ($url =~ m{( /smppg$
       |/syllabus$
       |/aboutme$
       |/navmaps$
       |/bulletinboard$
       |\.html$
       |^/adm/wrapper/ext)}x)) {
       $skip_confirm = 1;
    }
   
  if (!$nocopy) {   if (!$nocopy) {
     $copylink=(<<ENDCOPY);      $copylink=(<<ENDCOPY);
 <a href='javascript:markcopy("$esc_path","$index","$renametitle","$container","$symb","$folder");' class="LC_docs_copy">$lt{'cp'}</a>  <a href='javascript:markcopy("$esc_path","$index","$renametitle","$container","$symb","$folder");' class="LC_docs_copy">$lt{'cp'}</a>
Line 1788  ENDCOPY Line 1789  ENDCOPY
         }          }
  if (!$nocut) {   if (!$nocut) {
     $cutlink=(<<ENDCUT);      $cutlink=(<<ENDCUT);
 <a href='javascript:cutres("$esc_path","$index","$renametitle","$container","$symb","$folder");' class="LC_docs_cut">$lt{'ct'}</a>  <a href='javascript:cutres("$esc_path","$index","$renametitle","$container","$symb","$folder",$skip_confirm);' class="LC_docs_cut">$lt{'ct'}</a>
 ENDCUT  ENDCUT
         }          }
  $line.=(<<END);   $form_start = (<<END);
    <form name="entry_$index" action="/adm/coursedocs" method="post">     <form  action="/adm/coursedocs" method="post">
    <input type="hidden" name="${type}path" value="$path" />     <input type="hidden" name="${type}path" value="$path" />
    <input type="hidden" name="${type}symb" value="$symb" />     <input type="hidden" name="${type}symb" value="$symb" />
    <input type="hidden" name="setparms" value="$orderidx" />     <input type="hidden" name="setparms" value="$orderidx" />
    <input type="hidden" name="changeparms" value="0" />     <input type="hidden" name="changeparms" value="0" />
   END
           $form_end = '</form>';
    $line.=(<<END);
 <td>  <td>
    <table class="LC_docs_entry_move">     <table class="LC_docs_entry_move">
       <tr>        <tr>
Line 1812  ENDCUT Line 1816  ENDCUT
     </table>      </table>
 </td>  </td>
 <td>  <td>
      $form_start
    $selectbox     $selectbox
      $form_end
 </td>  </td>
 <td class="LC_docs_entry_commands">  <td class="LC_docs_entry_commands">
    <a href='javascript:removeres("$esc_path","$index","$renametitle","$container","$symb");' class="LC_docs_remove">$lt{'rm'}</a>     <a href='javascript:removeres("$esc_path","$index","$renametitle","$container","$symb",$skip_confirm);' class="LC_docs_remove">$lt{'rm'}</a>
 $cutlink  $cutlink
    <a href='javascript:changename("$esc_path","$index","$renametitle","$container","$symb");' class="LC_docs_rename">$lt{'rn'}</a>     <a href='javascript:changename("$esc_path","$index","$renametitle","$container","$symb");' class="LC_docs_rename">$lt{'rn'}</a>
 $copylink  $copylink
Line 1849  END Line 1855  END
     &Apache::lonnet::allowuploaded('/adm/coursedoc',$url);      &Apache::lonnet::allowuploaded('/adm/coursedoc',$url);
  }   }
     }      }
     $url=~s-^http(\&colon\;|:)//-/adm/wrapper/ext/-;      
       my $orig_url = $url;
       my $external = ($url=~s{^http(|s)(&colon;|:)//}{/adm/wrapper/ext/});
     if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) {      if ((!$isfolder) && ($residx) && ($folder!~/supplemental/) && (!$ispage)) {
  my $symb=&Apache::lonnet::symbclean(   my $symb=&Apache::lonnet::symbclean(
           &Apache::lonnet::declutter('uploaded/'.            &Apache::lonnet::declutter('uploaded/'.
Line 1872  END Line 1880  END
     }      }
  } elsif ($url=~m|^/ext/|) {    } elsif ($url=~m|^/ext/|) { 
     $url='/adm/wrapper'.$url;      $url='/adm/wrapper'.$url;
       $external = 1;
  }   }
         if (&Apache::lonnet::symbverify($symb,$url)) {          if (&Apache::lonnet::symbverify($symb,$url)) {
     $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);      $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
Line 1885  END Line 1894  END
     $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);      $url.=(($url=~/\?/)?'&':'?').'symb='.&escape($symb);
  }   }
     }      }
     my $parameterset='&nbsp;';      my ($parameterset,$rand_order_text) = ('&nbsp;', '&nbsp;');
     if ($isfolder || $extension eq 'sequence') {      if ($isfolder || $extension eq 'sequence') {
  my $foldername=&escape($foldertitle);   my $foldername=&escape($foldertitle);
  my $folderpath=$env{'form.folderpath'};   my $folderpath=$env{'form.folderpath'};
Line 1897  END Line 1906  END
                                                .':'.((&LONCAPA::map::getparameter($orderidx,                                                 .':'.((&LONCAPA::map::getparameter($orderidx,
                                               'parameter_hiddenresource'))[0]=~/^yes$/i)                                                'parameter_hiddenresource'))[0]=~/^yes$/i)
                                                .':'.((&LONCAPA::map::getparameter($orderidx,                                                 .':'.((&LONCAPA::map::getparameter($orderidx,
                                               'parameter_encrypturl'))[0]=~/^yes$/i);                                                'parameter_encrypturl'))[0]=~/^yes$/i)
                                                  .':'.((&LONCAPA::map::getparameter($orderidx,
                                                 'parameter_randomorder'))[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='."'randompick'".';this.form.submit()" name="randpick_'.$orderidx.'" value="'.      '<input type="text" size="4" onChange="this.form.changeparms.value='."'randompick'".';this.form.submit()" name="randompick_'.$orderidx.'" value="'.
     (&LONCAPA::map::getparameter($orderidx,      (&LONCAPA::map::getparameter($orderidx,
                                               'parameter_randompick'))[0].                                                'parameter_randompick'))[0].
                                               '" />'.                                                '" />'.
 '<a href="javascript:void(0)">'.&mt('Save').'</a></label>';  '<a href="javascript:void(0)">'.&mt('Save').'</a></label>';
              my $ro_set=
       ((&LONCAPA::map::getparameter($orderidx,'parameter_randomorder'))[0]=~/^yes$/i?' checked="checked"':'');
    $rand_order_text ='
   <nobr><label><input type="checkbox" name="randomorder_'.$orderidx.'" onClick="this.form.changeparms.value=\'randomorder\';this.form.submit()" '.$ro_set.' /> '.&mt('Random Order').' </label></nobr>';   
     }      }
     if ($ispage) {      if ($ispage) {
         my $pagename=&escape($pagetitle);          my $pagename=&escape($pagetitle);
Line 1925  END Line 1939  END
  $url.='pagepath='.&escape($pagepath).   $url.='pagepath='.&escape($pagepath).
     '&amp;pagesymb='.&escape($symb).$cpinfo;      '&amp;pagesymb='.&escape($symb).$cpinfo;
     }      }
       if ($external) {
    my $form = ($folder =~ /^default/)? 'newext' : 'supnewext';
    $external = '&nbsp;<a class="LC_docs_ext_edit" href="javascript:edittext(\''.$form.'\',\''.$residx.'\',\''.&escape($title).'\',\''.&escape($orig_url).'\');" >'.&mt('Edit').'</a>';
       } else {
    undef($external);
       }
     $line.='      $line.='
   <td class="LC_docs_entry_icon">    <td class="LC_docs_entry_icon">
     <a href="'.$url.'"><img src="'.$icon.'" class="LC_icon" /></a>      '.($url?'<a href="'.$url.'">':'').'<img src="'.$icon.'" alt="" class="LC_icon" />'.($url?'</a>':'').'
   </td>    </td>
   <td class="LC_docs_entry_title">    <td class="LC_docs_entry_title">
     '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.&mt('(re-initialize course to access)').'</span>')."      '.($url?"<a href=\"$url\">":'').$title.($url?'</a>':' <span class="LC_docs_reinit_warn">'.&mt('(re-initialize course to access)').'</span>').$external."
   </td>";    </td>";
     if (($allowed) && ($folder!~/^supplemental/)) {      if (($allowed) && ($folder!~/^supplemental/)) {
   my %lt=&Apache::lonlocal::texthash(    my %lt=&Apache::lonlocal::texthash(
Line 1942  END Line 1962  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 class="LC_docs_entry_parameter">    <td class="LC_docs_entry_parameter">
     <label><input type="checkbox" name="hidprs_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>      $form_start
       <label><input type="checkbox" name="hiddenresource_$orderidx" onClick="this.form.changeparms.value='hiddenresource';this.form.submit()" $hidtext /> $lt{'hd'}</label>
       $form_end
   </td>    </td>
   <td class="LC_docs_entry_parameter">    <td class="LC_docs_entry_parameter">
     <label><input type="checkbox" name="encprs_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>      $form_start
       <label><input type="checkbox" name="encrypturl_$orderidx" onClick="this.form.changeparms.value='encrypturl';this.form.submit()" $enctext /> $lt{'ec'}</label>
       $form_end
   </td>    </td>
   <td class="LC_docs_entry_parameter">$parameterset</td>    <td class="LC_docs_entry_parameter">$form_start $rand_order_text $form_end</td>
     <td class="LC_docs_entry_parameter">$form_start $parameterset $form_end</td>
 ENDPARMS  ENDPARMS
     }      }
     $line.="</form></tr>";      $line.="</tr>";
     return $line;      return $line;
 }  }
   
Line 2398  sub changewarning { Line 2423  sub changewarning {
  $message='Changes will become active for your current session after [_1], or the next time you log in.';   $message='Changes will become active for your current session after [_1], or the next time you log in.';
     }      }
     $r->print("\n\n".      $r->print("\n\n".
 '<script>function reinit(tf) { tf.submit();'.$postexec.' }</script>'."\n".   '<script type="text/javascript">function reinit(tf) { tf.submit();'.$postexec.' }</script>'."\n". 
 '<form name="reinitform" method="post" action="/adm/roles" target="loncapaclient">'.  '<form name="reinitform" method="post" action="/adm/roles" target="loncapaclient">'.
 '<input type="hidden" name="orgurl" value="'.$url.  '<input type="hidden" name="orgurl" value="'.$url.
 '" /><input type="hidden" name="selectrole" value="1" /><h3><span class="LC_warning">'.  '" /><input type="hidden" name="selectrole" value="1" /><h3><span class="LC_warning">'.
Line 2414  sub init_breadcrumbs { Line 2439  sub init_breadcrumbs {
     my ($form,$text)=@_;      my ($form,$text)=@_;
     &Apache::lonhtmlcommon::clear_breadcrumbs();      &Apache::lonhtmlcommon::clear_breadcrumbs();
     &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs",      &Apache::lonhtmlcommon::add_breadcrumb({href=>"/adm/coursedocs",
     text=>&Apache::loncommon::course_type()." Documents",      text=>"Edit ".&Apache::loncommon::course_type(),
     faq=>273,      faq=>273,
     bug=>'Instructor Interface',      bug=>'Instructor Interface',
                                             help => 'Docs_Adding_Course_Doc'});                                              help => 'Docs_Adding_Course_Doc'});
Line 2549  sub handler { Line 2574  sub handler {
       if (($env{'form.uploaddoc.filename'}) &&        if (($env{'form.uploaddoc.filename'}) &&
   ($env{'form.cmd'}=~/^upload_(\w+)/)) {    ($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.  
     undef($hadchanges);
           $upload_result = &process_file_upload(\$upload_output,$coursenum,            $upload_result = &process_file_upload(\$upload_output,$coursenum,
  $coursedom,\%allfiles,   $coursedom,\%allfiles,
  \%codebase,$1);   \%codebase,$1);
     if ($hadchanges) {
         &mark_hash_old();
     }
           if ($upload_result eq 'phasetwo') {            if ($upload_result eq 'phasetwo') {
               $r->print($upload_output);                $r->print($upload_output);
           }            }
Line 2653  sub handler { Line 2682  sub handler {
                 'bull' => 'Bulletin Board',                  'bull' => 'Bulletin Board',
                 'mypi' => 'My Personal Info',                  'mypi' => 'My Personal Info',
                 'grpo' => 'Group Files',                  'grpo' => 'Group Files',
                   'rost' => 'Course Roster',
  'abou' => 'About User',   'abou' => 'About User',
                 'imsf' => 'Import IMS package',                  'imsf' => 'Import IMS package',
                 'file' =>  'File',                  'file' =>  'File',
Line 2723  ENDCOURSEVERIFY Line 2753  ENDCOURSEVERIFY
      &mt('Editing the Table of Contents for your '.$type)));       &mt('Editing the Table of Contents for your '.$type)));
     }      }
 # --------------------------------------------------------- Standard documents  # --------------------------------------------------------- Standard documents
     $r->print('<table class="LC_docs_documents">');#border=2 cellspacing=4 cellpadding=4>');      $r->print('<table class="LC_docs_documents">');
   
     if (($standard) && ($allowed) && (!$forcesupplement)) {      if (($standard) && ($allowed) && (!$forcesupplement)) {
  $r->print('<tr><td class="LC_docs_document">');   $r->print('<tr><td class="LC_docs_document">');
 #  '<h2>'.&mt('Main Course Documents').  #  '<h2>'.&mt('Main Course Documents').
Line 2732  ENDCOURSEVERIFY Line 2763  ENDCOURSEVERIFY
        if ($folder eq '' || $folder eq 'supplemental') {         if ($folder eq '' || $folder eq 'supplemental') {
            $folder='default';             $folder='default';
    $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));     $env{'form.folderpath'}='default&'.&escape(&mt('Main '.$type.' Documents'));
              $uploadtag = '<input type="hidden" name="folderpath" value="'.
          &HTML::Entities::encode($env{'form.folderpath'},'<>&"').'" />';
        }         }
        my $postexec='';         my $postexec='';
        if ($folder eq 'default') {         if ($folder eq 'default') {
    $r->print('<script>this.window.name="loncapaclient";</script>');     $r->print('<script type="text/javascript">this.window.name="loncapaclient";</script>');
        } else {         } else {
            #$postexec='self.close();';             #$postexec='self.close();';
        }         }
        $hadchanges=0;         $hadchanges=0;
        &editor($r,$coursenum,$coursedom,$folder,$allowed,$upload_output);         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed,
      $upload_output);
          if ($error) {
      $r->print('<p><span class="LC_error">'.$error.'</span></p>');
          }
        if ($hadchanges) {         if ($hadchanges) {
    &mark_hash_old()     &mark_hash_old()
        }         }
Line 2765  ENDCOURSEVERIFY Line 2802  ENDCOURSEVERIFY
 <td>  <td>
 $lt{'file'}:<br />  $lt{'file'}:<br />
 <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">  <form name="uploaddocument" action="/adm/coursedocs" method="post" enctype="multipart/form-data">
 <input type="file" name="uploaddoc" size="40">  <input type="file" name="uploaddoc" size="40" />
 <br />  <br />
 $lt{'title'}:<br />  $lt{'title'}:<br />
 <input type="text" size="50" name="comment">  <input type="text" size="50" name="comment" />
 $uploadtag  $uploadtag
 <input type="hidden" name="cmd" value="upload_default">  <input type="hidden" name="cmd" value="upload_default" />
 <br />  <br />
 <span class="LC_nobreak">  <span class="LC_nobreak">
 <label>$lt{'parse'}?  <label>$lt{'parse'}?
 <input type="checkbox" name="parserflag" />  <input type="checkbox" name="parserflag" checked="checked" />
 </label>  </label>
 </span>  </span>
 <br />  <br />
 <br />  <br />
 <span class="LC_nobreak">  <span class="LC_nobreak">
 <input type="submit" value="$lt{'upld'}">  <input type="submit" value="$lt{'upld'}" />
  $help{'Uploading_From_Harddrive'}   $help{'Uploading_From_Harddrive'}
 </span>  </span>
 </form>  </form>
Line 2789  $uploadtag Line 2826  $uploadtag
 <form action="/adm/coursedocs" method="post" name="simpleeditdefault">  <form action="/adm/coursedocs" method="post" name="simpleeditdefault">
 $lt{'pubd'}<br />  $lt{'pubd'}<br />
 $uploadtag  $uploadtag
 <input type=button onClick="javascript:groupsearch()" value="$lt{'srch'}" />  <input type="button" onClick="javascript:groupsearch()" value="$lt{'srch'}" />
 <br />  <br />
 <span class="LC_nobreak">  <span class="LC_nobreak">
 <input type=button onClick="javascript:groupimport();" value="$lt{'impo'}" />  <input type="button" onClick="javascript:groupimport();" value="$lt{'impo'}" />
 $help{'Importing_LON-CAPA_Resource'}  $help{'Importing_LON-CAPA_Resource'}
 </span>  </span>
 <br />  <br />
 <input type=button onClick="javascript:groupopen(0,1,1);" value="$lt{'book'}" />  <input type="button" onClick="javascript:groupopen(0,1,1);" value="$lt{'book'}" />
 <p>  
 <hr />  <hr />
   <p>
 $lt{'copm'}<br />  $lt{'copm'}<br />
 <input type="text" size="40" name="importmap" /><br />  <input type="text" size="40" name="importmap" /><br />
 <span class="LC_nobreak"><input type=button   <span class="LC_nobreak"><input type="button" 
 onClick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"  onClick="javascript:openbrowser('simpleeditdefault','importmap','sequence,page','')"
 value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />  value="$lt{'selm'}" /> <input type="submit" name="loadmap" value="$lt{'load'}" />
 $help{'Load_Map'}</span>  $help{'Load_Map'}</span>
Line 2854  value="$lt{'newp'}" />$help{'Adding_Page Line 2891  value="$lt{'newp'}" />$help{'Adding_Page
 <br /><form action="/adm/coursedocs" method="post" name="newsyl">  <br /><form action="/adm/coursedocs" method="post" name="newsyl">
 $uploadtag  $uploadtag
 <input type="hidden" name="importdetail"   <input type="hidden" name="importdetail" 
 value="Syllabus=/public/$coursedom/$coursenum/syllabus" />  value="$lt{'syll'}=/public/$coursedom/$coursenum/syllabus" />
 <span class="LC_nobreak">  <span class="LC_nobreak">
 <input name="newsyl" type="submit" value="$lt{'syll'}" />   <input name="newsyl" type="submit" value="$lt{'syll'}" /> 
  $help{'Syllabus'}   $help{'Syllabus'}
Line 2863  value="Syllabus=/public/$coursedom/$cour Line 2900  value="Syllabus=/public/$coursedom/$cour
 <br /><form action="/adm/coursedocs" method="post" name="newnav">  <br /><form action="/adm/coursedocs" method="post" name="newnav">
 $uploadtag  $uploadtag
 <input type="hidden" name="importdetail"   <input type="hidden" name="importdetail" 
 value="Navigate Content=/adm/navmaps" />  value="$lt{'navc'}=/adm/navmaps" />
 <span class="LC_nobreak">  <span class="LC_nobreak">
 <input name="newnav" type="submit" value="$lt{'navc'}" />  <input name="newnav" type="submit" value="$lt{'navc'}" />
 $help{'Navigate_Content'}  $help{'Navigate_Content'}
Line 2931  onClick="javascript:makeabout();" /> Line 2968  onClick="javascript:makeabout();" />
 <br /><form action="/adm/coursedocs" method="post" name="newgroupfiles">  <br /><form action="/adm/coursedocs" method="post" name="newgroupfiles">
 $uploadtag  $uploadtag
 <input type="hidden" name="importdetail"  <input type="hidden" name="importdetail"
 value="Group Files=/adm/$coursedom/$coursenum/aboutme" />  value="$lt{'grpo'}=/adm/$coursedom/$coursenum/aboutme" />
 <span class="LC_nobreak">  <span class="LC_nobreak">
 <input name="newgroupfiles" type="submit" value="$lt{'grpo'}" />  <input name="newgroupfiles" type="submit" value="$lt{'grpo'}" />
 $help{'Group Files'}  $help{'Group Files'}
 </span>  </span>
 </form>  </form>
   <br /><form action="/adm/coursedocs" method="post" name="newroster">
   $uploadtag
   <input type="hidden" name="importdetail" 
   value="$lt{'rost'}=/adm/viewclasslist" />
   <span class="LC_nobreak">
   <input name="newroster" type="submit" value="$lt{'rost'}" />
   $help{'Course Roster'}
   </span>
   </form>
 ENDFORM  ENDFORM
        }         }
        if ($env{'form.pagepath'}) {         if ($env{'form.pagepath'}) {
Line 2978  ENDBLOCK Line 3024  ENDBLOCK
    $env{'form.folderpath'}='supplemental&'.     $env{'form.folderpath'}='supplemental&'.
        &escape(&mt('Supplemental '.$type.' Documents'));         &escape(&mt('Supplemental '.$type.' Documents'));
        }         }
        &editor($r,$coursenum,$coursedom,$folder,$allowed);         my $error = &editor($r,$coursenum,$coursedom,$folder,$allowed);
          if ($error) {
      $r->print('<p><span class="LC_error">'.$error.'</span></p>');
          }
        if ($allowed) {         if ($allowed) {
    my $folderseq=     my $folderseq=
        '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time.         '/uploaded/'.$coursedom.'/'.$coursenum.'/supplemental_'.time.
Line 2992  ENDBLOCK Line 3041  ENDBLOCK
 </tr>  </tr>
 <tr><td>  <tr><td>
 <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">  <form action="/adm/coursedocs" method="post" enctype="multipart/form-data">
 <input type="file" name="uploaddoc" size="40">  <input type="file" name="uploaddoc" size="40" />
 <br />  <br />
 <br />  <br />
 <span class="LC_nobreak">  <span class="LC_nobreak">
Line 3006  $lt{'comment'}:<br /> Line 3055  $lt{'comment'}:<br />
 </textarea>  </textarea>
 <br />  <br />
 <input type="hidden" name="folderpath" value="$path" />  <input type="hidden" name="folderpath" value="$path" />
 <input type="hidden" name="cmd" value="upload_supplemental">  <input type="hidden" name="cmd" value="upload_supplemental" />
 <span class="LC_nobreak">  <span class="LC_nobreak">
 <input type="submit" value="$lt{'upld'}">  <input type="submit" value="$lt{'upld'}" />
  $help{'Uploading_From_Harddrive'}   $help{'Uploading_From_Harddrive'}
 </span>  </span>
 </form>  </form>
Line 3055  $help{'My Personal Info'} Line 3104  $help{'My Personal Info'}
 ENDSUPFORM  ENDSUPFORM
        }         }
     }      }
       $r->print('</table>');
     if ($allowed) {      if ($allowed) {
  $r->print('<form method="POST" name="extimport" action="/adm/coursedocs"><input type="hidden" name="title" /><input type="hidden" name="url" /><input type="hidden" name="useform" /></form>');   $r->print('
   <form method="post" name="extimport" action="/adm/coursedocs">
     <input type="hidden" name="title" />
     <input type="hidden" name="url" />
     <input type="hidden" name="useform" />
     <input type="hidden" name="residx" />
   </form>');
     }      }
     $r->print('</table>');  
   } else {    } else {
       unless ($upload_result eq 'phasetwo') {        unless ($upload_result eq 'phasetwo') {
 # -------------------------------------------------------- This is showdoc mode  # -------------------------------------------------------- This is showdoc mode
           $r->print("<h1>".&mt('Uploaded Document').' - '.            $r->print("<h1>".&mt('Uploaded Document').' - '.
  &Apache::lonnet::gettitle($r->uri).'</h1><p>'.   &Apache::lonnet::gettitle($r->uri).'</h1><p>'.
 &mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><p><table>".  &mt('It is recommended that you use an up-to-date virus scanner before handling this file.')."</p><table>".
           &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table></p>');            &entryline(0,&mt("Click to download or use your browser's Save Link function"),$showdoc).'</table>');
       }        }
   }    }
  }   }
Line 3077  ENDSUPFORM Line 3132  ENDSUPFORM
 sub editing_js {  sub editing_js {
     my ($udom,$uname) = @_;      my ($udom,$uname) = @_;
     my $now = time();      my $now = time();
       my %lt = &Apache::lonlocal::texthash(
                                             p_mnf => 'Name of New Folder',
                                             t_mnf => 'New Folder',
                                             p_mnp => 'Name of New Page',
                                             t_mnp => 'New Page',
                                             p_mxu => 'Title for the Uploaded Score',
                                             p_msp => 'Title for the Page',
                                             p_msb => 'Title for the Problem',
                                             p_mdb => 'Title for the Drop Box',
                                             p_mbb => 'Title for the Bulletin Board',
                                             p_mab => "Enter user:domain for User's 'About Me' Page",
                                             p_mab2 => "About [_99]",
                                             p_mab_alrt1 => 'Not a valid user:domain',
                                             p_mab_alrt2 => 'Please enter both user and domain in the format user:domain',
                                             p_chn => 'New Title',
                                             p_rmr1 => 'WARNING: Removing a resource makes associated grades and scores inaccessible!',
                                             p_rmr2a => 'Remove[_99]',
                                             p_rmr2b => '?[_99]',
                                             p_ctr1a => 'WARNING: Cutting a resource makes associated grades and scores inaccessible!',
                                             p_ctr1b => 'Grades remain inaccessible if resource is pasted into another folder.',
                                             p_ctr2a => 'Cut[_98]',
                                             p_ctr2b => '?[_98]'
                                           );
   
     return <<ENDNEWSCRIPT;      return <<ENDNEWSCRIPT;
 function makenewfolder(targetform,folderseq) {  function makenewfolder(targetform,folderseq) {
     var foldername=prompt('Name of New Folder','New Folder');      var foldername=prompt('$lt{"p_mnf"}','$lt{"t_mnf"}');
     if (foldername) {      if (foldername) {
        targetform.importdetail.value=escape(foldername)+"="+folderseq;         targetform.importdetail.value=escape(foldername)+"="+folderseq;
         targetform.submit();          targetform.submit();
Line 3088  function makenewfolder(targetform,folder Line 3166  function makenewfolder(targetform,folder
 }  }
   
 function makenewpage(targetform,folderseq) {  function makenewpage(targetform,folderseq) {
     var pagename=prompt('Name of New Page','New Page');      var pagename=prompt('$lt{"p_mnp"}','$lt{"t_mnp"}');
     if (pagename) {      if (pagename) {
         targetform.importdetail.value=escape(pagename)+"="+folderseq;          targetform.importdetail.value=escape(pagename)+"="+folderseq;
         targetform.submit();          targetform.submit();
Line 3097  function makenewpage(targetform,folderse Line 3175  function makenewpage(targetform,folderse
   
 function makenewext(targetname) {  function makenewext(targetname) {
     this.document.forms.extimport.useform.value=targetname;      this.document.forms.extimport.useform.value=targetname;
       this.document.forms.extimport.title.value='';
       this.document.forms.extimport.url.value='';
       this.document.forms.extimport.residx.value='';
       window.open('/adm/rat/extpickframe.html');
   }
   
   function edittext(targetname,residx,title,url) {
       this.document.forms.extimport.useform.value=targetname;
       this.document.forms.extimport.residx.value=residx;
       this.document.forms.extimport.url.value=url;
       this.document.forms.extimport.title.value=title;
     window.open('/adm/rat/extpickframe.html');      window.open('/adm/rat/extpickframe.html');
 }  }
   
 function makeexamupload() {  function makeexamupload() {
    var title=prompt('Listed Title for the Uploaded Score');     var title=prompt('$lt{"p_mxu"}');
    if (title) {      if (title) { 
     this.document.forms.newexamupload.importdetail.value=      this.document.forms.newexamupload.importdetail.value=
  escape(title)+'=/res/lib/templates/examupload.problem';   escape(title)+'=/res/lib/templates/examupload.problem';
Line 3110  function makeexamupload() { Line 3199  function makeexamupload() {
 }  }
   
 function makesmppage() {  function makesmppage() {
    var title=prompt('Listed Title for the Page');     var title=prompt('$lt{"p_msp"}');
    if (title) {      if (title) { 
     this.document.forms.newsmppg.importdetail.value=      this.document.forms.newsmppg.importdetail.value=
  escape(title)+'=/adm/$udom/$uname/$now/smppg';   escape(title)+'=/adm/$udom/$uname/$now/smppg';
Line 3119  function makesmppage() { Line 3208  function makesmppage() {
 }  }
   
 function makesmpproblem() {  function makesmpproblem() {
    var title=prompt('Listed Title for the Problem');     var title=prompt('$lt{"p_msb"}');
    if (title) {      if (title) { 
     this.document.forms.newsmpproblem.importdetail.value=      this.document.forms.newsmpproblem.importdetail.value=
  escape(title)+'=/res/lib/templates/simpleproblem.problem';   escape(title)+'=/res/lib/templates/simpleproblem.problem';
Line 3128  function makesmpproblem() { Line 3217  function makesmpproblem() {
 }  }
   
 function makedropbox() {  function makedropbox() {
    var title=prompt('Listed Title for the Drop Box');     var title=prompt('$lt{"p_mdb"}');
    if (title) {      if (title) { 
     this.document.forms.newdropbox.importdetail.value=      this.document.forms.newdropbox.importdetail.value=
         escape(title)+'=/res/lib/templates/DropBox.problem';          escape(title)+'=/res/lib/templates/DropBox.problem';
Line 3137  function makedropbox() { Line 3226  function makedropbox() {
 }  }
   
 function makebulboard() {  function makebulboard() {
    var title=prompt('Listed Title for the Bulletin Board');     var title=prompt('$lt{"p_mbb"}');
    if (title) {     if (title) {
     this.document.forms.newbul.importdetail.value=      this.document.forms.newbul.importdetail.value=
  escape(title)+'=/adm/$udom/$uname/$now/bulletinboard';   escape(title)+'=/adm/$udom/$uname/$now/bulletinboard';
Line 3146  function makebulboard() { Line 3235  function makebulboard() {
 }  }
   
 function makeabout() {  function makeabout() {
    var user=prompt("Enter user:domain for User's 'About Me' Page");     var user=prompt("$lt{'p_mab'}");
    if (user) {     if (user) {
        var comp=new Array();         var comp=new Array();
        comp=user.split(':');         comp=user.split(':');
        if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) {         if ((typeof(comp[0])!=undefined) && (typeof(comp[1])!=undefined)) {
    if ((comp[0]) && (comp[1])) {     if ((comp[0]) && (comp[1])) {
        this.document.forms.newaboutsomeone.importdetail.value=         this.document.forms.newaboutsomeone.importdetail.value=
    'About '+escape(user)+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';     '$lt{"p_mab2"}'+escape(user)+'=/adm/'+comp[1]+'/'+comp[0]+'/aboutme';
        this.document.forms.newaboutsomeone.submit();         this.document.forms.newaboutsomeone.submit();
    } else {     } else {
                alert("Not a valid user:domain");                 alert("$lt{'p_mab_alrt1'}");
            }             }
        } else {         } else {
            alert("Please enter both user and domain in the format user:domain");              alert("$lt{'p_mab_alrt2'}");
        }         }
    }     }
 }  }
Line 3176  function finishpick() { Line 3265  function finishpick() {
     var title=this.document.forms.extimport.title.value;      var title=this.document.forms.extimport.title.value;
     var url=this.document.forms.extimport.url.value;      var url=this.document.forms.extimport.url.value;
     var form=this.document.forms.extimport.useform.value;      var form=this.document.forms.extimport.useform.value;
     eval      var residx=this.document.forms.extimport.residx.value;
      ('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+      eval('this.document.forms.'+form+'.importdetail.value="'+title+'='+url+'='+residx+'";this.document.forms.'+form+'.submit();');
     '";this.document.forms.'+form+'.submit();');  
 }  }
   
 function changename(folderpath,index,oldtitle,container,pagesymb) {  function changename(folderpath,index,oldtitle,container,pagesymb) {
     var title=prompt('New Title',oldtitle);      var title=prompt('$lt{"p_chn"}',oldtitle);
     if (title) {      if (title) {
  this.document.forms.renameform.markcopy.value=-1;   this.document.forms.renameform.markcopy.value=-1;
  this.document.forms.renameform.title.value=title;   this.document.forms.renameform.title.value=title;
Line 3198  function changename(folderpath,index,old Line 3286  function changename(folderpath,index,old
     }      }
 }  }
   
 function removeres(folderpath,index,oldtitle,container,pagesymb) {  function removeres(folderpath,index,oldtitle,container,pagesymb,skip_confirm) {
     if (confirm('WARNING: Removing a resource makes associated grades and scores inaccessible!\\nRemove "'+oldtitle+'"?')) {      if (skip_confirm || confirm('$lt{"p_rmr1"}\\n\\n$lt{"p_rmr2a"} "'+oldtitle+'" $lt{"p_rmr2b"}')) {
  this.document.forms.renameform.markcopy.value=-1;   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') {
Line 3213  function removeres(folderpath,index,oldt Line 3301  function removeres(folderpath,index,oldt
     }      }
 }  }
   
 function cutres(folderpath,index,oldtitle,container,pagesymb,folder) {  function cutres(folderpath,index,oldtitle,container,pagesymb,folder,skip_confirm) {
     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 (skip_confirm || confirm('$lt{"p_ctr1a"}\\n$lt{"p_ctr1b"}\\n\\n$lt{"p_ctr2a"} "'+oldtitle+'" $lt{"p_ctr2b"}')) {
  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;   this.document.forms.renameform.copyfolder.value=folder+'.'+container;

Removed from v.1.285  
changed lines
  Added in v.1.306


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