Diff for /loncom/publisher/loncfile.pm between versions 1.41 and 1.98

version 1.41, 2003/08/28 20:28:33 version 1.98, 2009/05/14 14:24:18
Line 69  use File::Copy; Line 69  use File::Copy;
 use HTML::Entities();  use HTML::Entities();
 use Apache::Constants qw(:common :http :methods);  use Apache::Constants qw(:common :http :methods);
 use Apache::loncacc;  use Apache::loncacc;
 use Apache::Log ();  
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
   use Apache::lonlocal;
   use LONCAPA qw(:DEFAULT :match);
   
   
 my $DEBUG=0;  my $DEBUG=0;
 my $r; # Needs to be global for some stuff RF.  my $r; # Needs to be global for some stuff RF.
Line 100  my $r;    # Needs to be global for some Line 102  my $r;    # Needs to be global for some
 =cut  =cut
   
 sub Debug {  sub Debug {
         # Put out the indicated message butonly if DEBUG is true.
   # Marshall the parameters.      if ($DEBUG) {
      my ($r,$message) = @_;
   my $r       = shift;   $r->log_reason($message);
   my $log     = $r->log;      }
   my $message = shift;  }
     
   # Put out the indicated message butonly if DEBUG is true.  sub done {
        my ($url)=@_;
   if ($DEBUG) {     my $done=&mt("Done");
     $log->debug($message);     return(<<ENDDONE);
   }  <a href="$url">$done</a>
   <script type="text/javascript">
   location.href="$url";
   </script>
   ENDDONE
 }  }
   
 =pod  =pod
Line 150  Global References Line 156  Global References
 =cut  =cut
   
 sub URLToPath {  sub URLToPath {
   my $Url = shift;      my $Url = shift;
   &Debug($r, "UrlToPath got: $Url");      &Debug($r, "UrlToPath got: $Url");
   $Url=~ s/\/+/\//g;      $Url=~ s/\/+/\//g;
   $Url=~ s/^http\:\/\/[^\/]+//;      $Url=~ s/^https?\:\/\/[^\/]+//;
   $Url=~ s/^\///;      $Url=~ s/^\///;
   $Url=~ s/(\~|priv\/)(\w+)\//\/home\/$2\/public_html\//;      $Url=~ s/(\~|priv\/)($match_username)\//\/home\/$2\/public_html\//;
   &Debug($r, "Returning $Url \n");      &Debug($r, "Returning $Url \n");
   return $Url;      return $Url;
 }  }
   
 sub url {  sub url {
     my $fn=shift;      my $fn=shift;
     $fn=~s/^\/home\/(\w+)\/public\_html/\/priv\/$1/;      $fn=~s/^\/home\/($match_username)\/public\_html/\/priv\/$1/;
       $fn=&HTML::Entities::encode($fn,'<>"&');
     return $fn;      return $fn;
 }  }
   
 sub display {  sub display {
     my $fn=shift;      my $fn=shift;
     $fn=~s/^\/home\/(\w+)\/public\_html//;      $fn=~s-^/home/($match_username)/public_html-/priv/$1-;
     return '<tt>'.$fn.'</tt>';      return '<span class="LC_filename">'.$fn.'</span>';
   }
   
   
   # see if the file is
   # a) published (return 0 if not)
   # b) if, so obsolete (return 0 if not)
   
   sub obsolete_unpub {
       my ($user,$domain,$construct)=@_;
       my $published=$construct;
       $published=~
    s/^\/home\/$user\/public\_html\//\/home\/httpd\/html\/res\/$domain\/$user\//;
       if (-e $published) {
    if (&Apache::lonnet::metadata($published,'obsolete')) {
       return 1;
    }
    return 0;
       } else {
    return 1;
       }
   }
   
   # see if directory is empty
   # ignores any .meta, .save, .bak, and .log files created for a previously
   # published file, which has since been marked obsolete and deleted.
   sub empty_directory {
       my ($dirname,$phase) = @_;
       if (opendir DIR, $dirname) {
           my @files = grep(!/^\.\.?$/, readdir(DIR)); # ignore . and ..
           if (@files) { 
               my @orphans = grep(/\.(meta|save|log|bak)$/,@files);
               if (scalar(@files) - scalar(@orphans) > 0) { 
                   return 0;
               } else {
                   if (($phase eq 'Delete2') && (@orphans > 0)) {
                       foreach my $file (@orphans) {
                           if ($file =~ /\.(meta|save|log|bak)$/) {
                               unlink($dirname.$file);
                           }
                       }
                   }
               }
           }
           closedir(DIR);
           return 1;
       }
       return 0;
 }  }
   
 =pod  =pod
