X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/3e6b9e338fe5ea06b487202fe54217f2082cd13d..258ec0b29f3b69680b6de4ddc9704c3710a50178:/modules/Command.pm diff --git a/modules/Command.pm b/modules/Command.pm index 1a39d67..363cffe 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: 09-22-2003 +# Last modified: 10-04-2003 # use strict; @@ -14,8 +14,7 @@ use strict; use vars qw(@EXPORT $script); -use CGI qw(header - redirect); +use CGI qw(redirect); use File::Access; use File::Copy; @@ -70,7 +69,7 @@ sub exec_show($$$) $output .= htmlhead("Directory listing of $virtual"); $output .= equal_url($config->{'httproot'},$virtual); - $output .= "
\n\n
\n";
+  $output .= "
\n\n
\n";
 
   # Create the link to the upper directory
   # (only if we are not in the root directory)
@@ -83,10 +82,10 @@ sub exec_show($$$)
    $output .= "  [SUBDIR]  ";
    $output .= strftime("%d.%m.%Y %H:%M",localtime($stat[9]));
    $output .= " " x 10;
-   $output .= "../\n";
+   $output .= "../\n";
   }
 
-  # Get the longest file/directory name
+  # Get the length of the longest file/directory name
 
   my $max_name_len = 0;
 
@@ -104,29 +103,36 @@ sub exec_show($$$)
 
    $output .= "  ";
    $output .= "[SUBDIR]  ";
-   $output .= strftime("%d.%m.%Y %H:%M",localtime($stat[9]));
+   $output .= strftime($config->{'timeformat'},localtime($stat[9]));
    $output .= " " x 10;
-   $output .= "".encode_entities($dir)."/\n";
+   $output .= "".encode_entities($dir)."/\n";
   }
 
   # Files
 
   foreach my $file(@$files)
   {
-   my @stat      = stat($physical."/".$file);
-   my $virt_path = $virtual.$file;
+   my $phys_path = $physical."/".$file; # Not exactly...
+   my $virt_path = encode_entities($virtual.$file);
+
+   my @stat      = stat($phys_path);
    my $in_use    = $data->{'uselist'}->in_use($virtual.$file);
 
    $output .= " " x (10 - length($stat[7]));
    $output .= $stat[7];
    $output .= "  ";
-   $output .= strftime("%d.%m.%Y %H:%M",localtime($stat[9]));
-   $output .= ($in_use) ? " (IN USE) " : " " x 10;
+   $output .= strftime($config->{'timeformat'},localtime($stat[9]));
+   $output .= ($in_use) ? " (IN USE) " : (not -T $phys_path) ? " (BINARY) " : " " x 10;
    $output .= encode_entities($file);
    $output .= " " x ($max_name_len - length($file))."\t  (";
-   $output .= "View | ";
 
-   $output .= ($in_use)
+   $output .= (-T $phys_path)
+              ? "View"
+              : 'View';
+
+   $output .= " | ";
+
+   $output .= ($in_use || not -T $phys_path)
               ? 'Edit'
               : "Edit";
 
@@ -134,15 +140,27 @@ sub exec_show($$$)
   }
 
   $output .= "
\n\n
\n\n"; + + # Bottom of directory listing + # (Fields for creating files and directories) + $output .= < +
+ + Create new directory: -$virtual +$virtual +
Create new file: -$virtual +
+ + +$virtual +
@@ -155,8 +173,10 @@ END # View a file # Check on binary files + # We have to do it in this way, or empty files + # will be recognized as binary files - if(-B $physical) + unless(-T $physical) { # Binary file @@ -166,7 +186,7 @@ END { # Text file - $output = htmlhead("Contents of file $virtual"); + $output = htmlhead("Contents of file ".encode_entities($virtual)); $output .= equal_url($config->{'httproot'},$virtual); $output .= dir_link($virtual); @@ -179,7 +199,7 @@ END } } - return \$output + return \$output; } # exec_beginedit @@ -203,7 +223,7 @@ sub exec_beginedit($$) # Check on binary files - if(-B $physical) + unless(-T $physical) { # Binary file @@ -216,27 +236,33 @@ sub exec_beginedit($$) $uselist->add_file($virtual); $uselist->save; - my $dir = upper_path($virtual); - my $content = encode_entities(${file_read($physical)}); + my $dir = upper_path($virtual); + my $content = encode_entities(${file_read($physical)}); + + my $equal_url = equal_url($config->{'httproot'},$virtual); + + $virtual = encode_entities($virtual); my $output = htmlhead("Edit file $virtual"); - $output .= equal_url($config->{'httproot'},$virtual); + $output .= $equal_url; $output .= <Caution! This file is locked for other users while you are editing it. To unlock it, click Save and exit or Exit WITHOUT saving. Please don't click the Reload button in your browser! This will confuse the editor.

-
+

