Diff for /loncom/publisher/loncfile.pm between versions 1.54 and 1.55

version 1.54, 2004/05/26 22:15:19 version 1.55, 2004/05/26 22:25:38
Line 102  my $r;    # Needs to be global for some Line 102  my $r;    # Needs to be global for some
   
 sub Debug {  sub Debug {
       
   # Marshall the parameters.      # Marshall the parameters.
       
   my $r       = shift;      my $r       = shift;
   my $log     = $r->log;      my $log     = $r->log;
   my $message = shift;      my $message = shift;
       
   # Put out the indicated message butonly if DEBUG is true.      # Put out the indicated message butonly if DEBUG is true.
       
   if ($DEBUG) {      if ($DEBUG) {
   $r->log_reason($message);   $r->log_reason($message);
   }      }
 }  }
   
 =pod  =pod
Line 151  Global References Line 151  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/^http\:\/\/[^\/]+//;
   $Url=~ s/^\///;      $Url=~ s/^\///;
   $Url=~ s/(\~|priv\/)(\w+)\//\/home\/$2\/public_html\//;      $Url=~ s/(\~|priv\/)(\w+)\//\/home\/$2\/public_html\//;
   &Debug($r, "Returning $Url \n");      &Debug($r, "Returning $Url \n");
   return $Url;      return $Url;
 }  }
   
 sub url {  sub url {
Line 228  Returns: Line 228  Returns:
 =cut  =cut
   
 sub exists {  sub exists {
   my ($user, $domain, $construct) = @_;      my ($user, $domain, $construct) = @_;
   my $published=$construct;      my $published=$construct;
   $published=~      $published=~
 s/^\/home\/$user\/public\_html\//\/home\/httpd\/html\/res\/$domain\/$user\//;   s/^\/home\/$user\/public\_html\//\/home\/httpd\/html\/res\/$domain\/$user\//;
   my $result='';          my $result='';    
   if ( -d $construct ) {      if ( -d $construct ) {
       return &mt('Error: destination for operation is an existing directory.');   return &mt('Error: destination for operation is an existing directory.');
   }      }
   if ( -e $published) {      if ( -e $published) {
       $result.='<p><font color="red">'.&mt('Warning: target file exists, and has been published!').'</font></p>';   $result.='<p><font color="red">'.&mt('Warning: target file exists, and has been published!').'</font></p>';
   } elsif ( -e $construct) {      } elsif ( -e $construct) {
       $result.='<p><font color="red">'.&mt('Warning: target file exists!').'</font></p>';   $result.='<p><font color="red">'.&mt('Warning: target file exists!').'</font></p>';
   }      }
   return $result;      return $result;
   
 }  }
   
 =pod  =pod
Line 334  Parameters: Line 333  Parameters:
 =cut  =cut
   
 sub CloseForm1 {  sub CloseForm1 {
    my ($request,  $fn) = @_;      my ($request,  $fn) = @_;
    $request->print('<p><input type="submit" value="'.&mt('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="'.&mt('Cancel').'" /></p></form>');      '" method="POST"><p><input type="submit" value="'.&mt('Cancel').'" /></p></form>');
 }  }
   
   
Line 366  Parameters: Line 365  Parameters:
 =cut  =cut
   
 sub CloseForm2 {  sub CloseForm2 {
   my ($request, $user, $fn) = @_;      my ($request, $user, $fn) = @_;
   $request->print('<h3><a href="'.&url($fn).'/">'.&mt('Done').'</a></h3>');      $request->print('<h3><a href="'.&url($fn).'/">'.&mt('Done').'</a></h3>');
 }  }
   
 =pod  =pod
Line 429  sub Rename1 { Line 428  sub Rename1 {
  $newfilename=~/\.(\w+)$/;   $newfilename=~/\.(\w+)$/;
  if (&Apache::loncommon::fileembstyle($1) eq 'ssi') {   if (&Apache::loncommon::fileembstyle($1) eq 'ssi') {
     $request->print('<br /><font color="red">'.      $request->print('<br /><font color="red">'.
  &mt('Cannot change MIME type of a directory').      &mt('Cannot change MIME type of a directory').
     '</font>'.      '</font>'.
  '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');      '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
     return;      return;
  }   }
  $newfilename=~s/\/[^\/]+\/([^\/]+)$/\/$1/;   $newfilename=~s/\/[^\/]+\/([^\/]+)$/\/$1/;
Line 472  sub Rename1 { Line 471  sub Rename1 {
     }      }
           
 }  }
   
 =pod  =pod
   
 =item Delete1  =item Delete1
Line 497  Parameters: Line 497  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.'"/>');
     unless (&obsolete_unpub($user,$domain,$fn)) {   unless (&obsolete_unpub($user,$domain,$fn)) {
  $request->print('<h3>'.&mt('Cannot delete non-obsolete published file').'</h3>'.      $request->print('<h3>'.&mt('Cannot delete non-obsolete published file').'</h3>'.
  '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');      '<br /><a href="'.&url($fn).'">'.&mt('Cancel').'</a>');
  return;      return;
    }
    $request->print('<p>'.&mt('Delete').' '.&display($fn).'?</p>');
    &CloseForm1($request, $fn);
       } else {
    $request->print('<p>'.&mt('No such file').': '.&display($fn).'</p></form>');
     }      }
     $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 613  causes the newdir operation to transitio Line 613  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, $mode) = @_;  
       my $result=&exists($username,$domain,$newfilename);
   my $result=&exists($username,$domain,$newfilename);      if ($result) {
   if ($result) {   $request->print('<font color="red">'.$result.'</font></form>');
     $request->print('<font color="red">'.$result.'</font></form>');      } else {
   } else {   if ($mode eq 'testbank') {
     if ($mode eq 'testbank') {      $request->print('<input type="hidden" name="callingmode" value="testbank">');
         $request->print('<input type="hidden" name="callingmode" value="testbank">');   } elsif ($mode eq 'imsimport') {
     } elsif ($mode eq 'imsimport') {      $request->print('<input type="hidden" name="callingmode" value="imsimport">');
         $request->print('<input type="hidden" name="callingmode" value="imsimport">');   }
     }   $request->print('<input type="hidden" name="newfilename" value="'.
     $request->print('<input type="hidden" name="newfilename" value="'.   $newfilename.'" /><p>'.&mt('Make new directory').' '.
     $newfilename.'" /><p>'.&mt('Make new directory').' '.   &display($newfilename).'?</p>');
     &display($newfilename).'?</p>');   &CloseForm1($request, $fn);
     &CloseForm1($request, $fn);      }
   }  
 }  }
   
   
 sub Decompress1 {  sub Decompress1 {
    my ($request, $user, $domain, $fn) = @_;      my ($request, $user, $domain, $fn) = @_;
    if( -e $fn) {      if( -e $fn) {
     $request->print('<input type="hidden" name="newfilename" value="'.$fn.'"/>');      $request->print('<input type="hidden" name="newfilename" value="'.$fn.'"/>');
     $request->print('<p>'.&mt('Decompress').' '.&display($fn).'?</p>');      $request->print('<p>'.&mt('Decompress').' '.&display($fn).'?</p>');
     &CloseForm1($request, $fn);      &CloseForm1($request, $fn);
     } else {      } else {
         $request->print('<p>'.&mt('No such file').': '.&display($fn).'</p></form>');   $request->print('<p>'.&mt('No such file').': '.&display($fn).'</p></form>');
        }      }
 }  }
   
 =pod  =pod
   
 =item NewFile1  =item NewFile1
