X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/89269f652fc46e65006b9aead5eb1ae61ebc311e..6a0845bb6cf36d03e039e3fd44180a21e8042f83:/modules/Command.pm diff --git a/modules/Command.pm b/modules/Command.pm index 363cffe..44419ba 100644 --- a/modules/Command.pm +++ b/modules/Command.pm @@ -6,7 +6,7 @@ package Command; # Execute Dev-Editor's commands # # Author: Patrick Canterino -# Last modified: 10-04-2003 +# Last modified: 2003-10-30 # use strict; @@ -14,8 +14,6 @@ use strict; use vars qw(@EXPORT $script); -use CGI qw(redirect); - use File::Access; use File::Copy; @@ -62,7 +60,7 @@ sub exec_show($$$) # Create directory listing my $direntries = dir_read($physical); - return error("Reading of directory $virtual failed") unless($direntries); + return error("Reading of directory $virtual failed.",upper_path($virtual)) unless($direntries); my $files = $direntries->{'files'}; my $dirs = $direntries->{'dirs'}; @@ -112,7 +110,7 @@ sub exec_show($$$) foreach my $file(@$files) { - my $phys_path = $physical."/".$file; # Not exactly... + my $phys_path = $physical."/".$file; my $virt_path = encode_entities($virtual.$file); my @stat = stat($phys_path); @@ -126,15 +124,15 @@ sub exec_show($$$) $output .= encode_entities($file); $output .= " " x ($max_name_len - length($file))."\t ("; - $output .= (-T $phys_path) + $output .= (-r $phys_path && -T $phys_path) ? "View" : 'View'; $output .= " | "; - $output .= ($in_use || not -T $phys_path) - ? 'Edit' - : "Edit"; + $output .= (-w $phys_path && -r $phys_path && -T $phys_path && not $in_use) + ? "Edit" + : 'Edit'; $output .= " | Do other stuff)\n"; } @@ -172,6 +170,8 @@ END { # View a file + return error("You have not enough permissions to view this file.",upper_path($virtual)) unless(-r $physical); + # Check on binary files # We have to do it in this way, or empty files # will be recognized as binary files @@ -180,7 +180,7 @@ END { # Binary file - return error("This editor is not able to view/edit binary files."); + return error("This editor is not able to view/edit binary files.",upper_path($virtual)); } else { @@ -218,8 +218,9 @@ sub exec_beginedit($$) my $virtual = $data->{'virtual'}; my $uselist = $data->{'uselist'}; - return error("You cannot edit directories.") if(-d $physical); + return error("You cannot edit directories.",upper_path($virtual)) if(-d $physical); return error_in_use($virtual) if($uselist->in_use($virtual)); + return error("You have not enough permissions to edit this file.",upper_path($virtual)) unless(-r $physical && -w $physical); # Check on binary files @@ -227,7 +228,7 @@ sub exec_beginedit($$) { # Binary file - return error("This editor is not able to view/edit binary files."); + return error("This editor is not able to view/edit binary files.",upper_path($virtual)); } else { @@ -298,6 +299,11 @@ sub exec_endedit($$) my $content = $data->{'cgi'}->param('filecontent'); return error("You cannot edit directories.") if(-d $physical); + return error("You have not enough permissions to edit this file.",upper_path($virtual)) unless(-r $physical && -w $physical); + + # Normalize newlines + + $content =~ s/\015\012|\012|\015/\n/g; if($data->{'cgi'}->param('encode_iso')) { @@ -322,7 +328,7 @@ sub exec_endedit($$) } else { - return error("Saving of file '".encode_entities($virtual)."' failed'."); + return error("Saving of file '".encode_entities($virtual)."' failed'.",upper_path($virtual)); } } @@ -343,12 +349,10 @@ sub exec_mkfile($$) my $dir = upper_path($new_virtual); $new_virtual = encode_entities($new_virtual); - return error("A file or directory called '$new_virtual' does already exist.") if(-e $new_physical); + return error("A file or directory called '$new_virtual' already exists.",$dir) if(-e $new_physical); - file_create($new_physical) or return error("Could not create file '$new_virtual'."); - - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=$dir"); - return \$output; + file_create($new_physical) or return error("Could not create file '$new_virtual'.",$dir); + return devedit_reload({command => 'show', file => $dir}); } # exec_mkdir() @@ -368,12 +372,10 @@ sub exec_mkdir($$) my $dir = upper_path($new_virtual); $new_virtual = encode_entities($new_virtual); - return error("A file or directory called '$new_virtual' does already exist.") if(-e $new_physical); - - mkdir($new_physical) or return error("Could not create directory '$new_virtual'."); + return error("A file or directory called '$new_virtual' already exists.",$dir) if(-e $new_physical); - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=$dir"); - return \$output; + mkdir($new_physical) or return error("Could not create directory '$new_virtual'.",$dir); + return devedit_reload({command => 'show', file => $dir}); } # exec_workwithfile() @@ -404,11 +406,13 @@ sub exec_workwithfile($$) $output .= "