-
+ - + @@ -280,15 +306,23 @@ sub exec_endedit($$) $content = encode_entities($content,"\200-\377"); } + if($data->{'cgi'}->param('saveas')) + { + # Create the new filename + + $physical = $data->{'new_physical'}; + $virtual = $data->{'new_virtual'}; + } + if(file_save($physical,\$content)) { - # Saving of the file was successfull - so unlock it! + # Saving of the file was successful - so unlock it! return exec_unlock($data,$config); } else { - return error("Saving of file '$virtual' failed'"); + return error("Saving of file '".encode_entities($virtual)."' failed'."); } } @@ -303,7 +337,18 @@ sub exec_endedit($$) sub exec_mkfile($$) { - 1; + my ($data,$config) = @_; + my $new_physical = $data->{'new_physical'}; + my $new_virtual = $data->{'new_virtual'}; + 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); + + 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; } # exec_mkdir() @@ -317,7 +362,18 @@ sub exec_mkfile($$) sub exec_mkdir($$) { - 1; + my ($data,$config) = @_; + my $new_physical = $data->{'new_physical'}; + my $new_virtual = $data->{'new_virtual'}; + 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'."); + + my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=$dir"); + return \$output; } # exec_workwithfile() @@ -336,19 +392,30 @@ sub exec_workwithfile($$) my $virtual = $data->{'virtual'}; my $unused = $data->{'uselist'}->unused($virtual); - my $output = htmlhead("Work with file $virtual"); + my $dir = encode_entities(upper_path($virtual)); + + my $output = htmlhead("Work with file ".encode_entities($virtual)); $output .= equal_url($config->{'httproot'},$virtual); + + $virtual = encode_entities($virtual); + $output .= dir_link($virtual); $output .= "

Note: On UNIX systems, filenames are case-sensitive!

\n\n"; $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 .= <

Copy

-

Copy file '$virtual' to:

+ + + +

Copy file '$virtual' to: $dir

+
@@ -356,10 +423,17 @@ END if($unused) { + # File is not locked + # Allow renaming and deleting the file + $output .= <Move/rename -

Move/Rename file '$virtual' to:

+
+ + +

Move/Rename file '$virtual' to: $dir

+
@@ -374,10 +448,13 @@ END } else { + # File is locked + # Just display a button for unlocking it + $output .= <Unlock file -

Someone else is currently editing this file. At least, the file is marked so. Maybe, someone who was editing the file, has forgotten to unlock it. In this case (and only in this case) you can unlock the file using this button:

+

Someone else is currently editing this file. At least, the file is marked so. Maybe, someone who was editing the file has forgotten to unlock it. In this case (and only in this case) you can unlock the file using this button:

@@ -404,7 +481,25 @@ END sub exec_copy($$) { - 1; + my ($data,$config) = @_; + my $physical = $data->{'physical'}; + my $virtual = encode_entities($data->{'virtual'}); + my $new_physical = $data->{'new_physical'}; + my $new_virtual = $data->{'new_virtual'}; + my $dir = upper_path($new_virtual); + $new_virtual = encode_entities($new_virtual); + + return error("This editor is not able to copy directories.") if(-d $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."); + } + + 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; } # exec_rename() @@ -418,7 +513,25 @@ sub exec_copy($$) sub exec_rename($$) { - 1; + my ($data,$config) = @_; + my $physical = $data->{'physical'}; + my $virtual = $data->{'virtual'}; + my $new_physical = $data->{'new_physical'}; + my $new_virtual = $data->{'new_virtual'}; + my $dir = upper_path($new_virtual); + $new_virtual = encode_entities($new_virtual); + + return error_in_use($virtual) if($data->{'uselist'}->in_use($virtual)); + + 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."); + } + + 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; } # exec_remove() @@ -436,13 +549,12 @@ sub exec_remove($$) my $physical = $data->{'physical'}; my $virtual = $data->{'virtual'}; + return error("Deleting directories is currently unsupported") if(-d $physical); return error_in_use($virtual) if($data->{'uselist'}->in_use($virtual)); - my $dir = upper_path($virtual); - - unlink($physical); + unlink($physical) or return error("Could not delete file '".encode_entities($virtual)."'."); - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=$dir"); + my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=".upper_path($virtual)); return \$output; } @@ -459,16 +571,13 @@ sub exec_remove($$) sub exec_unlock($$) { my ($data,$config) = @_; - my $physical = $data->{'physical'}; my $virtual = $data->{'virtual'}; my $uselist = $data->{'uselist'}; - my $dir = upper_path($virtual); - $uselist->remove_file($virtual); $uselist->save; - my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=$dir"); + my $output = redirect("http://$ENV{'HTTP_HOST'}$script?command=show&file=".upper_path($virtual)); return \$output; }
Save as new file: $dir + + Save as new file: $dir Encode ISO-8859-1 special chars