Line 684  button which returns you to the driector Line 684  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) = @_;
   
Line 748  performed and reported to the user. Line 747  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 $newfilename=&cleanDest($r,$ENV{'form.newfilename'});
   $newfilename=&relativeDest($fn,$newfilename,$uname);      $newfilename=&relativeDest($fn,$newfilename,$uname);
   $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" />'.
       '<input type="hidden" name="action" value="'.$ENV{'form.action'}.'" />');        '<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, 'rename');   &Rename1($r, $uname, $udom, $fn, $newfilename, 'rename');
   } elsif ($ENV{'form.action'} eq 'move') {      } elsif ($ENV{'form.action'} eq 'move') {
       &Rename1($r, $uname, $udom, $fn, $newfilename, 'move');   &Rename1($r, $uname, $udom, $fn, $newfilename, 'move');
   } 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') {      } elsif ($ENV{'form.action'} eq 'decompress') {
       &Decompress1($r, $uname, $udom, $fn);   &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);
       } else {   } else {
   $r->print('<p>'.&mt('No new filename specified.').'</p></form>');      $r->print('<p>'.&mt('No new filename specified.').'</p></form>');
       }   }
   } elsif ($ENV{'form.action'} eq 'newdir') {      } elsif ($ENV{'form.action'} eq 'newdir') {
       my $mode = '';   my $mode = '';
       if (exists($ENV{'form.callingmode'}) ) {   if (exists($ENV{'form.callingmode'}) ) {
           $mode = $ENV{'form.callingmode'};      $mode = $ENV{'form.callingmode'};
       }      }   
       &NewDir1($r, $uname, $udom, $fn, $newfilename, $mode);   &NewDir1($r, $uname, $udom, $fn, $newfilename, $mode);
   }  elsif ($ENV{'form.action'} eq 'newfile' ||      }  elsif ($ENV{'form.action'} eq 'newfile' ||
     $ENV{'form.action'} eq 'newhtmlfile' ||        $ENV{'form.action'} eq 'newhtmlfile' ||
     $ENV{'form.action'} eq 'newproblemfile' ||        $ENV{'form.action'} eq 'newproblemfile' ||
             $ENV{'form.action'} eq 'newpagefile' ||        $ENV{'form.action'} eq 'newpagefile' ||
             $ENV{'form.action'} eq 'newsequencefile' ||        $ENV{'form.action'} eq 'newsequencefile' ||
             $ENV{'form.action'} eq 'newrightsfile' ||        $ENV{'form.action'} eq 'newrightsfile' ||
             $ENV{'form.action'} eq 'newstyfile' ||        $ENV{'form.action'} eq 'newstyfile' ||
             $ENV{'form.action'} eq 'Select Action') {        $ENV{'form.action'} eq 'Select Action') {
       if ($newfilename) {   if ($newfilename) {
   &NewFile1($r, $uname, $udom, $fn, $newfilename);      &NewFile1($r, $uname, $udom, $fn, $newfilename);
       } else {   } else {
   $r->print('<p>'.&mt('No new filename specified.').'</p></form>');      $r->print('<p>'.&mt('No new filename specified.').'</p></form>');
       }   }
   }      }
 }  }
   
 =pod  =pod