Someone else is currently editing this file. So not all features are available.

\n\n" unless($unused); - # Copying of the file as always allowed + $output .= "
\n\n"; - $output .= < + # Copying of the file is always allowed - but we need read access + if(-r $physical) + { + $output .= <Copy
@@ -420,6 +424,7 @@ sub exec_workwithfile($$)
END + } if($unused) { @@ -490,16 +495,15 @@ sub exec_copy($$) $new_virtual = encode_entities($new_virtual); return error("This editor is not able to copy directories.") if(-d $physical); + return error("You have not enough permissions to copy this file.") unless(-r $physical); if(-e $new_physical) { - return error("A file or directory called '$new_virtual' does already exists and this editor is currently not able to ask to overwrite the existing file or directory."); + return error("A file or directory called '$new_virtual' already exists and this editor is currently not able to ask to overwrite the existing file or directory.",upper_path($virtual)); } - copy($physical,$new_physical) or return error("Could not copy '$virtual' to '$new_virtual'"); - - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=$dir"); - return \$output; + copy($physical,$new_physical) or return error("Could not copy '$virtual' to '$new_virtual'",upper_path($virtual)); + return devedit_reload({command => 'show', file => $dir}); } # exec_rename() @@ -525,13 +529,11 @@ sub exec_rename($$) if(-e $new_physical) { - return error("A file or directory called '$new_virtual' does already exists and this editor is currently not able to ask to overwrite the existing file or directory."); + return error("A file or directory called '$new_virtual' already exists and this editor is currently not able to ask to overwrite the existing file or directory.",upper_path($virtual)); } - rename($physical,$new_physical) or return error("Could not move/rename '".encode_entities($virtual)."' to '$new_virtual'."); - - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=$dir"); - return \$output; + rename($physical,$new_physical) or return error("Could not move/rename '".encode_entities($virtual)."' to '$new_virtual'.",upper_path($virtual)); + return devedit_reload({command => 'show', file => $dir}); } # exec_remove() @@ -549,13 +551,11 @@ sub exec_remove($$) my $physical = $data->{'physical'}; my $virtual = $data->{'virtual'}; - return error("Deleting directories is currently unsupported") if(-d $physical); + return error("Deleting directories is currently unsupported.",upper_path($virtual)) if(-d $physical); return error_in_use($virtual) if($data->{'uselist'}->in_use($virtual)); - unlink($physical) or return error("Could not delete file '".encode_entities($virtual)."'."); - - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=".upper_path($virtual)); - return \$output; + unlink($physical) or return error("Could not delete file '".encode_entities($virtual)."'.",upper_path($virtual)); + return devedit_reload({command => 'show', file => upper_path($virtual)}); } # exec_unlock() @@ -577,8 +577,7 @@ sub exec_unlock($$) $uselist->remove_file($virtual); $uselist->save; - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=".upper_path($virtual)); - return \$output; + return devedit_reload({command => 'show', file => upper_path($virtual)}); } # it's true, baby ;-)