Diff for /loncom/publisher/loncfile.pm between versions 1.32 and 1.38

version 1.32, 2003/06/19 21:04:37 version 1.38, 2003/08/04 20:08:23
Line 33 Line 33
 #  #
 # http://www.lon-capa.org/  # http://www.lon-capa.org/
 #  #
 #  
 # (Handler to retrieve an old version of a file  
 #  
 # (Publication Handler  
 #   
 # (TeX Content Handler  
 #  
 # 05/29/00,05/30,10/11 Gerd Kortemeyer)  
 #  
 # 11/28,11/29,11/30,12/01,12/02,12/04,12/23 Gerd Kortemeyer  
 # 03/23 Guy Albertelli  
 # 03/24,03/29 Gerd Kortemeyer)  
 #  
 # 03/31,04/03,05/02,05/09,06/23,06/24 Gerd Kortemeyer)  
 #  
 # 06/23 Gerd Kortemeyer  
 # 05/07/02 Ron Fox:  
 #           - Added Debug log output so that I can trace what the heck this  
 #             undocumented thingy does.  
 # 05/28/02  Ron Fox:  
 #           - Started putting in pod in standard format.  
 =pod  =pod
   
 =head1 NAME  =head1 NAME
Line 92  use Apache::Constants qw(:common :http : Line 71  use Apache::Constants qw(:common :http :
 use Apache::loncacc;  use Apache::loncacc;
 use Apache::Log ();  use Apache::Log ();
 use Apache::lonnet;  use Apache::lonnet;
   use Apache::loncommon();
   
 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 172  Global References Line 152  Global References
 sub URLToPath {  sub URLToPath {
   my $Url = shift;    my $Url = shift;
   &Debug($r, "UrlToPath got: $Url");    &Debug($r, "UrlToPath got: $Url");
   $Url=~ s/^http\:\/\/[^\/]+\/\~(\w+)/\/home\/$1\/public_html/;    $Url=~ s/\/+/\//g;
   $Url=~ s/^http\:\/\/[^\/]+//;    $Url=~ s/^http\:\/\/[^\/]+//;
     $Url=~ s/^\///;
     $Url=~ s/(\~|priv\/)(\w+)\//\/home\/$2\/public_html\//;
   &Debug($r, "Returning $Url \n");    &Debug($r, "Returning $Url \n");
   return $Url;    return $Url;
 }  }
   
   sub url {
       my $fn=shift;
       $fn=~s/^\/home\/(\w+)\/public\_html/\/priv\/$1/;
       return $fn;
   }
   
   sub display {
       my $fn=shift;
       $fn=~s/^\/home\/(\w+)\/public\_html//;
       return '<tt>'.$fn.'</tt>';
   }
   
 =pod  =pod
   
 =item PublicationPath($domain, $user, $dir, $file)  =item PublicationPath($domain, $user, $dir, $file)
Line 247  sub ConstructionPath { Line 241  sub ConstructionPath {
   return '/home/'.$user.'/public_html/'.$dir.'/'.$file;    return '/home/'.$user.'/public_html/'.$dir.'/'.$file;
   
 }  }
 =pod  
   
 =item  ConstructionPathFromRelative($user, $relname)  
   
    Determines the path to a construction space file given  
 the username and the path relative to the root of construction space.  
   
 Parameters:  
   
 =over 4  
   
 =item  $user  - string [in] Name of the user in whose construction space the  
            file [will] live.  
   
 =item  $relname - string[in] Path to the file relative to the root of the  
             construction space.  
   
 =back  
   
 Returns:  
   
 =over 4     
   
 =item  string - Full path to the file.  
   
 =back  
   
 =cut  
   
 sub ConstructionPathFromRelative {  
   
   my ($user, $relname) = @_;  
   return '/home/'.$user.'/public_html'.$relname;  
   
 }  
   
 =pod  =pod
   
Line 336  sub exists { Line 295  sub exists {
   }    }
   if ( -e $published) {    if ( -e $published) {
       $result.='<p><font color="red">Warning: target file exists, and has been published!</font></p>';        $result.='<p><font color="red">Warning: target file exists, and has been published!</font></p>';
   }    } elsif ( -e $construct) {
   elsif ( -e $construct) {  
       $result.='<p><font color="red">Warning: target file exists!</font></p>';        $result.='<p><font color="red">Warning: target file exists!</font></p>';
   }    }
   
Line 398  sub cleanDest { Line 356  sub cleanDest {
     return $dest;      return $dest;
 }  }
   
   sub relativeDest {
       my ($fn,$newfilename,$uname)=@_;
       if ($newfilename=~/^\//) {
   # absolute, simply add path
    $newfilename='/home/'.$uname.'/public_html/';
       } else {
    my $dir=$fn;
    $dir=~s/\/[^\/]+$//;
    $newfilename=$dir.'/'.$newfilename;
       }
       $newfilename=~s://+:/:g; # remove duplicate /
       while ($newfilename=~m:/\.\./:) {
    $newfilename=~ s:/[^/]+/\.\./:/:g; #remove dir/..
       }
       return $newfilename;
   }
   
 =pod  =pod
   
 =item CloseForm1($request, $user, $file)  =item CloseForm1($request, $user, $file)
Line 417  Parameters: Line 392  Parameters:
 =cut  =cut
   
 sub CloseForm1 {  sub CloseForm1 {
    my ($request,  $cancelurl) = @_;     my ($request,  $fn) = @_;
   
   
    &Debug($request, "Cancel url is: ".$cancelurl);  
    $request->print('<p><input type="submit" value="Continue" /></p></form>');     $request->print('<p><input type="submit" value="Continue" /></p></form>');
    $request->print('<form action="'.$cancelurl.     $request->print('<form action="'.&url($fn).
    '" method="POST"><p><input type="submit" value="Cancel" /></p></form>');       '" method="POST"><p><input type="submit" value="Cancel" /></p></form>');
   
 }  }
   
   
Line 453  Parameters: Line 424  Parameters:
 =cut  =cut
   
 sub CloseForm2 {  sub CloseForm2 {
   my ($request, $user, $directory) = @_;    my ($request, $user, $fn) = @_;
     $request->print('<h3><a href="'.&url($fn).'/">Done</a></h3>');
   $request->print('<h3><a href="/priv/'.$user.$directory.'/">Done </a> </h3>');  
 }  }
   
 =pod  =pod
Line 494  new filename relative to the current dir Line 464  new filename relative to the current dir
 =cut    =cut  
   
 sub Rename1 {  sub Rename1 {
     my ($request, $filename, $user, $domain, $dir) = @_;      my ($request, $user, $domain, $fn, $newfilename) = @_;
     &Debug($request, "Username - ".$user." filename: ".$filename."\n");  
     my $conspace = $filename;      if(-e $fn) {
    if($newfilename) {
     my $cancelurl = "/priv/".$filename;  
     $cancelurl    =~ s/\/home\///;  
     $cancelurl    =~ s/\/public_html//;  
       
     if(-e $conspace) {  
  if($ENV{'form.newfilename'}) {  
     my $newfilename = $ENV{'form.newfilename'};  
     if ($newfilename =~ m|/[^\.]+$|) {      if ($newfilename =~ m|/[^\.]+$|) {
  #no extension add on orignal extension   #no extension add on original extension
  if ($filename =~ m|/[^\.]*\.([^\.]+)$|) {   if ($fn =~ m|/[^\.]*\.([^\.]+)$|) {
     $newfilename.='.'.$1;      $newfilename.='.'.$1;
  }   }
     }      }
     $request->print(&checksuffix($filename, $newfilename));      $request->print(&checksuffix($fn, $newfilename));
     #renaming a dir, delete the trailing /      #renaming a dir, delete the trailing /
             #remove last element for current dir              #remove last element for current dir
     if ($filename =~ m|/$|) {      my $dir=$fn;
  $filename =~ s|/$||;      if ($fn =~ m|/$|) {
    $fn =~ s|/$||;
  $dir =~ s|/[^/]*$||;   $dir =~ s|/[^/]*$||;
     }      }
     my $return=&exists($user, $domain, $dir, $newfilename);      my $return=&exists($user, $domain, $dir, $newfilename);
     $request->print($return);      $request->print($return);
     if ($return =~/^Error:/) {      if ($return =~/^Error:/) {
  $request->print('<br /><a href="'.$cancelurl.'">Cancel</a>');   $request->print('<br /><a href="'.&url($fn).'">Cancel</a>');
  return;   return;
     }      }
     my $dest=&SimplifyDir($dir,$newfilename);  
     $request->print('<input type="hidden" name="newfilename" value="'.      $request->print('<input type="hidden" name="newfilename" value="'.
     $newfilename.      $newfilename.
     '" /><p>Rename <tt>'.$filename.      '" /><p>Rename '.&display($fn).
     '</tt><br /> to <tt>'.      '</tt><br />to '.&display($newfilename).'?</p>');
     $dest.'</tt>?</p>');      &CloseForm1($request, $fn);
     &CloseForm1($request, $cancelurl);  
  } else {   } else {
     $request->print('<p>No new filename specified</p></form>');      $request->print('<p>No new filename specified.</p></form>');
     return;      return;
  }   }
     } else {      } else {
  $request->print('<p> No such File </p> </form>');   $request->print('<p> No such file: '.&display($fn).'</p></form>');
  return;   return;
     }      }
           
Line 552  Parameters: Line 514  Parameters:
   
 =over 4  =over 4
   
 =item   $request   - Apache Request Object [in] request object for the current  =item   $request   - Apache Request Object [in] request object for the current 
                 request.                  request.
   
 =item   $user      - string [in] Name of session user.  =item   $user      - string [in]  Name of the user initiating the request.
   
   =item   $domain    - string [in]  Domain the initiating user is logged in as
   
 =item   $filename  - string [in] Name fo the file to be deleted:  =item   $filename  - string [in]  Source filename.
                 Filename is the full filesystem path to the file.  
   
 =back  =back
   
 =cut  =cut
   
 sub Delete1 {  sub Delete1 {
   my ($request, $user,  $filename) = @_;    my ($request, $user, $domain, $fn) = @_;
   
   my $cancelurl = '/priv/'.$filename;  
   $cancelurl    =~ s/\/home\///;  
   $cancelurl    =~ s/\/public_html//;  
     
   
   if( -e $filename) {    if( -e $fn) {
     $request->print('<input type="hidden" name="newfilename" value="'.      $request->print('<input type="hidden" name="newfilename" value="'.
     $filename.'"/>');      $fn.'"/>');
     $request->print('<p> Delete <tt>'.$filename.'</tt>?</p>');      $request->print('<p>Delete '.&display($fn).'?</p>');
     &CloseForm1($request, $cancelurl);      &CloseForm1($request, $fn);
   } else {    } else {
     $request->print('<p> No Such file: <tt>'.$filename.'</tt></p></form>');      $request->print('<p>No such file: '.&display($fn).'</p></form>');
   }    }
 }  }
   
Line 602  Parameters: Line 559  Parameters:
   
 =item   $domain    - string [in]  Domain the initiating user is logged in as  =item   $domain    - string [in]  Domain the initiating user is logged in as
   
 =item   $dir       - string [in]  Directory path.  =item   $fn  - string [in]  Source filename.
   
 =item   $filename  - string [in]  Source filename.  
   
 =item   $newfilename-string [in]  Destination filename.  =item   $newfilename-string [in]  Destination filename.
   
Line 613  Parameters: Line 568  Parameters:
 =cut  =cut
   
 sub Copy1 {  sub Copy1 {
   my ($request, $user, $domain, $dir, $filename, $newfilename) = @_;    my ($request, $user, $domain, $fn, $newfilename) = @_;
   
   my $cancelurl = "/priv/".$filename;    if(-e $fn) {
   $cancelurl    =~ s/\/home\///;      $request->print(&checksuffix($fn,$newfilename));
   $cancelurl    =~ s/\/public_html//;      my $return=&exists($user, $domain, $fn, $newfilename);
       
   
   if(-e $filename) {  
     $request->print(&checksuffix($filename,$newfilename));  
     my $return=&exists($user, $domain, $dir, $newfilename);  
     $request->print($return);      $request->print($return);
     if ($return =~/^Error:/) {      if ($return =~/^Error:/) {
  $request->print('<br /><a href="'.$cancelurl.'">Cancel</a>');   $request->print('<br /><a href="'.&url($fn).'">Cancel</a>');
  return;   return;
     }      }
     my $dest=&SimplifyDir($dir,$newfilename);  
     $request->print('<input type = "hidden" name = "newfilename" value = "'.      $request->print('<input type = "hidden" name = "newfilename" value = "'.
     $dir.'/'.$newfilename.      $newfilename.
     '" /><p>Copy <tt>'.$filename.'</tt><br />  to '.      '" /><p>Copy '.&display($fn).'<br />to '.
     '<tt>'.$dest.'</tt>?</p>');      &display($newfilename).'?</p>');
     &CloseForm1($request, $cancelurl);      &CloseForm1($request, $fn);
   } else {    } else {
     $request->print('<p>No such file <tt>'.$filename.'</p></form>');      $request->print('<p>No such file: '.&display($fn).'</p></form>');
   }    }
 }  }
   
 =pod  =pod
   
 =item SimplifyDir  
   
   Removes all extra / and all .. references  
   
 Parameters:  
   
 =over 4  
   
 =item $dir - string [in] a directory name  
   
 =item $file - string [in] a file reference relative to $dir  
   
 =back  
   
 Results: the concatenated path.  
   
 =cut  
   
 sub SimplifyDir {  
     my ($dir,$file) = @_;  
     my $location = $dir. '/'.$file;  
     $location=~s://+:/:g; # remove duplicate /  
     while ($location=~m:/\.\./:) {$location=~s:/[^/]+/\.\./:/:g;}#remove dir/..  
     return $location;  
 }  
   
 =pod  
   
 =item NewDir1  =item NewDir1
     
   Does all phase 1 processing of directory creation:    Does all phase 1 processing of directory creation:
Line 684  Parameters: Line 605  Parameters:
   
 =item   $username - Name of the user that is requesting the directory creation.  =item   $username - Name of the user that is requesting the directory creation.
   
 =item   $path     - current directory relative to construction space.  =item $domain - Domain user is in
   
   =item   $fn     - source file.
   
 =item   $newdir   - Name of the directory to be created; path relative to the   =item   $newdir   - Name of the directory to be created; path relative to the 
                top level of construction space.                 top level of construction space.
Line 706  causes the newdir operation to transitio Line 629  causes the newdir operation to transitio
   
 sub NewDir1  sub NewDir1
 {  {
   my ($request, $username, $path, $newdir) = @_;    my ($request, $username, $domain, $fn, $newfilename) = @_;
   
   my $fullpath = '/home/'.$username.'/public_html/'.    if(-e $newfilename) {
     $path.'/'.$newdir;  
   
   my $cancelurl = '/priv/'.$username.'/'.$path;  
   
   &Debug($request, "Full path is : ".$fullpath);  
   
   if(-e $fullpath) {  
     $request->print('<p>Directory exists.</p></form>');      $request->print('<p>Directory exists.</p></form>');
   }    }
   else {    else {
     $request->print('<input type="hidden" name="newfilename" value="'.      $request->print('<input type="hidden" name="newfilename" value="'.
     $newdir.'" /><p>Make new directory <tt>'.      $newfilename.'" /><p>Make new directory '.
     $path."/".$newdir.'</tt>?</p>');      &display($newfilename).'?</p>');
     &CloseForm1($request, $cancelurl);      &CloseForm1($request, $fn);
   
   }    }
 }  }
   
Line 748  Parameters: Line 663  Parameters:
   
 =item   $domain   - Name of the domain of the user  =item   $domain   - Name of the domain of the user
   
 =item   $dir      - current absolute diretory  =item   $fn      - Source file name
   
 =item   $newfilename  =item   $newfilename
                   - Name of the file to be created; no path information                    - Name of the file to be created; no path information
Line 760  Side Effects: Line 675  Side Effects:
   
 =item 2 new forms are displayed.  Clicking on the confirmation button  =item 2 new forms are displayed.  Clicking on the confirmation button
 causes the browser to attempt to load the specfied URL, allowing the  causes the browser to attempt to load the specfied URL, allowing the
 proper handler to take care of file creation. There is also a Cancle  proper handler to take care of file creation. There is also a Cancel
 button which returns you to the driectory listing you came from  button which returns you to the driectory listing you came from
   
 =back  =back
Line 769  button which returns you to the driector Line 684  button which returns you to the driector
   
   
 sub NewFile1 {  sub NewFile1 {
     my ($request, $user, $domain, $dir, $newfilename) = @_;      my ($request, $user, $domain, $fn, $newfilename) = @_;
   
     &Debug($request, "Dir is : ".$dir);  
     &Debug($request, "Newfile is : ".$newfilename);  
   
     my $cancelurl = "/priv/".$dir;  
     $cancelurl    =~ s/\/home\///;  
     $cancelurl    =~ s/\/public_html//;  
   
     if ($ENV{'form.action'} =~ /new(.+)file/) {      if ($ENV{'form.action'} =~ /new(.+)file/) {
  my $extension=$1;   my $extension=$1;
Line 789  sub NewFile1 { Line 697  sub NewFile1 {
  }   }
     }      }
   
     my $fullpath = $dir.'/'.$newfilename;      if(-e $newfilename) {
   
     &Debug($request, "Full path is : ".$fullpath);  
   
     if(-e $fullpath) {  
  $request->print('<p>File exists.</p></form>');   $request->print('<p>File exists.</p></form>');
     }      }
     else {      else {
  $request->print('<p>Make new file <tt>'.$dir.'/'.$newfilename.'</tt>?</p>');   $request->print('<p>Make new file '.&display($newfilename).'?</p>');
  my $dest=&MakeFinalUrl($request,$fullpath);  
  &Debug($request, "Cancel url is: ".$cancelurl);  
  &Debug($request, "Dest url is: ".$dest);  
  $request->print('</form>');   $request->print('</form>');
  $request->print('<form action="'.$dest.   $request->print('<form action="'.&url($newfilename).
  '" method="POST"><p><input type="submit" value="Continue" /></p></form>');   '" method="POST"><p><input type="submit" value="Continue" /></p></form>');
  $request->print('<form action="'.$cancelurl.   $request->print('<form action="'.&url($fn).
  '" method="POST"><p><input type="submit" value="Cancel" /></p></form>');   '" method="POST"><p><input type="submit" value="Cancel" /></p></form>');
     }      }
 }  }
Line 840  performed and reported to the user. Line 741  performed and reported to the user.
 sub phaseone {  sub phaseone {
   my ($r,$fn,$uname,$udom)=@_;    my ($r,$fn,$uname,$udom)=@_;
       
   $fn=~m:(.*)/([^/]+)\.(\w+)$:;    my $newfilename=&cleanDest($r,$ENV{'form.newfilename'});
   my $dir=$1;    $newfilename=&relativeDest($fn,$newfilename,$uname);
   my $main=$2;  
   my $suffix=$3;  
     
   #  my $conspace=ConstructionPathFromRelative($uname, $fn);  
     
   $ENV{'form.newfilename'}=&cleanDest($r,$ENV{'form.newfilename'});  
   
   $r->print('<form action="/adm/cfile" method="post">'.    $r->print('<form action="/adm/cfile" method="post">'.
     '<input type="hidden" name="filename" value="/~'.$uname.$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') {
       if (!defined($dir)) {        &Rename1($r, $uname, $udom, $fn, $newfilename);
   $fn=~m:(.*)/:;  
   $dir=$1;  
       }  
       &Rename1($r, $fn, $uname, $udom, $dir);  
   } elsif ($ENV{'form.action'} eq 'delete') {     } elsif ($ENV{'form.action'} eq 'delete') { 
             &Delete1($r, $uname, $udom, $fn);
     &Delete1($r, $uname, $fn);  
       
   } elsif ($ENV{'form.action'} eq 'copy') {     } elsif ($ENV{'form.action'} eq 'copy') { 
     if($ENV{'form.newfilename'}) {        if($newfilename) {
       my $newfilename = $ENV{'form.newfilename'};    &Copy1($r, $uname, $udom, $fn, $newfilename);
       &Copy1($r, $uname, $udom, $dir, $fn, $newfilename);        } else {
     }else {    $r->print('<p>No new filename specified.</p></form>');
       $r->print('<p>No new filename specified.</p></form>');        }
     }  
   } elsif ($ENV{'form.action'} eq 'newdir') {    } elsif ($ENV{'form.action'} eq 'newdir') {
     &NewDir1($r, $uname, $dir, $ENV{'form.newfilename'});        &NewDir1($r, $uname, $udom, $fn, $newfilename);
   }  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 'newstyfile' ||
             $ENV{'form.action'} eq 'Select Action') {              $ENV{'form.action'} eq 'Select Action') {
       if($ENV{'form.newfilename'}) {        if ($newfilename) {
   my $newfilename = $ENV{'form.newfilename'};    &NewFile1($r, $uname, $udom, $fn, $newfilename);
   if (!defined($dir)) {  
       $fn=~m:(.*)/:;  
       $dir=$1;  
   }  
   &NewFile1($r, $uname, $udom, $dir, $newfilename);  
       } else {        } else {
   $r->print('<p>No new filename specified.</p></form>');    $r->print('<p>No new filename specified.</p></form>');
       }        }
Line 934  sub Rename2 { Line 819  sub Rename2 {
  " 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) {        unless (rename($oldfile,$newfile)) {
       my $dest;  
   
       if ($oldfile =~ m|/$|) {  
   #renaming a dir  
   $oldfile =~ s|/$||;  
   $dest=$directory;  
   $dest=~s|(/)([^/]*)$|$1|;  
   $dest.='/'.$newfile;  
       } else {  
   $dest=$directory.'/'.$newfile;  
       }  
   
       unless(rename($oldfile,$dest)) {  
   $request->print('<font color="red">Error: '.$!.'</font>');    $request->print('<font color="red">Error: '.$!.'</font>');
   return 0;    return 0;
       } else {}        }
   } else {    } else {
       $request->print("<p> No such file: /home".$user.'/public_html'.        $request->print("<p> No such file: ".&display($oldfile).'</p></form>');
       $oldfile.' </p></form>');  
       return 0;        return 0;
   }    }
   return 1;    return 1;
Line 1162  sub phasetwo { Line 1033  sub phasetwo {
     if(!&Rename2($r, $uname, $dir, $fn, $ENV{'form.newfilename'})) {      if(!&Rename2($r, $uname, $dir, $fn, $ENV{'form.newfilename'})) {
  return;   return;
     }      }
     # Prepend the directory to the new name to form the basis of the      $dest = &url($ENV{'form.newfilename'});
     # url of the new resource.  
     #  
     #renaming a dir  
             #remove last element for current dir  
     if ($fn =~ m|/$|) { $dir =~ s|/[^/]*$||; }  
     $dest = $dir."/".$ENV{'form.newfilename'};  
  }   }
     } 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'})) {
Line 1191  sub phasetwo { Line 1056  sub phasetwo {
  }   }
   
     } elsif ($ENV{'form.action'} eq 'newdir') {      } elsif ($ENV{'form.action'} eq 'newdir') {
  #          my $newdir= $ENV{'form.newfilename'};
  # Since the newfilename form field is construction space  
  # relative, ew need to prepend the current path; now in $fn.  
  #  
         my $newdir= $fn.$ENV{'form.newfilename'};  
  if(!&NewDir2($r, $uname, $newdir)) {   if(!&NewDir2($r, $uname, $newdir)) {
     return;      return;
  }   }
  $dest = $newdir."/"   $dest = $newdir."/"
     }      }
     #      $r->print('<h3><a href="'.&url($dest).'">Done</a></h3>');
     #  Substitute for priv for the first home in $dir to get our  
     # construction space path.  
     #  
     $dest=&MakeFinalUrl($r,$dest);  
   
     $r->print('<h3><a href="'.$dest.'">Done</a></h3>');  
 }  
   
 sub MakeFinalUrl {  
     my($r,$dest)=@_;  
     &Debug($r, "Final url is: $dest");  
     $dest =~ s|/home/|/priv/|;  
     $dest =~ s|/public_html||;  
   
     my $base = &File::Basename::basename($dest);  
     my $dpath= &File::Basename::dirname($dest);  
     if ($base eq '.') { $base=''; }  
     $dest = &HTML::Entities::encode($dpath.'/'.$base);  
   
     &Debug($r, "Final url after rewrite: $dest");  
     return $dest;  
 }  }
   
 sub handler {  sub handler {
Line 1233  sub handler { Line 1073  sub handler {
   &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
   # This could come in as "filename", which actually is a URL, or
   # as "qualifiedfilename", which is indeed a real filename in filesystem
   #
   my $fn;    my $fn;
   
   if ($ENV{'form.filename'}) {    if ($ENV{'form.filename'}) {
       $fn=&Apache::lonnet::unescape($ENV{'form.filename'});        $fn=&Apache::lonnet::unescape($ENV{'form.filename'});
       &Debug($r, "loncfile::handler - raw url: $fn");        $fn=&URLToPath($fn);
 #      $fn=~s/^http\:\/\/[^\/]+\/\~(\w+)/\/home\/$1\/public_html/;    } elsif ($ENV{'form.qualifiedfilename'}) {
 #      $fn=~s/^http\:\/\/[^\/]+//;        $fn=$ENV{'form.qualifiedfilename'};
       $fn=URLToPath($fn);  
       &Debug($r, "loncfile::handler - doctored url: $fn");  
   
   } else {    } else {
       &Debug($r, "loncfile::handler - no form.filename");        &Debug($r, "loncfile::handler - no form.filename");
      $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.       $r->log_reason($ENV{'user.name'}.' at '.$ENV{'user.domain'}.
Line 1274  sub handler { Line 1115  sub handler {
      return HTTP_NOT_ACCEPTABLE;       return HTTP_NOT_ACCEPTABLE;
   }    }
   
   $fn=~s/\/\~(\w+)//;  
   &Debug($r, "loncfile::handler ~ removed filename: $fn");  
   
   $r->content_type('text/html');    $r->content_type('text/html');
   $r->send_http_header;    $r->send_http_header;
   
   $r->print('<html><head><title>LON-CAPA Construction Space</title></head>');    $r->print('<html><head><title>LON-CAPA Construction Space</title></head>');
   
   $r->print(    $r->print(&Apache::loncommon::bodytag('Construction Space File Operation'));
    '<body bgcolor="#FFFFFF"><img align="right" src="/adm/lonIcons/lonlogos.gif" />');  
   
       
   $r->print('<h1>Construction Space <tt>'.$fn.'</tt></h1>');    $r->print('<h3>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('<h3><font color="red">Co-Author: '.$uname.' at '.$udom.
Line 1309  sub handler { Line 1147  sub handler {
    $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 'newstyfile' ||
            $ENV{'form.action'} eq 'Select Action' ) {             $ENV{'form.action'} eq 'Select Action' ) {
       $r->print('<h3>New Resource</h3>');        $r->print('<h3>New Resource</h3>');
   } else {    } else {

Removed from v.1.32  
changed lines
  Added in v.1.38


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