Diff for /loncom/publisher/loncfile.pm between versions 1.40 and 1.44

version 1.40, 2003/08/26 19:17:02 version 1.44, 2003/11/19 14:57:32
Line 73  use Apache::Log (); Line 73  use Apache::Log ();
 use Apache::lonnet;  use Apache::lonnet;
 use Apache::loncommon();  use Apache::loncommon();
   
 my $DEBUG=0;  my $DEBUG=2;
 my $r; # Needs to be global for some stuff RF.  my $r; # Needs to be global for some stuff RF.
   
 =pod  =pod
Line 110  sub Debug { Line 110  sub Debug {
   # Put out the indicated message butonly if DEBUG is true.    # Put out the indicated message butonly if DEBUG is true.
       
   if ($DEBUG) {    if ($DEBUG) {
     $log->debug($message);     $r->log_reason($message);
   }    }
 }  }
   
 =pod  =pod
   
   =item checksuffix($old, $new)
           
     Determine if a resource filename suffix (the stuff after the .) would change
   as a result of this operation.
   
    Parameters:
   
   =over 4
   
   =item  $old   = string [in]  Previous filename.
   
   =item  $new   = string [in]  Resultant filename.
   
   =back
   
   =cut
   
   =pod
   
 =item URLToPath($url)  =item URLToPath($url)
   
   Convert a URL to a file system path.    Convert a URL to a file system path.
