--- loncom/publisher/loncfile.pm 2003/12/13 19:54:16 1.46 +++ loncom/publisher/loncfile.pm 2014/06/14 21:40:05 1.122 @@ -9,7 +9,7 @@ # and displays a page showing the results of the action. # # -# $Id: loncfile.pm,v 1.46 2003/12/13 19:54:16 taceyjo1 Exp $ +# $Id: loncfile.pm,v 1.122 2014/06/14 21:40:05 raeburn Exp $ # # Copyright Michigan State University Board of Trustees # @@ -37,7 +37,7 @@ =head1 NAME -Apache::loncfile - Construction space file management. +Apache::loncfile - Authoring space file management. =head1 SYNOPSIS @@ -68,10 +68,11 @@ use File::Basename; use File::Copy; use HTML::Entities(); use Apache::Constants qw(:common :http :methods); -use Apache::loncacc; -use Apache::Log (); use Apache::lonnet; use Apache::loncommon(); +use Apache::lonlocal; +use LONCAPA qw(:DEFAULT :match); + my $DEBUG=0; my $r; # Needs to be global for some stuff RF. @@ -100,18 +101,23 @@ my $r; # Needs to be global for some =cut sub Debug { - - # Marshall the parameters. - - my $r = shift; - my $log = $r->log; - my $message = shift; - - # Put out the indicated message butonly if DEBUG is true. - - if ($DEBUG) { - $r->log_reason($message); - } + # Put out the indicated message but only if DEBUG is true. + if ($DEBUG) { + my ($r,$message) = @_; + $r->log_reason($message); + } +} + +sub done { + my ($url) = @_; + return + '
'
+ .&Apache::lonhtmlcommon::confirm_success(&mt("Done"))
+ .'
'.&mt("Continue").''
+ .''
+ .'
Warning: target file exists, and has been published!
'; - } elsif ( -e $construct) { - $result.='Warning: target file exists!
'; - } - return $result; + my ($user, $domain, $construct, $creating) = @_; + $creating ||= 'file'; + + my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; + my $published=$construct; + $published=~s{^\Q$londocroot/priv/\E}{$londocroot/res/}; + my ($type,$result); + if ( -d $construct ) { + return ('error',''.&mt('Error: destination for operation is an existing directory.').'
'); + + } + + if ( -e $published) { + if ( -e $construct ) { + $type = 'warning'; + $result.=''.&mt('Warning: target file exists, and has been published!').'
'; + } else { + my $published_type = (-d $published) ? 'directory' : 'file'; + + if ($published_type eq $creating) { + $type = 'warning'; + $result.=''.&mt("Warning: a published $published_type of this name exists.").'
'; + } else { + $type = 'error'; + $result.=''.&mt("Error: a published $published_type of this name exists.").'
'; + } + } + } elsif ( -e $construct) { + $type = 'warning'; + $result.=''.&mt('Warning: target file exists!').'
'; + } + return ($type,$result); } =pod @@ -258,38 +342,79 @@ sub checksuffix { my $newsuffix; if ($new=~m:(.*/*)([^/]+)\.(\w+)$:) { $newsuffix=$3; } if ($old=~m:(.*)/+([^/]+)\.(\w+)$:) { $oldsuffix=$3; } - if ($oldsuffix ne $newsuffix) { + if (lc($oldsuffix) ne lc($newsuffix)) { $result.= - 'Warning: change of MIME type!
'; + ''.&mt('Warning: change of MIME type!').'
'; } return $result; } sub cleanDest { - my ($request,$dest)=@_; + my ($request,$dest,$subdir,$fn,$uname,$udom)=@_; #remove bad characters - if ($dest=~/[\#\?&]/) { - $request->print("Invalid characters in requested name have been removed.
"); - $dest=~s/[\#\?&]//g; + my $foundbad=0; + my $error=''; + if ($subdir && $dest =~/\./) { + $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,$error)=&relativeDest($fn,$newpath,$uname,$udom); + if (! -d "$newpath") { + $request->print('' + .&mt("You have requested to create file in directory [_1] which doesn't exist. The requested directory path has been removed from the requested filename." + ,&display($newpath)) + .'
'); + $dest=~s|.*/||; + } } - return $dest; + if ($dest =~ /\.(\d+)\.(\w+)$/){ + $request->print(''
+ .&mt('Bad filename [_1]',&display($dest))
+ .'
'
+ .&mt('[_1](name).(number).(extension)[_2] not allowed.','','')
+ .'
'
+ .&mt('Removing the [_1].number.[_2] from requested filename.','','')
+ .'
' + .&mt('Invalid characters in requested name have been removed.') + .'
' + ); + } + return ($dest,$error); } sub relativeDest { - my ($fn,$newfilename,$uname)=@_; + my ($fn,$newfilename,$uname,$udom)=@_; + my $error = ''; if ($newfilename=~/^\//) { # absolute, simply add path - $newfilename='/home/'.$uname.'/public_html/'; + my $londocroot = $Apache::lonnet::perlvar{'lonDocRoot'}; + $newfilename="$londocroot/res/$udom/$uname/"; } else { my $dir=$fn; - $dir=~s/\/[^\/]+$//; + $dir=~s{/[^/]+$}{}; $newfilename=$dir.'/'.$newfilename; } - $newfilename=~s://+:/:g; # remove duplicate / - while ($newfilename=~m:/\.\./:) { - $newfilename=~ s:/[^/]+/\.\./:/:g; #remove dir/.. + $newfilename=~s{//+}{/}g; # remove duplicate / + while ($newfilename=~m{/\.\./}) { + $newfilename=~ s{/[^/]+/\.\./}{/}g; #remove dir/.. + } + my ($authorname,$authordom)=&Apache::lonnet::constructaccess($newfilename); + unless (($authorname) && ($authordom)) { + my $otherdir = &display($newfilename); + $error = &mt('Access denied to [_1]',$otherdir); } - return $newfilename; + return ($newfilename,$error); } =pod @@ -311,10 +436,10 @@ Parameters: =cut sub CloseForm1 { - my ($request, $fn) = @_; - $request->print(''); - $request->print(''); + my ($request, $fn) = @_; + $request->print(''); + $request->print(' '); } @@ -343,8 +468,8 @@ Parameters: =cut sub CloseForm2 { - my ($request, $user, $fn) = @_; - $request->print(''.
+ &mt('Cannot change MIME type of a directory.').
+ ''.
+ '
'.&mt('Cancel').'
'
+ .&mt('Cannot rename or move non-obsolete published file.')
+ .'
'
+ .''.&mt('Cancel').'
Rename '.&display($fn).
- '
to '.&display($newfilename).'?
' + .&mt($action.' [_1] to [_2]?', + &display($fn), + &display($newfilename)) + .'
' + ); &CloseForm1($request, $fn); } else { - $request->print('No new filename specified.
'); + $request->print(''.&mt('No new filename specified.').'
'); return; } } else { - $request->print('No such file: '.&display($fn).'
'); + $request->print('' + .&mt('No such file: [_1]', + &display($fn)) + .'
' + ); return; } } + =pod =item Delete1 @@ -453,16 +611,46 @@ Parameters: =cut sub Delete1 { - my ($request, $user, $domain, $fn) = @_; + my ($request, $user, $domain, $fn) = @_; - if( -e $fn) { - $request->print(''); - $request->print('Delete '.&display($fn).'?
'); - &CloseForm1($request, $fn); - } else { - $request->print('No such file: '.&display($fn).'
'); - } + if( -e $fn) { + $request->print(''); + if (-d $fn) { + unless (&empty_directory($fn,'Delete1')) { + $request->print(''
+ .''
+ .&mt('Only empty directories may be deleted.')
+ .'
'
+ .&mt('You must delete the contents of the directory first.')
+ .'
'
+ .&mt('Cannot delete non-obsolete published file.')
+ .'
'
+ .''.&mt('Cancel').'
' + .&mt('Delete [_1]?', + &display($fn)) + .'
' + ); + &CloseForm1($request, $fn); + } else { + $request->print('' + .&mt('No such file: [_1]', + &display($fn)) + .'
' + ); + } } =pod @@ -509,19 +697,39 @@ sub Copy1 { $newfilename=~ s:/[^/]+/\.\./:/:g; #remove dir/.. } $request->print(&checksuffix($fn,$newfilename)); - my $return=&exists($user, $domain, $newfilename); + my ($type,$return)=&exists($user, $domain, $newfilename); $request->print($return); - if ($return =~/^Error:/) { - $request->print('Copy '.&display($fn).'
to '.
- &display($newfilename).'?
' + .&mt('Copy [_1] to [_2]?', + &display($fn), + &display($newfilename)) + .'
' + ); &CloseForm1($request, $fn); } else { - $request->print('No such file: '.&display($fn).'
'); + $request->print('' + .&mt('No such file: [_1]', + &display($fn)) + .'
' + ); } } @@ -564,32 +772,49 @@ causes the newdir operation to transitio =cut -sub NewDir1 -{ - my ($request, $username, $domain, $fn, $newfilename) = @_; - - my $result=&exists($username,$domain,$newfilename); - if ($result) { - $request->print(''.$result.''); - } else { - $request->print('Make new directory '. - &display($newfilename).'?
'); - &CloseForm1($request, $fn); - } +sub NewDir1 { + my ($request, $username, $domain, $fn, $newfilename, $mode) = @_; + + my ($type, $result)=&exists($username,$domain,$newfilename,'directory'); + $request->print($result); + if ($type eq 'error') { + $request->print(''); + } else { + if (($mode eq 'testbank') || ($mode eq 'imsimport')) { + $request->print(''."\n". + ''); + } + $request->print('' + .'' + .&mt('Make new directory [_1]?', + &display($newfilename)) + .'
' + ); + &CloseForm1($request, $fn); + } } sub Decompress1 { - my ($request, $user, $domain, $fn) = @_; - if( -e $fn) { - $request->print(''); - $request->print('Decompress '.&display($fn).'?
'); + my ($request, $user, $domain, $fn) = @_; + if( -e $fn) { + $request->print(''); + $request->print('' + .&mt('Decompress [_1]?', + &display($fn)) + .'
' + ); &CloseForm1($request, $fn); - } else { - $request->print('No such file: '.&display($fn).'
'); - } + } else { + $request->print('' + .&mt('No such file: [_1]', + &display($fn)) + .'
' + ); + } } + =pod =item NewFile1 @@ -611,7 +836,7 @@ Parameters: =item $domain - Name of the domain of the user -=item $fn - Source file name +=item $fn - Source filename =item $newfilename - Name of the file to be created; no path information @@ -624,45 +849,82 @@ Side Effects: =item 2 new forms are displayed. Clicking on the confirmation button causes the browser to attempt to load the specfied URL, allowing the 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 directory listing you came from =back =cut - sub NewFile1 { 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; - - ##Informs User (name).(number).(extension) not allowed - if($newfilename =~ /\.(\d+)\.(\w+)$/){ - $r->print(''.$newfilename. - ' - Bad FilenameMake new file '.&display($newfilename).'?
'); + my $extension; + + if ($newfilename =~ m{[^/.]+\.([^/.]+)$}) { + $extension = $1; + } + + my @okexts = qw(xml html xhtml htm xhtm problem page sequence rights sty task library js css txt); + if (($extension eq '') || (!grep(/^\Q$extension\E/,@okexts))) { + my $validexts = '.'.join(', .',@okexts); + $request->print(''. + &mt('Invalid filename: ').&display($newfilename).'
'.
+ &mt('The name of the new file needs to end with an appropriate file extension to indicate the type of file to create.').'
'.
+ &mt('The following are valid extensions: [_1].',$validexts).
+ '
'. + '
'. + ''); + return; + } + + $request->print(''.&mt('Make new file').' '.&display($newfilename).'?
'); $request->print(''); + $request->print(''); + '" method="post">'); $request->print(''); + '" method="post">'); + } + return; +} + +sub filename_check { + my ($newfilename) = @_; + ##Informs User (name).(number).(extension) not allowed + if($newfilename =~ /\.(\d+)\.(\w+)$/){ + $r->print(''.$newfilename. + ' - '.&mt('Bad Filename').'No new filename specified.
'); - } - } + if ($env{'form.action'} eq 'rename') { + &Rename1($r, $uname, $udom, $fn, $newfilename, 'rename'); + } elsif ($env{'form.action'} eq 'move') { + &Rename1($r, $uname, $udom, $fn, $newfilename, 'move'); + } elsif ($env{'form.action'} eq 'delete') { + &Delete1($r, $uname, $udom, $fn); + } elsif ($env{'form.action'} eq 'decompress') { + &Decompress1($r, $uname, $udom, $fn); + } elsif ($env{'form.action'} eq 'copy') { + if($newfilename) { + &Copy1($r, $uname, $udom, $fn, $newfilename); + } else { + $r->print('' + .&mt('No new filename specified.') + .'
' + ); + } + } elsif ($env{'form.action'} eq 'newdir') { + my $mode = ''; + if (exists($env{'form.callingmode'}) ) { + $mode = $env{'form.callingmode'}; + } + &NewDir1($r, $uname, $udom, $fn, $newfilename, $mode); + } elsif ($env{'form.action'} eq 'newfile' || + $env{'form.action'} eq 'newhtmlfile' || + $env{'form.action'} eq 'newproblemfile' || + $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('' + .&mt('No new filename specified.') + .'
' + ); + } + } } =pod @@ -769,57 +1063,63 @@ Returns: sub Rename2 { - my ($request, $user, $directory, $oldfile, $newfile) = @_; + my ($request, $user, $directory, $oldfile, $newfile) = @_; - &Debug($request, "Rename2 directory: ".$directory." old file: ".$oldfile. - " new file ".$newfile."\n"); - &Debug($request, "Target is: ".$directory.'/'. - $newfile); - if (-e $oldfile) { - - my $oRN=$oldfile; - my $nRN=$newfile; - unless (rename($oldfile,$newfile)) { - $request->print('Error: '.$!.''); - return 0; - } - ## If old name.(extension) exits, move under new name. - ## If it doesn't exist and a new.(extension) exists - ## delete it (only concern when renaming over files) - my $tmp1=$oRN.'.meta'; - my $tmp2=$nRN.'.meta'; - if(-e $tmp1){ - unless(rename($tmp1,$tmp2)){ } - } elsif(-e $tmp2){ - unlink $tmp2; - } - $tmp1=$oRN.'.save'; - $tmp2=$nRN.'.save'; - if(-e $tmp1){ - unless(rename($tmp1,$tmp2)){ } - } elsif(-e $tmp2){ - unlink $tmp2; - } - $tmp1=$oRN.'.log'; - $tmp2=$nRN.'.log'; - if(-e $tmp1){ - unless(rename($tmp1,$tmp2)){ } - } elsif(-e $tmp2){ - unlink $tmp2; - } - $tmp1=$oRN.'.bak'; - $tmp2=$nRN.'.bak'; - if(-e $tmp1){ - unless(rename($tmp1,$tmp2)){ } - } elsif(-e $tmp2){ - unlink $tmp2; - } - } else { - $request->print("No such file: ".&display($oldfile).'
'); - return 0; - } - return 1; + &Debug($request, "Rename2 directory: ".$directory." old file: ".$oldfile. + " new file ".$newfile."\n"); + &Debug($request, "Target is: ".$directory.'/'. + $newfile); + if (-e $oldfile) { + + my $oRN=$oldfile; + my $nRN=$newfile; + unless (rename($oldfile,$newfile)) { + $request->print(''.&mt('Error').': '.$!.''); + return 0; + } + ## If old name.(extension) exits, move under new name. + ## If it doesn't exist and a new.(extension) exists + ## delete it (only concern when renaming over files) + my $tmp1=$oRN.'.meta'; + my $tmp2=$nRN.'.meta'; + if(-e $tmp1){ + unless(rename($tmp1,$tmp2)){ } + } elsif(-e $tmp2){ + unlink $tmp2; + } + $tmp1=$oRN.'.save'; + $tmp2=$nRN.'.save'; + if(-e $tmp1){ + unless(rename($tmp1,$tmp2)){ } + } elsif(-e $tmp2){ + unlink $tmp2; + } + $tmp1=$oRN.'.log'; + $tmp2=$nRN.'.log'; + if(-e $tmp1){ + unless(rename($tmp1,$tmp2)){ } + } elsif(-e $tmp2){ + unlink $tmp2; + } + $tmp1=$oRN.'.bak'; + $tmp2=$nRN.'.bak'; + if(-e $tmp1){ + unless(rename($tmp1,$tmp2)){ } + } elsif(-e $tmp2){ + unlink $tmp2; + } + } else { + $request->print( + '' + .&mt('No such file: [_1]', + &display($oldfile)) + .'
' + ); + return 0; + } + return 1; } + =pod =item Delete2($request, $user, $filename) @@ -850,42 +1150,34 @@ Returns: =cut sub Delete2 { - my ($request, $user, $filename) = @_; - if(opendir DIR, $filename) { - my @files=readdir(DIR); - shift @files; shift @files; # takes off . and .. - if(@files) { - $request->print(' Error: Directory Non Empty'); - return 0; - } - else { - if(-e $filename) { - unless(rmdir($filename)) { - $request->print('Error: '.$!.''); - return 0; - } - } - else { - $request->print('No such file.
print('Error: '.$!.''); - return 0; - } - } - else { - $request->print('No such file.
print(''.&mt('Error: Directory Non Empty').''); + return 0; + } else { + if(-e $filename) { + unless(rmdir($filename)) { + $request->print(''.&mt('Error').': '.$!.''); + return 0; + } + } else { + $request->print(''.&mt('No such file').'
'); + return 0; + } + } + } else { + if(-e $filename) { + unless(unlink($filename)) { + $request->print(''.&mt('Error').': '.$!.''); + return 0; + } + } else { + $request->print(''.&mt('No such file').'
'); + return 0; } - return 1; + } + return 1; } =pod @@ -912,7 +1204,7 @@ sub Delete2 { =back -Returns 0 failure, and 0 successs. +Returns 0 failure, and 1 successs. =cut @@ -920,22 +1212,32 @@ sub Copy2 { my ($request, $username, $dir, $oldfile, $newfile) = @_; &Debug($request ,"Will try to copy $oldfile to $newfile"); if(-e $oldfile) { + if ($oldfile eq $newfile) { + $request->print(''.&mt('Warning').': '.&mt('Name of new file is the same as name of old file').' - '.&mt('no action taken').'.'); + return 1; + } unless (copy($oldfile, $newfile)) { - $request->print(' copy Error: '.$!.''); + $request->print(''.&mt('copy Error').': '.$!.''); + return 0; + } elsif (!chmod(0660, $newfile)) { + $request->print(''.&mt('chmod error').': '.$!.''); + return 0; + } elsif (-e $oldfile.'.meta' && + !copy($oldfile.'.meta', $newfile.'.meta') && + !chmod(0660, $newfile.'.meta')) { + $request->print(''.&mt('copy metadata error'). + ': '.$!.''); return 0; } else { - unless (chmod(0660, $newfile)) { - $request->print(' chmod error: '.$!.''); - return 0; - } return 1; } } else { - $request->print('No such file
'); + $request->print(''.&mt('No such file').'
'); return 0; } return 1; } + =pod =item NewDir2($request, $user, $newdirectory) @@ -959,28 +1261,30 @@ Returns 0 - failure 1 - success. =cut sub NewDir2 { - my ($request, $user, $newdirectory) = @_; + my ($request, $user, $newdirectory) = @_; - unless(mkdir($newdirectory, 02770)) { - $request->print('Error: '.$!.''); - return 0; - } - unless(chmod(02770, ($newdirectory))) { - $request->print(' Error: '.$!.''); - return 0; - } - return 1; + unless(mkdir($newdirectory, 02770)) { + $request->print(''.&mt('Error').': '.$!.''); + return 0; + } + unless(chmod(02770, ($newdirectory))) { + $request->print(''.&mt('Error').': '.$!.''); + return 0; + } + 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; + 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 =item phasetwo($r, $fn, $uname, $udom) @@ -1018,7 +1322,7 @@ sub phasetwo { &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 $main; # Filename. @@ -1026,190 +1330,242 @@ sub phasetwo { if ($fn=~m:(.*)/([^/]+):) { $dir=$1; # Directory path $main=$2; # Filename. - } - if($main=~m:\.(\w+)$:){ # Fixes problems with filenames with no extensions - $main=$`; - $suffix=$1; - } - my $dest; # On success this is where we'll go. - - &Debug($r, - "loncfile::phase2 dir = $dir main = $main suffix = $suffix"); - &Debug($r, - " newfilename = ".$ENV{'form.newfilename'}); + } + if($main=~m:\.(\w+)$:){ # Fixes problems with filenames with no extensions + $suffix=$1; #This is the actually filename extension if it exists + $main=~s/\.\w+$//; #strip the extension + } + my $dest; # + my $dest_dir; # On success this is where we'll go. + 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; - &Debug($r, - "loncfile::phase2 Full construction space name: $conspace"); + &Debug($r,"loncfile::phase2 Full construction space name: $conspace"); - &Debug($r, - "loncfie::phase2 action is $ENV{'form.action'}"); + &Debug($r,"loncfie::phase2 action is $env{'form.action'}"); # Select the appropriate processing sub. - if ($ENV{'form.action'} eq 'decompress') { - $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.action'} eq 'decompress') { + $main .= '.'.$suffix; + 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)) { $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; } - $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') { - if(!&Delete2($r, $uname, $ENV{'form.newfilename'})) { + } elsif ($env{'form.action'} eq 'delete') { + if(!&Delete2($r, $uname, $env{'form.newfilename'})) { return ; } # Once a resource is deleted, we just list the directory that # previously held it. # $dest = $dir."/."; # Parent dir. - } elsif ($ENV{'form.action'} eq 'copy') { - if($ENV{'form.newfilename'}) { - if(!&Copy2($r, $uname, $dir, $fn, $ENV{'form.newfilename'})) { + } elsif ($env{'form.action'} eq 'copy') { + if($env{'form.newfilename'}) { + if(!&Copy2($r, $uname, $dir, $fn, $env{'form.newfilename'})) { return ; - } - $dest = $ENV{'form.newfilename'}; - - } else { - $r->print('No New filename specified
'); + } + $dest = $env{'form.newfilename'}; + } else { + $r->print(''.&mt('No New filename specified').'
'); return; } - } elsif ($ENV{'form.action'} eq 'newdir') { - my $newdir= $ENV{'form.newfilename'}; + } elsif ($env{'form.action'} eq 'newdir') { + my $newdir= $env{'form.newfilename'}; if(!&NewDir2($r, $uname, $newdir)) { 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( + ''
+ .&Apache::lonhtmlcommon::confirm_success(&mt('Done'))
+ .'
'.&mt('Continue').''
+ .'
'.&Apache::lonhtmlcommon::confirm_success(&mt('Done')).'
' + .&Apache::lonhtmlcommon::actionbox( + [''.&mt('Return to Directory').'', + ''.$disp_newname.''])); + } else { + $r->print(&done(&url($dest))); + } } - $r->print(''.&mt('Location').': '.&display($fn).'
'); - if (($uname ne $ENV{'user.name'}) || ($udom ne $ENV{'user.domain'})) { - $r->print('Unknown Action '.$ENV{'form.action'}.'