Line 829  Returns: Line 828  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">'.&mt('Error').': '.$!.'</font>');      $request->print('<font color="red">'.&mt('Error').': '.$!.'</font>');
   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> ".&mt('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 910  Returns: Line 910  Returns:
 =cut  =cut
   
 sub Delete2 {  sub Delete2 {
   my ($request, $user, $filename) = @_;      my ($request, $user, $filename) = @_;
   if(opendir DIR, $filename) {       if(opendir DIR, $filename) { 
     my @files=readdir(DIR);   my @files=readdir(DIR);
     shift @files; shift @files; # takes off . and ..   shift @files; shift @files; # takes off . and ..
     if(@files) {    if(@files) { 
       $request->print('<font color="red"> '.&mt('Error: Directory Non Empty').'</font>');       $request->print('<font color="red"> '.&mt('Error: Directory Non Empty').'</font>'); 
       return 0;      return 0;
     } else {      } else {   
       if(-e $filename) {      if(-e $filename) {
         unless(rmdir($filename)) {   unless(rmdir($filename)) {
           $request->print('<font color="red">'.&mt('Error').': '.$!.'</font>');      $request->print('<font color="red">'.&mt('Error').': '.$!.'</font>');
           return 0;      return 0;
         }   }
       } else {      } else {
         $request->print('<p> '.&mt('No such file').'. </p></form>');   $request->print('<p> '.&mt('No such file').'. </p></form>');
         return 0;   return 0;
       }      }
      }   }
    } else {  
     if(-e $filename) {  
       unless(unlink($filename)) {  
         $request->print('<font color="red">'.&mt('Error').': '.$!.'</font>');  
         return 0;  
       }  
     } else {      } else {
       $request->print('<p> '.&mt('No such file').'. </p></form>');   if(-e $filename) {
       return 0;      unless(unlink($filename)) {
   }   $request->print('<font color="red">'.&mt('Error').': '.$!.'</font>');
    return 0;
       }
    } else {
       $request->print('<p> '.&mt('No such file').'. </p></form>');
       return 0;
  }   }
   return 1;      }
       return 1;
 }  }
   
 =pod  =pod