Line 183  sub display { Line 237  sub display {
   
 =over 4  =over 4
   
 =item  $user   - string [in] - Name of the user for which to check.  =item  $user     - string [in] - Name of the user for which to check.
   
 =item  $domain - string [in] - Name of the domain in which the resource  =item  $domain   - string [in] - Name of the domain in which the resource
                           might have been published.                            might have been published.
   
 =item  $file   - string [in] - Name of the file.  =item  $file     - string [in] - Name of the file.
   
   =item  $creating - string [in] - optional, type of object being created,
                                  either 'directory' or 'file'. Defaults to
                                  'file' if unspecified.
   
 =back  =back
   
Line 196  Returns: Line 254  Returns:
   
 =over 4  =over 4
   
   =item  string - Either undef, 'warning' or 'error' depending on the
                   type of problem
   
 =item  string - Either where the resource exists as an html string that can  =item  string - Either where the resource exists as an html string that can
            be embedded in a dialog or an empty string if the resource             be embedded in a dialog or an empty string if the resource
            does not exist.             does not exist.
Line 205  Returns: Line 266  Returns:
 =cut  =cut
   
 sub exists {  sub exists {
   my ($user, $domain, $construct) = @_;      my ($user, $domain, $construct, $creating) = @_;
   my $published=$construct;      $creating ||= 'file';
   $published=~  
 s/^\/home\/$user\/public\_html\//\/home\/httpd\/html\/res\/$domain\/$user\//;      my $published=$construct;
   my $result='';          $published=~
   if ( -d $construct ) {   s{^/home/$user/public_html/}{/home/httpd/html/res/$domain/$user/};
       return 'Error: destination for operation is an existing directory.';      my ($type,$result);
   }      if ( -d $construct ) {
   if ( -e $published) {   return ('error','<p><span class="LC_error">'.&mt('Error: destination for operation is an existing directory.').'</span></p>');
       $result.='<p><font color="red">Warning: target file exists, and has been published!</font></p>';  
   } elsif ( -e $construct) {      }
       $result.='<p><font color="red">Warning: target file exists!</font></p>';  
   }  
   return $result;  
   
       if ( -e $published) {
    if ( -e $construct ) {
       $type = 'warning';
       $result.='<p><span class="LC_warning">'.&mt('Warning: target file exists, and has been published!').'</span></p>';
    } else {
       my $published_type = (-d $published) ? 'directory' : 'file';
   
       if ($published_type eq $creating) {
    $type = 'warning';
    $result.='<p><span class="LC_warning">'.&mt("Warning: a published $published_type of this name exists.").'</span></p>';
       } else {
    $type = 'error';
    $result.='<p><span class="LC_error">'.&mt("Error: a published $published_type of this name exists.").'</span></p>';
       }
    }
       } elsif ( -e $construct) {
    $type = 'warning';
    $result.='<p><span class="LC_warning">'.&mt('Warning: target file exists!').'</span></p>';
       }
   
       return ($type,$result);
 }  }
   
 =pod  =pod
Line 258  sub checksuffix { Line 337  sub checksuffix {
     my $newsuffix;      my $newsuffix;
     if ($new=~m:(.*/*)([^/]+)\.(\w+)$:) { $newsuffix=$3; }      if ($new=~m:(.*/*)([^/]+)\.(\w+)$:) { $newsuffix=$3; }
     if ($old=~m:(.*)/+([^/]+)\.(\w+)$:) { $oldsuffix=$3; }      if ($old=~m:(.*)/+([^/]+)\.(\w+)$:) { $oldsuffix=$3; }
     if ($oldsuffix ne $newsuffix) {      if (lc($oldsuffix) ne lc($newsuffix)) {
  $result.=   $result.=
             '<p><font color="red">Warning: change of MIME type!</font></p>';              '<p><span class="LC_warning">'.&mt('Warning: change of MIME type!').'</span></p>';
     }      }
     return $result;      return $result;
 }  }
   
 sub cleanDest {  sub cleanDest {
     my ($request,$dest)=@_;      my ($request,$dest,$subdir,$fn,$uname)=@_;
     #remove bad characters      #remove bad characters
     if  ($dest=~/[\#\?&]/) {      my $foundbad=0;
  $request->print("<p><font color=\"red\">Invalid characters in requested name have been removed.</font></p>");      if ($subdir && $dest =~/\./) {
  $dest=~s/[\#\?&]//g;   $foundbad=1;
    $dest=~s/\.//g;
       }
       $dest =~ s/(\s+$|^\s+)//g;
       if  ($dest=~/[\#\?&%\":]/) {
    $foundbad=1;
    $dest=~s/[\#\?&%\":]//g;
       }
       if ($dest=~m|/|) {
    my ($newpath)=($dest=~m|(.*)/|);
    $newpath=&relativeDest($fn,$newpath,$uname);
    if (! -d "$newpath") {
       $request->print('<p><span class="LC_error">'
                              .&mt("You have requested to create file in directory [_1] which doesn't exist. The requested directory path has been removed from the requested file name."
                                  ,'"'.&display($newpath).'"')
                              .'</span></p>');
       $dest=~s|.*/||;
    }
       }
       if ($dest =~ /\.(\d+)\.(\w+)$/){
    $request->print('<span class="LC_error">'
    .&mt('Bad filename [_1]','<span class="LC_filename">'.&display($dest).'</span>')
                           .'<br />'
                           .&mt('[_1](name).(number).(extension)[_2] not allowed.','<tt>','</tt>')
                           .'<br />'
                           .&mt('Removing the [_1].number.[_2] from requested filename.','<tt>','</tt>')
    .'</span>');
    $dest =~ s/\.(\d+)(\.\w+)$/$2/;
       }
       if ($foundbad) {
    $request->print("<p><span class=\"LC_error\">".&mt('Invalid characters in requested name have been removed.')."</span></p>");
     }      }
     return $dest;      return $dest;
 }  }
Line 311  Parameters: Line 420  Parameters:
 =cut  =cut
   
 sub CloseForm1 {  sub CloseForm1 {
    my ($request,  $fn) = @_;      my ($request,  $fn) = @_;
    $request->print('<p><input type="submit" value="Continue" /></p></form>');      $request->print('<p><input type="submit" value="'.&mt('Continue').'" /></p></form>');
    $request->print('<form action="'.&url($fn).      $request->print('<form action="'.&url($fn).
      '" method="POST"><p><input type="submit" value="Cancel" /></p></form>');      '" method="post"><p><input type="submit" value="'.&mt('Cancel').'" /></p></form>');
 }  }
   
   
Line 343  Parameters: Line 452  Parameters:
 =cut  =cut
   
 sub CloseForm2 {  sub CloseForm2 {
   my ($request, $user, $fn) = @_;      my ($request, $user, $fn) = @_;
   $request->print('<h3><a href="'.&url($fn).'/">Done</a></h3>');      $request->print(&done(&url($fn)));
 }  }
   
 =pod  =pod
Line 383  new filename relative to the current dir Line 492  new filename relative to the current dir
 =cut    =cut  
   
 sub Rename1 {  sub Rename1 {
     my ($request, $user, $domain, $fn, $newfilename) = @_;      my ($request, $user, $domain, $fn, $newfilename, $style) = @_;
   
     if(-e $fn) {      if(-e $fn) {
  if($newfilename) {   if($newfilename) {
       # is dest a dir
       if ($style eq 'move') {
    if (-d $newfilename) {
       if ($fn =~ m|/([^/]*)$|) { $newfilename .= '/'.$1; }
    }
       }
     if ($newfilename =~ m|/[^\.]+$|) {      if ($newfilename =~ m|/[^\.]+$|) {
  #no extension add on original extension   #no extension add on original extension
  if ($fn =~ m|/[^\.]*\.([^\.]+)$|) {   if ($fn =~ m|/[^\.]*\.([^\.]+)$|) {
Line 397  sub Rename1 { Line 512  sub Rename1 {
     #renaming a dir, delete the trailing /      #renaming a dir, delete the trailing /
             #remove second to last element for current dir              #remove second to last element for current dir
     if (-d $fn) {      if (-d $fn) {
    $newfilename=~/\.(\w+)$/;
    if (&Apache::loncommon::fileembstyle($1) eq 'ssi') {
       $request->print('<br /><span classr="LC_warning">'.
       &mt('Cannot change MIME type of a directory').
       '</span>'.
       '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
       return;
    }
  $newfilename=~s/\/[^\/]+\/([^\/]+)$/\/$1/;   $newfilename=~s/\/[^\/]+\/([^\/]+)$/\/$1/;
     }      }
     my $return=&exists($user, $domain, $newfilename);      $newfilename=~s://+:/:g; # remove duplicate /
       while ($newfilename=~m:/\.\./:) {
    $newfilename=~ s:/[^/]+/\.\./:/:g; #remove dir/..
       }
       my ($type, $return)=&exists($user, $domain, $newfilename);
     $request->print($return);      $request->print($return);
     if ($return =~/^Error:/) {      if ($type eq 'error') {
  $request->print('<br /><a href="'.&url($fn).'">Cancel</a>');   $request->print('<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
  return;   return;
     }      }
       unless (&obsolete_unpub($user,$domain,$fn)) {
    $request->print('<h3>'.&mt('Cannot rename or move non-obsolete published file').'</h3>'.
    '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
    return;
       }
       my $action;
       if ($style eq 'rename') {
    $action=&mt('Rename');
       } else {
    $action=&mt('Move');
       }
     $request->print('<input type="hidden" name="newfilename" value="'.      $request->print('<input type="hidden" name="newfilename" value="'.
     $newfilename.      $newfilename.
     '" /><p>Rename '.&display($fn).      '" /><p>'.$action.' '.&display($fn).
     '</tt><br />to '.&display($newfilename).'?</p>');      '</p><br />to '.&display($newfilename).'?</p>');
     &CloseForm1($request, $fn);      &CloseForm1($request, $fn);
  } else {   } else {
     $request->print('<p>No new filename specified.</p></form>');      $request->print('<p>'.&mt('No new filename specified.').'</p></form>');
     return;      return;
  }   }
     } else {      } else {
  $request->print('<p> No such file: '.&display($fn).'</p></form>');   $request->print('<p> '.&mt('No such file').': '.&display($fn).'</p></form>');
  return;   return;
     }      }
           
 }  }
   
 =pod  =pod
   
 =item Delete1  =item Delete1
Line 445  Parameters: Line 584  Parameters:
 =cut  =cut
   
 sub Delete1 {  sub Delete1 {
   my ($request, $user, $domain, $fn) = @_;      my ($request, $user, $domain, $fn) = @_;
   
   if( -e $fn) {      if( -e $fn) {
     $request->print('<input type="hidden" name="newfilename" value="'.   $request->print('<input type="hidden" name="newfilename" value="'.
     $fn.'"/>');   $fn.'" />');
     $request->print('<p>Delete '.&display($fn).'?</p>');          if (-d $fn) {
     &CloseForm1($request, $fn);              unless (&empty_directory($fn,'Delete1')) {
   } else {                  $request->print('<h3>'.&mt('Only empty directories may be deleted.').'</h3>'.
     $request->print('<p>No such file: '.&display($fn).'</p></form>');                              'You must delete the contents of the directory first.<br />'.
   }                              '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
                   return;
               }
           } else { 
       unless (&obsolete_unpub($user,$domain,$fn)) {
           $request->print('<h3>'.&mt('Cannot delete non-obsolete published file').'</h3>'.
       '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
           return;
       }
           }
    $request->print('<p>'.&mt('Delete').' '.&display($fn).'?</p>');
    &CloseForm1($request, $fn);
       } else {
    $request->print('<p>'.&mt('No such file').': '.&display($fn).'</p></form>');
       }
 }  }
   
 =pod  =pod
Line 485  Parameters: Line 638  Parameters:
 =cut  =cut
   
 sub Copy1 {  sub Copy1 {
   my ($request, $user, $domain, $fn, $newfilename) = @_;      my ($request, $user, $domain, $fn, $newfilename) = @_;
   
   if(-e $fn) {      if(-e $fn) {
     $request->print(&checksuffix($fn,$newfilename));   # is dest a dir
     my $return=&exists($user, $domain, $newfilename);   if (-d $newfilename) {
     $request->print($return);      if ($fn =~ m|/([^/]*)$|) { $newfilename .= '/'.$1; }
     if ($return =~/^Error:/) {   }
  $request->print('<br /><a href="'.&url($fn).'">Cancel</a>');   if ($newfilename =~ m|/[^\.]+$|) {
  return;      #no extension add on original extension
       if ($fn =~ m|/[^\.]*\.([^\.]+)$|) { $newfilename.='.'.$1; }
    } 
    $newfilename=~s://+:/:g; # remove duplicate /
    while ($newfilename=~m:/\.\./:) {
       $newfilename=~ s:/[^/]+/\.\./:/:g; #remove dir/..
    }
    $request->print(&checksuffix($fn,$newfilename));
    my ($type,$return)=&exists($user, $domain, $newfilename);
    $request->print($return);
    if ($type eq 'error') {
       $request->print('<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
       return;
    }
    $request->print('<input type="hidden" name="newfilename" value="'.
    $newfilename.
    '" /><p>'.&mt('Copy').' '.&display($fn).'<br />to '.
    &display($newfilename).'?</p>');
    &CloseForm1($request, $fn);
       } else {
    $request->print('<p>'.&mt('No such file').': '.&display($fn).'</p></form>');
     }      }
     $request->print('<input type = "hidden" name = "newfilename" value = "'.  
     $newfilename.  
     '" /><p>Copy '.&display($fn).'<br />to '.  
     &display($newfilename).'?</p>');  
     &CloseForm1($request, $fn);  
   } else {  
     $request->print('<p>No such file: '.&display($fn).'</p></form>');  
   }  
 }  }
   
 =pod  =pod
Line 544  causes the newdir operation to transitio Line 709  causes the newdir operation to transitio
 =cut  =cut
   
   
 sub NewDir1  sub NewDir1 {
 {      my ($request, $username, $domain, $fn, $newfilename, $mode) = @_;
   my ($request, $username, $domain, $fn, $newfilename) = @_;  
       my ($type, $result)=&exists($username,$domain,$newfilename,'directory');
   my $result=&exists($username,$domain,$newfilename);      $request->print($result);
   if ($result) {      if ($type eq 'error') {
     $request->print('<font color="red">'.$result.'</font></form>');   $request->print('</form>');
   } else {      } else {
     $request->print('<input type="hidden" name="newfilename" value="'.   if ($mode eq 'testbank') {
     $newfilename.'" /><p>Make new directory '.      $request->print('<input type="hidden" name="callingmode" value="testbank" />');
     &display($newfilename).'?</p>');   } elsif ($mode eq 'imsimport') {
     &CloseForm1($request, $fn);      $request->print('<input type="hidden" name="callingmode" value="imsimport" />');
   }   }
    $request->print('<input type="hidden" name="newfilename" value="'.
    $newfilename.'" /><p>'.&mt('Make new directory').' '.
    &display($newfilename).'?</p>');
    &CloseForm1($request, $fn);
       }
   }
   
   
   sub Decompress1 {
       my ($request, $user, $domain, $fn) = @_;
       if( -e $fn) {
       $request->print('<input type="hidden" name="newfilename" value="'.$fn.'" />');
       $request->print('<p>'.&mt('Decompress').' '.&display($fn).'?</p>');
       &CloseForm1($request, $fn);
       } else {
    $request->print('<p>'.&mt('No such file').': '.&display($fn).'</p></form>');
       }
 }  }
   
 =pod  =pod
Line 599  button which returns you to the driector Line 781  button which returns you to the driector
   
 =cut  =cut
   
   
 sub NewFile1 {  sub NewFile1 {
     my ($request, $user, $domain, $fn, $newfilename) = @_;      my ($request, $user, $domain, $fn, $newfilename) = @_;
       return if (&filename_check($newfilename) ne 'ok');
   
     if ($ENV{'form.action'} =~ /new(.+)file/) {      if ($env{'form.action'} =~ /new(.+)file/) {
  my $extension=$1;   my $extension=$1;
   
         ##Informs User (name).(number).(extension) not allowed   
  if($newfilename =~ /\.(\d+)\.(\w+)$/){  
     $r->print('<font color="red">'.$newfilename.  
       ' - Bad Filename<br />(name).(number).(extension)'.  
       ' Not Allowed</font>');  
     return;  
  }  
  if ($newfilename !~ /\Q.$extension\E$/) {   if ($newfilename !~ /\Q.$extension\E$/) {
     if ($newfilename =~ m|^[^\.]*\.([^\.]+)$|) {      if ($newfilename =~ m|/[^/.]*\.(?:[^/.]+)$|) {
  #already has an extension strip it and add in expected one   #already has an extension strip it and add in expected one
  $newfilename =~ s|.([^\.]+)$||;   $newfilename =~ s|(/[^./])\.(?:[^.]+)$|$1|;
     }      }
     $newfilename.=".$extension";      $newfilename.=".$extension";
  }   }
     }      }
     my $result=&exists($user,$domain,$newfilename);      my ($type, $result)=&exists($user,$domain,$newfilename);
     if($result) {      $request->print($result);
  $request->print('<font color="red">'.$result.'</font></form>');      if ($type eq 'error') {
    $request->print('</form>');
     } else {      } else {
  $request->print('<p>Make new file '.&display($newfilename).'?</p>');          my $extension;
   
           if ($newfilename =~ m{[^/.]+\.([^/.]+)$}) {
               $extension = $1;
           }
   
           my @okexts = qw(xml html xhtml htm xhtm problem page sequence rights sty library js css txt);
           if (($extension eq '') || (!grep(/^\Q$extension\E/,@okexts))) {
               my $validexts = '.'.join(', .',@okexts);
               $request->print('<p class="LC_warning">'.
                   &mt('Invalid filename: ').&display($newfilename).'</p><p>'.
                   &mt('The name of the new file needs to end with an appropriate file extension to indicate the type of file to create.').'<br />'.
                   &mt('The following are valid extensions: [_1].',$validexts).
                   '</p></form><p>'.
    '<form name="fileaction" action="/adm/cfile" method="post">'.
                   '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'.
    '<input type="hidden" name="action" value="newfile" />'.
           '<span class ="LC_nobreak">'.&mt('Enter a file name: ').'<input type="text" name="newfilename" value="Type Name Here" onfocus="if (this.value == '."'Type Name Here') this.value=''".'" />&nbsp;<input type="submit" value="Go" />'.
                   '</span></form></p>'.
                   '<p><form action="'.&url($fn).
                   '" method="post"><p><input type="submit" value="'.&mt('Cancel').'" /></form></p>');
               return;
           }
   
    $request->print('<p>'.&mt('Make new file').' '.&display($newfilename).'?</p>');
  $request->print('</form>');   $request->print('</form>');
   
  $request->print('<form action="'.&url($newfilename).   $request->print('<form action="'.&url($newfilename).
  '" method="POST"><p><input type="submit" value="Continue" /></p></form>');   '" method="post"><p><input type="submit" value="'.&mt('Continue').'" /></p></form>');
  $request->print('<form action="'.&url($fn).   $request->print('<form action="'.&url($fn).
  '" method="POST"><p><input type="submit" value="Cancel" /></p></form>');   '" method="post"><p><input type="submit" value="'.&mt('Cancel').'" /></p></form>');
       }
       return;
   }
   
   sub filename_check {
       my ($newfilename) = @_;
       ##Informs User (name).(number).(extension) not allowed
       if($newfilename =~ /\.(\d+)\.(\w+)$/){
           $r->print('<span class="LC_error">'.$newfilename.
                     ' - '.&mt('Bad Filename').'<br />('.&mt('name').').('.&mt('number').').('.&mt('extension').') '.
                     ' '.&mt('Not Allowed').'</span>');
           return;
       }
       if($newfilename =~ /(\:\:\:|\&\&\&|\_\_\_)/){
           $r->print('<span class="LC_error">'.$newfilename.
                     ' - '.&mt('Bad Filename').'<br />('.&mt('Must not include').' '.$1.') '.
                     ' '.&mt('Not Allowed').'</span>');
           return;
     }      }
       return 'ok'; 
 }  }
   
 =pod  =pod
Line 663  performed and reported to the user. Line 882  performed and reported to the user.
 =cut  =cut
   
 sub phaseone {  sub phaseone {
   my ($r,$fn,$uname,$udom)=@_;      my ($r,$fn,$uname,$udom)=@_;
       
   my $newfilename=&cleanDest($r,$ENV{'form.newfilename'});      my $doingdir=0;
   $newfilename=&relativeDest($fn,$newfilename,$uname);      if ($env{'form.action'} eq 'newdir') { $doingdir=1; }
       my $newfilename=&cleanDest($r,$env{'form.newfilename'},$doingdir,$fn,$uname);
   $r->print('<form action="/adm/cfile" method="post">'.      $newfilename=&relativeDest($fn,$newfilename,$uname);
       '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'.      $r->print('<form action="/adm/cfile" method="post">'.
       '<input type="hidden" name="phase" value="two" />'.        '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'.
       '<input type="hidden" name="action" value="'.$ENV{'form.action'}.'" />');        '<input type="hidden" name="phase" value="two" />'.
         '<input type="hidden" name="action" value="'.$env{'form.action'}.'" />');
       
   if ($ENV{'form.action'} eq 'rename') {      if ($env{'form.action'} eq 'rename') {
       &Rename1($r, $uname, $udom, $fn, $newfilename);   &Rename1($r, $uname, $udom, $fn, $newfilename, 'rename');
   } elsif ($ENV{'form.action'} eq 'delete') {       } elsif ($env{'form.action'} eq 'move') {
       &Delete1($r, $uname, $udom, $fn);   &Rename1($r, $uname, $udom, $fn, $newfilename, 'move');
   } elsif ($ENV{'form.action'} eq 'copy') {       } elsif ($env{'form.action'} eq 'delete') { 
       if($newfilename) {   &Delete1($r, $uname, $udom, $fn);
   &Copy1($r, $uname, $udom, $fn, $newfilename);      } elsif ($env{'form.action'} eq 'decompress') {
       } else {   &Decompress1($r, $uname, $udom, $fn);
   $r->print('<p>No new filename specified.</p></form>');      } elsif ($env{'form.action'} eq 'copy') { 
       }   if($newfilename) {
   } elsif ($ENV{'form.action'} eq 'newdir') {      &Copy1($r, $uname, $udom, $fn, $newfilename);
       &NewDir1($r, $uname, $udom, $fn, $newfilename);   } else {
   }  elsif ($ENV{'form.action'} eq 'newfile' ||      $r->print('<p>'.&mt('No new filename specified.').'</p></form>');
     $ENV{'form.action'} eq 'newhtmlfile' ||   }
     $ENV{'form.action'} eq 'newproblemfile' ||      } elsif ($env{'form.action'} eq 'newdir') {
             $ENV{'form.action'} eq 'newpagefile' ||   my $mode = '';
             $ENV{'form.action'} eq 'newsequencefile' ||   if (exists($env{'form.callingmode'}) ) {
             $ENV{'form.action'} eq 'newrightsfile' ||      $mode = $env{'form.callingmode'};
             $ENV{'form.action'} eq 'newstyfile' ||   }   
             $ENV{'form.action'} eq 'Select Action') {   &NewDir1($r, $uname, $udom, $fn, $newfilename, $mode);
       if ($newfilename) {      }  elsif ($env{'form.action'} eq 'newfile' ||
   &NewFile1($r, $uname, $udom, $fn, $newfilename);        $env{'form.action'} eq 'newhtmlfile' ||
       } else {        $env{'form.action'} eq 'newproblemfile' ||
   $r->print('<p>No new filename specified.</p></form>');        $env{'form.action'} eq 'newpagefile' ||
       }        $env{'form.action'} eq 'newsequencefile' ||
   }        $env{'form.action'} eq 'newrightsfile' ||
         $env{'form.action'} eq 'newstyfile' ||
         $env{'form.action'} eq 'newtaskfile' ||
                 $env{'form.action'} eq 'newlibraryfile' ||
         $env{'form.action'} eq 'Select Action') {
           my $empty=&mt('Type Name Here');
    if (($newfilename!~/\/$/) && ($newfilename!~/$empty$/)) {
       &NewFile1($r, $uname, $udom, $fn, $newfilename);
    } else {
       $r->print('<p>'.&mt('No new filename specified.').'</p></form>');
    }
       }
 }  }
   
 =pod  =pod
Line 737  Returns: Line 968  Returns:
   
 sub Rename2 {  sub Rename2 {
   
   my ($request, $user, $directory, $oldfile, $newfile) = @_;      my ($request, $user, $directory, $oldfile, $newfile) = @_;
   
   &Debug($request, "Rename2 directory: ".$directory." old file: ".$oldfile.      &Debug($request, "Rename2 directory: ".$directory." old file: ".$oldfile.
  " new file ".$newfile."\n");     " new file ".$newfile."\n");
   &Debug($request, "Target is: ".$directory.'/'.      &Debug($request, "Target is: ".$directory.'/'.
  $newfile);     $newfile);
   if (-e $oldfile) {      if (-e $oldfile) {
   
       my $oRN=$oldfile;   my $oRN=$oldfile;
       my $nRN=$newfile;   my $nRN=$newfile;
       unless (rename($oldfile,$newfile)) {   unless (rename($oldfile,$newfile)) {
   $request->print('<font color="red">Error: '.$!.'</font>');      $request->print('<span class="LC_error">'.&mt('Error').': '.$!.'</span>');
   return 0;      return 0;
       }   }
       ## If old name.(extension) exits, move under new name.   ## If old name.(extension) exits, move under new name.
       ## If it doesn't exist and a new.(extension) exists     ## If it doesn't exist and a new.(extension) exists  
       ## delete it (only concern when renaming over files)   ## delete it (only concern when renaming over files)
       my $tmp1=$oRN.'.meta';   my $tmp1=$oRN.'.meta';
       my $tmp2=$nRN.'.meta';   my $tmp2=$nRN.'.meta';
       if(-e $tmp1){   if(-e $tmp1){
   unless(rename($tmp1,$tmp2)){ }      unless(rename($tmp1,$tmp2)){ }
       } elsif(-e $tmp2){   } elsif(-e $tmp2){
   unlink $tmp2;      unlink $tmp2;
       }   }
       $tmp1=$oRN.'.save';   $tmp1=$oRN.'.save';
       $tmp2=$nRN.'.save';   $tmp2=$nRN.'.save';
       if(-e $tmp1){   if(-e $tmp1){
   unless(rename($tmp1,$tmp2)){ }      unless(rename($tmp1,$tmp2)){ }
       } elsif(-e $tmp2){   } elsif(-e $tmp2){
   unlink $tmp2;      unlink $tmp2;
       }   }
       $tmp1=$oRN.'.log';   $tmp1=$oRN.'.log';
       $tmp2=$nRN.'.log';   $tmp2=$nRN.'.log';
       if(-e $tmp1){   if(-e $tmp1){
   unless(rename($tmp1,$tmp2)){ }      unless(rename($tmp1,$tmp2)){ }
       } elsif(-e $tmp2){   } elsif(-e $tmp2){
   unlink $tmp2;      unlink $tmp2;
       }   }
       $tmp1=$oRN.'.bak';   $tmp1=$oRN.'.bak';
       $tmp2=$nRN.'.bak';   $tmp2=$nRN.'.bak';
       if(-e $tmp1){   if(-e $tmp1){
   unless(rename($tmp1,$tmp2)){ }      unless(rename($tmp1,$tmp2)){ }
       } elsif(-e $tmp2){   } elsif(-e $tmp2){
   unlink $tmp2;      unlink $tmp2;
       }   }
   } else {      } else {
       $request->print("<p> No such file: ".&display($oldfile).'</p></form>');   $request->print("<p> ".&mt('No such file').": ".&display($oldfile).'</p></form>');
       return 0;   return 0;
   }      }
   return 1;      return 1;
 }  }
   
 =pod  =pod
   
 =item Delete2($request, $user, $filename)  =item Delete2($request, $user, $filename)
Line 818  Returns: Line 1050  Returns:
 =cut  =cut
   
 sub Delete2 {  sub Delete2 {
   my ($request, $user, $filename) = @_;      my ($request, $user, $filename) = @_;
       if (-d $filename) { 
   if(-e $filename) {   unless (&empty_directory($filename,'Delete2')) { 
     unless(unlink($filename)) {      $request->print('<span class="LC_error">'.&mt('Error: Directory Non Empty').'</span>'); 
       $request->print('<font color="red">Error: '.$!.'</font>');      return 0;
       return 0;   } else {   
       if(-e $filename) {
    unless(rmdir($filename)) {
       $request->print('<span class="LC_error">'.&mt('Error').': '.$!.'</span>');
       return 0;
    }
       } else {
    $request->print('<p> '.&mt('No such file').'. </p></form>');
    return 0;
       }
    }
       } else {
    if(-e $filename) {
       unless(unlink($filename)) {
    $request->print('<span class="LC_error">'.&mt('Error').': '.$!.'</span>');
    return 0;
       }
    } else {
       $request->print('<p> '.&mt('No such file').'. </p></form>');
       return 0;
    }
     }      }
   } else {      return 1;
     $request->print('<p> No such file. </p></form');  
     return 0;  
   }  
   return 1;  
 }  }
   
 =pod  =pod
Line 856  sub Delete2 { Line 1104  sub Delete2 {
   
 =back  =back
   
 Returns 0 failure, and 0 successs.  Returns 0 failure, and 1 successs.
   
 =cut  =cut
   
Line 864  sub Copy2 { Line 1112  sub Copy2 {
     my ($request, $username, $dir, $oldfile, $newfile) = @_;      my ($request, $username, $dir, $oldfile, $newfile) = @_;
     &Debug($request ,"Will try to copy $oldfile to $newfile");      &Debug($request ,"Will try to copy $oldfile to $newfile");
     if(-e $oldfile) {      if(-e $oldfile) {
           if ($oldfile eq $newfile) {
               $request->print('<span class="LC_error">'.&mt('Warning').': '.&mt('Name of new file is the same as name of old file').' - '.&mt('no action taken').'.</span>');
               return 1;
           }
  unless (copy($oldfile, $newfile)) {   unless (copy($oldfile, $newfile)) {
     $request->print('<font color="red"> copy Error: '.$!.'</font>');      $request->print('<span class="LC_error">'.&mt('copy Error').': '.$!.'</span>');
       return 0;
    } elsif (!chmod(0660, $newfile)) {
       $request->print('<span class="LC_error">'.&mt('chmod error').': '.$!.'</span>');
       return 0;
    } elsif (-e $oldfile.'.meta' && 
    !copy($oldfile.'.meta', $newfile.'.meta') &&
    !chmod(0660, $newfile.'.meta')) {
       $request->print('<span class="LC_error">'.&mt('copy metadata error').
       ': '.$!.'</span>');
     return 0;      return 0;
  } else {   } else {
     unless (chmod(0660, $newfile)) {  
  $request->print('<font color="red"> chmod error: '.$!.'</font>');  
  return 0;  
     }  
     return 1;      return 1;
  }   }
     } else {      } else {
  $request->print('<p> No such file </p>');   $request->print('<p> '.&mt('No such file').' </p>');
  return 0;   return 0;
     }      }
     return 1;      return 1;
 }  }
   
 =pod  =pod
   
 =item NewDir2($request, $user, $newdirectory)  =item NewDir2($request, $user, $newdirectory)
Line 903  Returns 0 - failure 1 - success. Line 1161  Returns 0 - failure 1 - success.
 =cut  =cut
   
 sub NewDir2 {  sub NewDir2 {
   my ($request, $user, $newdirectory) = @_;      my ($request, $user, $newdirectory) = @_;
       
   unless(mkdir($newdirectory, 02770)) {      unless(mkdir($newdirectory, 02770)) {
     $request->print('<font color="red">Error: '.$!.'</font>');   $request->print('<span class="LC_error">'.&mt('Error').': '.$!.'</span>');
     return 0;   return 0;
   }      }
   unless(chmod(02770, ($newdirectory))) {      unless(chmod(02770, ($newdirectory))) {
       $request->print('<font color="red"> Error: '.$!.'</font>');   $request->print('<span class="LC_error">'.&mt('Error').': '.$!.'</span>');
       return 0;   return 0;
   }      }
   return 1;      return 1;
   }
   
   sub decompress2 {
       my ($r, $user, $dir, $file) = @_;
       &Apache::lonnet::appenv({'cgi.file' => $file});
       &Apache::lonnet::appenv({'cgi.dir' => $dir});
       my $result=&Apache::lonnet::ssi_body('/cgi-bin/decompress.pl');
       $r->print($result);
       &Apache::lonnet::delenv('cgi.file');
       &Apache::lonnet::delenv('cgi.dir');
       return 1;
 }  }
   
 =pod  =pod
Line 953  sub phasetwo { Line 1222  sub phasetwo {
           
     &Debug($r, "loncfile - Entering phase 2 for $fn");      &Debug($r, "loncfile - Entering phase 2 for $fn");
           
     # Break down the file into it's component pieces.      # Break down the file into its component pieces.
           
     my $dir; # Directory path      my $dir; # Directory path
     my $main; # Filename.      my $main; # Filename.
     my $suffix; # Extension.      my $suffix; # Extension.
       if ($fn=~m:(.*)/([^/]+):) {
     if ($fn=~m:(.*)/([^/]+)\.(\w+)$:) {  
  $dir=$1; # Directory path   $dir=$1; # Directory path
  $main=$2; # Filename.   $main=$2; # Filename.
  $suffix=$3; # Extension.  
     }      }
               if($main=~m:\.(\w+)$:){ # Fixes problems with filenames with no extensions
     my $dest;                   # On success this is where we'll go.   $suffix=$1; #This is the actually filename extension if it exists
        $main=~s/\.\w+$//; #strip the extension
     &Debug($r,       }
    "loncfile::phase2 dir = $dir main = $main suffix = $suffix");      my $dest;                       #
     &Debug($r,      my $dest_dir;                   # On success this is where we'll go.
    "    newfilename = ".$ENV{'form.newfilename'});      my $disp_newname;               #
       my $dest_newname;               #
       &Debug($r,"loncfile::phase2 dir = $dir main = $main suffix = $suffix");
       &Debug($r,"    newfilename = ".$env{'form.newfilename'});
   
     my $conspace=$fn;      my $conspace=$fn;
           
     &Debug($r,       &Debug($r,"loncfile::phase2 Full construction space name: $conspace");
    "loncfile::phase2 Full construction space name: $conspace");  
           
     &Debug($r,       &Debug($r,"loncfie::phase2 action is $env{'form.action'}");
    "loncfie::phase2 action is $ENV{'form.action'}");  
           
     # Select the appropriate processing sub.      # Select the appropriate processing sub.
           if ($env{'form.action'} eq 'decompress') { 
     if ($ENV{'form.action'} eq 'rename') { # Rename.   $main .= '.'.$suffix;
  if($ENV{'form.newfilename'}) {   if(!&decompress2($r, $uname, $dir, $main)) {
       return ;
    }
    $dest = $dir."/.";
       } elsif ($env{'form.action'} eq 'rename' ||
        $env{'form.action'} eq 'move') {
    if($env{'form.newfilename'}) {
     if (!defined($dir)) {      if (!defined($dir)) {
  $fn=~m:^(.*)/:;   $fn=~m:^(.*)/:;
  $dir=$1;   $dir=$1; 
     }      }
     if(!&Rename2($r, $uname, $dir, $fn, $ENV{'form.newfilename'})) {      if(!&Rename2($r, $uname, $dir, $fn, $env{'form.newfilename'})) {
  return;   return;
     }      }
     $dest = &url($ENV{'form.newfilename'});      $dest = $dir."/";
       $dest_newname = $env{'form.newfilename'};
       $env{'form.newfilename'} =~ /.+(\/.+$)/;
       $disp_newname = $1;
       $disp_newname =~ s/\///;
  }   }
     } elsif ($ENV{'form.action'} eq 'delete') {       } elsif ($env{'form.action'} eq 'delete') { 
  if(!&Delete2($r, $uname, $ENV{'form.newfilename'})) {   if(!&Delete2($r, $uname, $env{'form.newfilename'})) {
     return ;      return ;
  }   }
  # Once a resource is deleted, we just list the directory that   # Once a resource is deleted, we just list the directory that
  # previously held it.   # previously held it.
  #   #
  $dest = $dir."/."; # Parent dir.   $dest = $dir."/."; # Parent dir.
     } elsif ($ENV{'form.action'} eq 'copy') {       } elsif ($env{'form.action'} eq 'copy') { 
  if($ENV{'form.newfilename'}) {   if($env{'form.newfilename'}) {
     if(!&Copy2($r, $uname, $dir, $fn, $ENV{'form.newfilename'})) {      if(!&Copy2($r, $uname, $dir, $fn, $env{'form.newfilename'})) {
  return   return ;
  }      }
     $dest = $ENV{'form.newfilename'};      $dest = $env{'form.newfilename'};
              } else {
  } else {      $r->print('<p>'.&mt('No New filename specified').'</p></form>');
     $r->print('<p>No New filename specified</p></form>');  
     return;      return;
  }   }
   
     } elsif ($ENV{'form.action'} eq 'newdir') {      } elsif ($env{'form.action'} eq 'newdir') {
         my $newdir= $ENV{'form.newfilename'};          my $newdir= $env{'form.newfilename'};
  if(!&NewDir2($r, $uname, $newdir)) {   if(!&NewDir2($r, $uname, $newdir)) {
     return;      return;
  }   }
  $dest = $newdir."/"   $dest = $newdir."/";
       }
       if ( ($env{'form.action'} eq 'newdir') && ($env{'form.phase'} eq 'two') && ( ($env{'form.callingmode'} eq 'testbank') || ($env{'form.callingmode'} eq 'imsimport') ) ) {
    $r->print('<h3><a href="javascript:self.close()">'.&mt('Done').'</a></h3>');
       } else {
           if ($env{'form.action'} eq 'rename') {
               $r->print('<h3><a href="'.&url($dest).'">'.&mt('Return to Directory').'</a></h3>');
               $r->print('<h3><a href="'.&url($dest_newname).'">'.$disp_newname.'</a></h3>');
           } else {
       $r->print(&done(&url($dest)));
    }
     }      }
     $r->print('<h3><a href="'.&url($dest).'">Done</a></h3>');  
 }  }
   
 sub handler {  sub handler {
   
   $r=shift;      $r=shift;
   
       &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['decompress','action','filename','newfilename']);
   
   &Debug($r, "loncfile.pm - handler entered");      &Debug($r, "loncfile.pm - handler entered");
   &Debug($r, " filename: ".$ENV{'form.filename'});      &Debug($r, " filename: ".$env{'form.filename'});
   &Debug($r, " newfilename: ".$ENV{'form.newfilename'});      &Debug($r, " newfilename: ".$env{'form.newfilename'});
 #  #
 # Determine the root filename  # Determine the root filename
 # This could come in as "filename", which actually is a URL, or  # This could come in as "filename", which actually is a URL, or
 # as "qualifiedfilename", which is indeed a real filename in filesystem  # as "qualifiedfilename", which is indeed a real filename in filesystem
 #  #
   my $fn;      my $fn;
   
       if ($env{'form.filename'}) {
    &Debug($r, "test: $env{'form.filename'}");
    $fn=&unescape($env{'form.filename'});
    $fn=&URLToPath($fn);
       }  elsif($ENV{'QUERY_STRING'} && $env{'form.phase'} ne 'two') {  
    #Just hijack the script only the first time around to inject the
    #correct information for further processing
    $fn=&unescape($env{'form.decompress'});
    $fn=&URLToPath($fn);
    $env{'form.action'}="decompress";
       } elsif ($env{'form.qualifiedfilename'}) {
    $fn=$env{'form.qualifiedfilename'};
       } else {
    &Debug($r, "loncfile::handler - no form.filename");
    $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}.
          ' unspecified filename for cfile', $r->filename); 
    return HTTP_NOT_FOUND;
       }
   
   if ($ENV{'form.filename'}) {      unless ($fn) { 
       $fn=&Apache::lonnet::unescape($ENV{'form.filename'});   &Debug($r, "loncfile::handler - doctored url is empty");
       $fn=&URLToPath($fn);   $r->log_reason($env{'user.name'}.' at '.$env{'user.domain'}.
   } elsif ($ENV{'form.qualifiedfilename'}) {         ' trying to cfile non-existing file', $r->filename); 
       $fn=$ENV{'form.qualifiedfilename'};   return HTTP_NOT_FOUND;
   } else {      } 
       &Debug($r, "loncfile::handler - no form.filename");  
      $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.  
          ' unspecified filename for cfile', $r->filename);   
      return HTTP_NOT_FOUND;  
   }  
   
   unless ($fn) {   
       &Debug($r, "loncfile::handler - doctored url is empty");  
      $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.  
          ' trying to cfile non-existing file', $r->filename);   
      return HTTP_NOT_FOUND;  
   }   
   
 # ----------------------------------------------------------- Start page output  # ----------------------------------------------------------- Start page output
   my $uname;      my $uname;
   my $udom;      my $udom;
   
   ($uname,$udom)=  
     &Apache::loncacc::constructaccess($fn,$r->dir_config('lonDefDomain'));  
   &Debug($r,   
  "loncfile::handler constructaccess uname = $uname domain = $udom");  
   unless (($uname) && ($udom)) {  
      $r->log_reason($uname.' at '.$udom.  
          ' trying to manipulate file '.$ENV{'form.filename'}.  
          ' ('.$fn.') - not authorized',   
          $r->filename);   
      return HTTP_NOT_ACCEPTABLE;  
   }  
   
       ($uname,$udom)=
    &Apache::loncacc::constructaccess($fn,$r->dir_config('lonDefDomain'));
       &Debug($r, 
      "loncfile::handler constructaccess uname = $uname domain = $udom");
       unless (($uname) && ($udom)) {
    $r->log_reason($uname.' at '.$udom.
          ' trying to manipulate file '.$env{'form.filename'}.
          ' ('.$fn.') - not authorized', 
          $r->filename); 
    return HTTP_NOT_ACCEPTABLE;
       }
   
   $r->content_type('text/html');  
   $r->send_http_header;  
   
   $r->print('<html><head><title>LON-CAPA Construction Space</title></head>');      &Apache::loncommon::content_type($r,'text/html');
       $r->send_http_header;
   
   $r->print(&Apache::loncommon::bodytag('Construction Space File Operation'));      my (%loaditem,$js);
   
       if ( ($env{'form.action'} eq 'newdir') && ($env{'form.phase'} eq 'two') && ( ($env{'form.callingmode'} eq 'testbank') || ($env{'form.callingmode'} eq 'imsimport') ) ) {
    my $newdirname = $env{'form.newfilename'};
    $js = qq|
   <script type="text/javascript">
   function writeDone() {
       window.focus();
       opener.document.info.newdir.value = "$newdirname";
       setTimeout("self.close()",10000);
   }
     </script>
   |;
    $loaditem{'onload'} = "writeDone()";
       }
       
       $r->print(&Apache::loncommon::start_page('Construction Space File Operation',
        $js,
        {'add_entries' => \%loaditem,}));
       
   $r->print('<h3>Location: '.&display($fn).'</h3>');      $r->print('<h3>'.&mt('Location').': '.&display($fn).'</h3>');
       
   if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})) {      if (($uname ne $env{'user.name'}) || ($udom ne $env{'user.domain'})) {
           $r->print('<h3><font color="red">Co-Author: '.$uname.' at '.$udom.          $r->print('<p class="LC_warning">'
                '</font></h3>');                   .&mt('Co-Author [_1]',$uname.':'.$udom)
   }                   .'</p>'
           );
       }
   &Debug($r, "loncfile::handler Form action is $ENV{'form.action'} ");  
   if ($ENV{'form.action'} eq 'delete') {  
             &Debug($r, "loncfile::handler Form action is $env{'form.action'} ");
       $r->print('<h3>Delete</h3>');      if ($env{'form.action'} eq 'delete') {
   } elsif ($ENV{'form.action'} eq 'rename') {        $r->print('<h3>'.&mt('Delete').'</h3>');
       $r->print('<h3>Rename</h3>');      } elsif ($env{'form.action'} eq 'rename') {
   } elsif ($ENV{'form.action'} eq 'newdir') {   $r->print('<h3>'.&mt('Rename').'</h3>');
       $r->print('<h3>New Directory</h3>');      } elsif ($env{'form.action'} eq 'move') {
   } elsif ($ENV{'form.action'} eq 'copy') {   $r->print('<h3>'.&mt('Move').'</h3>');
       $r->print('<h3>Copy</h3>');      } elsif ($env{'form.action'} eq 'newdir') {
   } elsif ($ENV{'form.action'} eq 'newfile' ||   $r->print('<h3>'.&mt('New Directory').'</h3>');
    $ENV{'form.action'} eq 'newhtmlfile' ||      } elsif ($env{'form.action'} eq 'decompress') {
    $ENV{'form.action'} eq 'newproblemfile' ||   $r->print('<h3>'.&mt('Decompress').'</h3>');
            $ENV{'form.action'} eq 'newpagefile' ||      } elsif ($env{'form.action'} eq 'copy') {
            $ENV{'form.action'} eq 'newsequencefile' ||   $r->print('<h3>'.&mt('Copy').'</h3>');
    $ENV{'form.action'} eq 'newrightsfile' ||      } elsif ($env{'form.action'} eq 'newfile' ||
    $ENV{'form.action'} eq 'newstyfile' ||       $env{'form.action'} eq 'newhtmlfile' ||
            $ENV{'form.action'} eq 'Select Action' ) {       $env{'form.action'} eq 'newproblemfile' ||
       $r->print('<h3>New Resource</h3>');       $env{'form.action'} eq 'newpagefile' ||
   } else {       $env{'form.action'} eq 'newsequencefile' ||
      $r->print('<p>Unknown Action '.$ENV{'form.action'}.' </p></body></html>');       $env{'form.action'} eq 'newrightsfile' ||
      return OK;         $env{'form.action'} eq 'newstyfile' ||
   }       $env{'form.action'} eq 'newtaskfile' ||
   if ($ENV{'form.phase'} eq 'two') {               $env{'form.action'} eq 'newlibraryfile' ||
       &Debug($r, "loncfile::handler  entering phase2");       $env{'form.action'} eq 'Select Action' ) {
       &phasetwo($r,$fn,$uname,$udom);   $r->print('<h3>'.&mt('New Resource').'</h3>');
   } else {      } else {
       &Debug($r, "loncfile::handler  entering phase1");   $r->print('<p>'.&mt('Unknown Action').' '.$env{'form.action'}.' </p>'.
       &phaseone($r,$fn,$uname,$udom);    &Apache::loncommon::end_page());
   }   return OK;  
       }
       if ($env{'form.phase'} eq 'two') {
    &Debug($r, "loncfile::handler  entering phase2");
    &phasetwo($r,$fn,$uname,$udom);
       } else {
    &Debug($r, "loncfile::handler  entering phase1");
    &phaseone($r,$fn,$uname,$udom);
       }
   
   $r->print('</body></html>');      $r->print(&Apache::loncommon::end_page());
   return OK;        return OK;  
 }  }
   
 1;  1;

Removed from v.1.41  
changed lines
  Added in v.1.98


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.