Line 168  sub url { Line 187  sub url {
   
 sub display {  sub display {
     my $fn=shift;      my $fn=shift;
     $fn=~s/^\/home\/(\w+)\/public\_html//;      $fn=~s-^/home/(\w+)/public_html-/priv/$1-;
     return '<tt>'.$fn.'</tt>';      return '<tt>'.$fn.'</tt>';
 }  }
   
Line 387  sub Rename1 { Line 406  sub Rename1 {
   
     if(-e $fn) {      if(-e $fn) {
  if($newfilename) {   if($newfilename) {
       # is dest a dir
       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 399  sub Rename1 { Line 422  sub Rename1 {
     if (-d $fn) {      if (-d $fn) {
  $newfilename=~s/\/[^\/]+\/([^\/]+)$/\/$1/;   $newfilename=~s/\/[^\/]+\/([^\/]+)$/\/$1/;
     }      }
       $newfilename=~s://+:/:g; # remove duplicate /
       while ($newfilename=~m:/\.\./:) {
    $newfilename=~ s:/[^/]+/\.\./:/:g; #remove dir/..
       }
     my $return=&exists($user, $domain, $newfilename);      my $return=&exists($user, $domain, $newfilename);
     $request->print($return);      $request->print($return);
     if ($return =~/^Error:/) {      if ($return =~/^Error:/) {
Line 485  Parameters: Line 512  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 $return=&exists($user, $domain, $newfilename);
    $request->print($return);
    if ($return =~/^Error:/) {
       $request->print('<br /><a href="'.&url($fn).'">Cancel</a>');
       return;
    }
    $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>');
     }      }
     $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 559  sub NewDir1 Line 598  sub NewDir1
   }    }
 }  }
   
   
   sub Decompress1 {
      my ($request, $user, $domain, $fn) = @_;
      if( -e $fn) {
       $request->print('<input type="hidden" name="newfilename" value="'.$fn.'"/>');
       $request->print('<p>Decompress '.&display($fn).'?</p>');
       &CloseForm1($request, $fn);
       } else {
           $request->print('<p>No such file: '.&display($fn).'</p></form>');
          }
   }
 =pod  =pod
   
 =item NewFile1  =item NewFile1
Line 667  sub phaseone { Line 717  sub phaseone {
       
   my $newfilename=&cleanDest($r,$ENV{'form.newfilename'});    my $newfilename=&cleanDest($r,$ENV{'form.newfilename'});
   $newfilename=&relativeDest($fn,$newfilename,$uname);    $newfilename=&relativeDest($fn,$newfilename,$uname);
    &Debug($r, "Newfile: $newfilename");
   $r->print('<form action="/adm/cfile" method="post">'.    $r->print('<form action="/adm/cfile" method="post">'.
       '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'.        '<input type="hidden" name="qualifiedfilename" value="'.$fn.'" />'.
       '<input type="hidden" name="phase" value="two" />'.        '<input type="hidden" name="phase" value="two" />'.
Line 677  sub phaseone { Line 727  sub phaseone {
       &Rename1($r, $uname, $udom, $fn, $newfilename);        &Rename1($r, $uname, $udom, $fn, $newfilename);
   } elsif ($ENV{'form.action'} eq 'delete') {     } elsif ($ENV{'form.action'} eq 'delete') { 
       &Delete1($r, $uname, $udom, $fn);        &Delete1($r, $uname, $udom, $fn);
     } elsif ($ENV{'form.action'} eq 'decompress') {
    &Apache::lonnet::appenv('cgi.path' => $newfilename); 
         &Decompress1($r, $uname, $udom, $fn);
   } elsif ($ENV{'form.action'} eq 'copy') {     } elsif ($ENV{'form.action'} eq 'copy') { 
       if($newfilename) {        if($newfilename) {
   &Copy1($r, $uname, $udom, $fn, $newfilename);    &Copy1($r, $uname, $udom, $fn, $newfilename);
Line 758  sub Rename2 { Line 811  sub Rename2 {
       my $tmp2=$nRN.'.meta';        my $tmp2=$nRN.'.meta';
       if(-e $tmp1){        if(-e $tmp1){
   unless(rename($tmp1,$tmp2)){ }    unless(rename($tmp1,$tmp2)){ }
       }else if(-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)){ }
       }else if(-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)){ }
       }else if(-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)){ }
       }else if(-e $tmp2){        } elsif(-e $tmp2){
   unlink $tmp2;    unlink $tmp2;
       }        }
   } else {    } else {
Line 915  sub NewDir2 { Line 968  sub NewDir2 {
   }    }
   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
   
 =item phasetwo($r, $fn, $uname, $udom)  =item phasetwo($r, $fn, $uname, $udom)
Line 981  sub phasetwo { Line 1043  sub phasetwo {
    "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 .= '.';
    $main .= $suffix;
       if(!&decompress2($r, $uname, $dir, $main)) {
    return ;
    }
       $dest = $dir."/.";
        
   
       } elsif ($ENV{'form.action'} eq 'rename') { # Rename.
  if($ENV{'form.newfilename'}) {   if($ENV{'form.newfilename'}) {
     if (!defined($dir)) {      if (!defined($dir)) {
  $fn=~m:^(.*)/:;   $fn=~m:^(.*)/:;
Line 1004  sub phasetwo { Line 1074  sub phasetwo {
     } 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'};
             
Line 1039  sub handler { Line 1109  sub handler {
   my $fn;    my $fn;
   
   if ($ENV{'form.filename'}) {    if ($ENV{'form.filename'}) {
   
    &Debug($r, "test: $ENV{'form.filename'}");
       $fn=&Apache::lonnet::unescape($ENV{'form.filename'});        $fn=&Apache::lonnet::unescape($ENV{'form.filename'});
       $fn=&URLToPath($fn);        $fn=&URLToPath($fn);
   } elsif ($ENV{'form.qualifiedfilename'}) {    }  
       elsif($ENV{'QUERY_STRING'} && $ENV{'form.phase'} ne 'two') {
     &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['decompress']);
    $fn=&Apache::lonnet::unescape($ENV{'form.decompress'});
    $fn=&URLToPath($fn);
    $ENV{'form.action'}="decompress";
     }
   
       elsif ($ENV{'form.qualifiedfilename'}) {
       $fn=$ENV{'form.qualifiedfilename'};        $fn=$ENV{'form.qualifiedfilename'};
   } else {    } else {
       &Debug($r, "loncfile::handler - no form.filename");        &Debug($r, "loncfile::handler - no form.filename");
Line 1098  sub handler { Line 1178  sub handler {
       $r->print('<h3>Rename</h3>');        $r->print('<h3>Rename</h3>');
   } elsif ($ENV{'form.action'} eq 'newdir') {    } elsif ($ENV{'form.action'} eq 'newdir') {
       $r->print('<h3>New Directory</h3>');        $r->print('<h3>New Directory</h3>');
     } elsif ($ENV{'form.action'} eq 'decompress') {
         $r->print('<h3>Decompress</h3>');
   } elsif ($ENV{'form.action'} eq 'copy') {    } elsif ($ENV{'form.action'} eq 'copy') {
       $r->print('<h3>Copy</h3>');        $r->print('<h3>Copy</h3>');
   } elsif ($ENV{'form.action'} eq 'newfile' ||    } elsif ($ENV{'form.action'} eq 'newfile' ||

Removed from v.1.40  
changed lines
  Added in v.1.44


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