Line 990  sub Copy2 { Line 990  sub Copy2 {
     }      }
     return 1;      return 1;
 }  }
   
 =pod  =pod
   
 =item NewDir2($request, $user, $newdirectory)  =item NewDir2($request, $user, $newdirectory)
Line 1013  Returns 0 - failure 1 - success. Line 1014  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">'.&mt('Error').': '.$!.'</font>');   $request->print('<font color="red">'.&mt('Error').': '.$!.'</font>');
     return 0;   return 0;
   }      }
   unless(chmod(02770, ($newdirectory))) {      unless(chmod(02770, ($newdirectory))) {
       $request->print('<font color="red"> '.&mt('Error').': '.$!.'</font>');   $request->print('<font color="red"> '.&mt('Error').': '.$!.'</font>');
       return 0;   return 0;
   }      }
   return 1;      return 1;
 }  }
   
 sub decompress2 {  sub decompress2 {
  my ($r, $user, $dir, $file) = @_;      my ($r, $user, $dir, $file) = @_;
  &Apache::lonnet::appenv('cgi.file' => $file);      &Apache::lonnet::appenv('cgi.file' => $file);
  &Apache::lonnet::appenv('cgi.dir' => $dir);      &Apache::lonnet::appenv('cgi.dir' => $dir);
  my $result=&Apache::lonnet::ssi_body('/cgi-bin/decompress.pl');      my $result=&Apache::lonnet::ssi_body('/cgi-bin/decompress.pl');
  $r->print($result);      $r->print($result);
  &Apache::lonnet::delenv('cgi.file');      &Apache::lonnet::delenv('cgi.file');
  &Apache::lonnet::delenv('cgi.dir');      &Apache::lonnet::delenv('cgi.dir');
  return 1;      return 1;
 }  }
   
 =pod  =pod
   
 =item phasetwo($r, $fn, $uname, $udom)  =item phasetwo($r, $fn, $uname, $udom)
