X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/026334ca3bfc6d4cc1ddeed98f97d1b58eda5512..0d3fcf0e34902845852297696024204919ffc164:/modules/Command.pm
diff --git a/modules/Command.pm b/modules/Command.pm
index 6aa3fc1..1718982 100644
--- a/modules/Command.pm
+++ b/modules/Command.pm
@@ -6,41 +6,64 @@ package Command;
# Execute Dev-Editor's commands
#
# Author: Patrick Canterino
-# Last modified: 09-25-2003
+# Last modified: 2003-12-18
#
use strict;
-use vars qw(@EXPORT
- $script);
-
-use CGI qw(header
- redirect);
+use vars qw(@EXPORT);
use File::Access;
use File::Copy;
+use File::Path;
use HTML::Entities;
use Output;
use POSIX qw(strftime);
use Tool;
-$script = $ENV{'SCRIPT_NAME'};
+my $script = $ENV{'SCRIPT_NAME'};
+
+my %dispatch = ('show' => \&exec_show,
+ 'beginedit' => \&exec_beginedit,
+ 'canceledit' => \&exec_unlock,
+ 'endedit' => \&exec_endedit,
+ 'mkdir' => \&exec_mkdir,
+ 'mkfile' => \&exec_mkfile,
+ 'workwithfile' => \&exec_workwithfile,
+ 'workwithdir' => \&exec_workwithdir,
+ 'copy' => \&exec_copy,
+ 'rename' => \&exec_rename,
+ 'remove' => \&exec_remove,
+ 'rmdir' => \&exec_rmdir,
+ 'unlock' => \&exec_unlock
+ );
### Export ###
use base qw(Exporter);
-@EXPORT = qw(exec_show
- exec_beginedit
- exec_endedit
- exec_mkfile
- exec_mkdir
- exec_workwithfile
- exec_copy
- exec_rename
- exec_remove
- exec_unlock);
+@EXPORT = qw(exec_command);
+
+# exec_command()
+#
+# Execute the specified command
+#
+# Params: 1. Command to execute
+# 2. Reference to user input hash
+# 3. Reference to config hash
+#
+# Return: Output of the command (Scalar Reference)
+
+sub exec_command($$$)
+{
+ my ($command,$data,$config) = @_;
+
+ return error("Unknown command: $command") unless($dispatch{$command});
+
+ my $output = &{$dispatch{$command}}($data,$config);
+ return $output;
+}
# exec_show()
#
@@ -51,7 +74,7 @@ use base qw(Exporter);
#
# Return: Output of the command (Scalar Reference)
-sub exec_show($$$)
+sub exec_show($$)
{
my ($data,$config) = @_;
my $physical = $data->{'physical'};
@@ -63,7 +86,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'};
@@ -86,7 +109,7 @@ sub exec_show($$$)
$output .= "../\n";
}
- # Get the longest file/directory name
+ # Get the length of the longest file/directory name
my $max_name_len = 0;
@@ -100,20 +123,23 @@ sub exec_show($$$)
foreach my $dir(@$dirs)
{
- my @stat = stat($physical."/".$dir);
+ my @stat = stat($physical."/".$dir);
+ my $virt_path = encode_entities($virtual.$dir."/");
$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)."/";
+ $output .= " " x ($max_name_len - length($dir) - 1)."\t (";
+ $output .= "Work with directory)\n";
}
# Files
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);
@@ -122,22 +148,50 @@ sub exec_show($$$)
$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) " : (not -T $phys_path) ? " (BINARY) " : " " x 10;
+ $output .= strftime($config->{'timeformat'},localtime($stat[9]));
+ $output .= " " x 10;
$output .= encode_entities($file);
$output .= " " x ($max_name_len - length($file))."\t (";
- $output .= (-T $phys_path)
- ? "View"
- : 'View';
+ # Link "View"
+
+ if(-r $phys_path && -T $phys_path)
+ {
+ $output .= "View";
+ }
+ else
+ {
+ $output .= 'Edit'
- : "Edit";
+ # Link "Edit"
- $output .= " | Do other stuff)\n";
+ if(-w $phys_path && -r $phys_path && -T $phys_path && not $in_use)
+ {
+ $output .= "Edit";
+ }
+ else
+ {
+ $output .= 'Work with file)\n";
}
$output .= "\n\n\n\n";
@@ -148,12 +202,20 @@ sub exec_show($$$)
$output .= <
+
Create new file:
-
$virtual
+
@@ -165,6 +227,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
@@ -173,7 +237,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
{
@@ -192,7 +256,7 @@ END
}
}
- return \$output
+ return \$output;
}
# exec_beginedit
@@ -211,8 +275,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
@@ -220,7 +285,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
{
@@ -229,30 +294,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 $output = htmlhead("Edit file ".encode_entities($virtual));
- $output .= equal_url($config->{'httproot'},$virtual);
+ my $equal_url = equal_url($config->{'httproot'},$virtual);
- $virtual = encode_entities($virtual);
+ $virtual = encode_entities($virtual);
+ my $output = htmlhead("Edit file $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.