Line 1087  sub phasetwo { Line 1090  sub phasetwo {
     }      }
     my $dest;                   # On success this is where we'll go.      my $dest;                   # On success this is where we'll go.
           
     &Debug($r,       &Debug($r,"loncfile::phase2 dir = $dir main = $main suffix = $suffix");
    "loncfile::phase2 dir = $dir main = $main suffix = $suffix");      &Debug($r,"    newfilename = ".$ENV{'form.newfilename'});
     &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 'decompress') { 
  $main .= '.';   $main .= '.';
  $main .= $suffix;   $main .= $suffix;
     if(!&decompress2($r, $uname, $dir, $main)) {   if(!&decompress2($r, $uname, $dir, $main)) {
  return ;      return ;
  }   }
     $dest = $dir."/.";   $dest = $dir."/.";
        
   
     } elsif ($ENV{'form.action'} eq 'rename') { # Rename.      } 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:^(.*)/:;
  $dir=$1;   $dir=$1; 
     }      }
     if(!&Rename2($r, $uname, $dir, $fn, $ENV{'form.newfilename'})) {      if(!&Rename2($r, $uname, $dir, $fn, $ENV{'form.newfilename'})) {
  return;   return;
Line 1133  sub phasetwo { Line 1130  sub phasetwo {
  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>'.&mt('No New filename specified').'</p></form>');
     return;      return;
  }   }
Line 1146  sub phasetwo { Line 1142  sub phasetwo {
  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') ) ) {      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>');   $r->print('<h3><a href="javascript:self.close()">'.&mt('Done').'</a></h3>');
     } else {      } else {
          $r->print('<h3><a href="'.&url($dest).'">'.&mt('Done').'</a></h3>');   $r->print('<h3><a href="'.&url($dest).'">'.&mt('Done').'</a></h3>');
     }      }
 }  }
   
 sub handler {  sub handler {
   
   $r=shift;      $r=shift;
   
   
   &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'}) {      if ($ENV{'form.filename'}) {
   
  &Debug($r, "test: $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{'QUERY_STRING'} && $ENV{'form.phase'} ne 'two') {  
  #Just hijack the script only the first time around to inject the correct information for further processing   #Just hijack the script only the first time around to inject the
     elsif($ENV{'QUERY_STRING'} && $ENV{'form.phase'} ne 'two') {   #correct information for further processing
   &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['decompress']);   &Apache::loncommon::get_unprocessed_cgi($ENV{'QUERY_STRING'},['decompress']);
  $fn=&Apache::lonnet::unescape($ENV{'form.decompress'});   $fn=&Apache::lonnet::unescape($ENV{'form.decompress'});
  $fn=&URLToPath($fn);   $fn=&URLToPath($fn);
  $ENV{'form.action'}="decompress";   $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;
       }
   
     elsif ($ENV{'form.qualifiedfilename'}) {      unless ($fn) { 
       $fn=$ENV{'form.qualifiedfilename'};   &Debug($r, "loncfile::handler - doctored url is empty");
   } else {   $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.
       &Debug($r, "loncfile::handler - no form.filename");         ' trying to cfile non-existing file', $r->filename); 
      $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.   return HTTP_NOT_FOUND;
          ' 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::loncommon::content_type($r,'text/html');
     &Apache::loncacc::constructaccess($fn,$r->dir_config('lonDefDomain'));      $r->send_http_header;
   &Debug($r,   
  "loncfile::handler constructaccess uname = $uname domain = $udom");      if ( ($ENV{'form.action'} eq 'newdir') && ($ENV{'form.phase'} eq 'two') && ( ($ENV{'form.callingmode'} eq 'testbank') || ($ENV{'form.callingmode'} eq 'imsimport') ) ) {
   unless (($uname) && ($udom)) {   my $newdirname = $ENV{'form.newfilename'};
      $r->log_reason($uname.' at '.$udom.   $r->print('<html><head><title>LON-CAPA Construction Space</title><script language="Javascript">');
          ' trying to manipulate file '.$ENV{'form.filename'}.   $r->print(qq|
          ' ('.$fn.') - not authorized',   
          $r->filename);   
      return HTTP_NOT_ACCEPTABLE;  
   }  
   
   
   &Apache::loncommon::content_type($r,'text/html');  
   $r->send_http_header;  
   
   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'};  
       $r->print('<html><head><title>LON-CAPA Construction Space</title><script language="Javascript">');  
       $r->print(qq|  
 function writeDone() {  function writeDone() {
     var winName = window.opener      var winName = window.opener
     window.focus();      window.focus();
Line 1232  function writeDone() { Line 1225  function writeDone() {
 }  }
   </script>    </script>
   </head>|);    </head>|);
       my $loaditem = 'onLoad="writeDone()"';   my $loaditem = 'onLoad="writeDone()"';
       $r->print(&Apache::loncommon::bodytag('Construction Space File Operation','',$loaditem));   $r->print(&Apache::loncommon::bodytag('Construction Space File Operation','',$loaditem));
   } else {      } else {
       $r->print('<html><head><title>LON-CAPA Construction Space</title></head>');   $r->print('<html><head><title>LON-CAPA Construction Space</title></head>');
       $r->print(&Apache::loncommon::bodytag('Construction Space File Operation'));   $r->print(&Apache::loncommon::bodytag('Construction Space File Operation'));
   }      }
   
       
   $r->print('<h3>'.&mt('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">'.&mt('Co-Author').': '.$uname.' at '.$udom.   $r->print('<h3><font color="red">'.&mt('Co-Author').': '.$uname.' at '.$udom.
                '</font></h3>');    '</font></h3>');
   }      }
   
   
   &Debug($r, "loncfile::handler Form action is $ENV{'form.action'} ");      &Debug($r, "loncfile::handler Form action is $ENV{'form.action'} ");
   if ($ENV{'form.action'} eq 'delete') {      if ($ENV{'form.action'} eq 'delete') {
               $r->print('<h3>'.&mt('Delete').'</h3>');
       $r->print('<h3>'.&mt('Delete').'</h3>');      } elsif ($ENV{'form.action'} eq 'rename') {
   } elsif ($ENV{'form.action'} eq 'rename') {   $r->print('<h3>'.&mt('Rename').'</h3>');
       $r->print('<h3>'.&mt('Rename').'</h3>');      } elsif ($ENV{'form.action'} eq 'move') {
   } elsif ($ENV{'form.action'} eq 'move') {   $r->print('<h3>'.&mt('Move').'</h3>');
       $r->print('<h3>'.&mt('Move').'</h3>');      } elsif ($ENV{'form.action'} eq 'newdir') {
   } elsif ($ENV{'form.action'} eq 'newdir') {   $r->print('<h3>'.&mt('New Directory').'</h3>');
       $r->print('<h3>'.&mt('New Directory').'</h3>');      } elsif ($ENV{'form.action'} eq 'decompress') {
   } elsif ($ENV{'form.action'} eq 'decompress') {   $r->print('<h3>'.&mt('Decompress').'</h3>');
       $r->print('<h3>'.&mt('Decompress').'</h3>');      } elsif ($ENV{'form.action'} eq 'copy') {
   } elsif ($ENV{'form.action'} eq 'copy') {   $r->print('<h3>'.&mt('Copy').'</h3>');
       $r->print('<h3>'.&mt('Copy').'</h3>');      } elsif ($ENV{'form.action'} eq 'newfile' ||
   } elsif ($ENV{'form.action'} eq 'newfile' ||       $ENV{'form.action'} eq 'newhtmlfile' ||
    $ENV{'form.action'} eq 'newhtmlfile' ||       $ENV{'form.action'} eq 'newproblemfile' ||
    $ENV{'form.action'} eq 'newproblemfile' ||       $ENV{'form.action'} eq 'newpagefile' ||
            $ENV{'form.action'} eq 'newpagefile' ||       $ENV{'form.action'} eq 'newsequencefile' ||
            $ENV{'form.action'} eq 'newsequencefile' ||       $ENV{'form.action'} eq 'newrightsfile' ||
    $ENV{'form.action'} eq 'newrightsfile' ||       $ENV{'form.action'} eq 'newstyfile' ||
    $ENV{'form.action'} eq 'newstyfile' ||       $ENV{'form.action'} eq 'Select Action' ) {
            $ENV{'form.action'} eq 'Select Action' ) {   $r->print('<h3>'.&mt('New Resource').'</h3>');
       $r->print('<h3>'.&mt('New Resource').'</h3>');      } else {
   } else {   $r->print('<p>'.&mt('Unknown Action').' '.$ENV{'form.action'}.' </p></body></html>');
      $r->print('<p>'.&mt('Unknown Action').' '.$ENV{'form.action'}.' </p></body></html>');   return OK;  
      return OK;        }
   }      if ($ENV{'form.phase'} eq 'two') {
   if ($ENV{'form.phase'} eq 'two') {   &Debug($r, "loncfile::handler  entering phase2");
       &Debug($r, "loncfile::handler  entering phase2");   &phasetwo($r,$fn,$uname,$udom);
       &phasetwo($r,$fn,$uname,$udom);      } else {
   } else {   &Debug($r, "loncfile::handler  entering phase1");
       &Debug($r, "loncfile::handler  entering phase1");   &phaseone($r,$fn,$uname,$udom);
       &phaseone($r,$fn,$uname,$udom);      }
   }  
   
   $r->print('</body></html>');      $r->print('</body></html>');
   return OK;        return OK;  
 }  }
   
 1;  1;

Removed from v.1.54  
changed lines
  Added in v.1.55


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