From: pcanterino <>
Date: Fri, 13 Feb 2004 12:40:18 +0000 (+0000)
Subject: Began to implement the possibility to control the output using template files
X-Git-Tag: version_2_0~38
X-Git-Url: https://git.p6c8.net/devedit.git/commitdiff_plain/03d83644ce2d958fe3e0466fa272c67f0566f4ab
Began to implement the possibility to control the output using template files
and the configuration file.
The source code became much cleaner and we can now easily change the output.
The template system is not completely implemented yet, but I thought it's time
to save the current state of development.
---
diff --git a/devedit.dat b/devedit.dat
index 63f2928..c34d150 100644
--- a/devedit.dat
+++ b/devedit.dat
@@ -3,11 +3,39 @@
#
# Please don't use quotation marks around the keys and values!
-fileroot = D:/Server/WWW/dokumente/devedit-test
+fileroot = D:/WWW/dokumente/devedit-test
httproot = /devedit-test/
timeformat = %d.%m.%Y %H:%M
uselist_file = uselist
lock_file = uselist.lock
lock_timeout = 10
+# ========================================================
+# You don't need to change the values below this comment
+# ========================================================
+
+# Templates
+
+tpl_dirlist = templates/dirlist.htm
+tpl_viewfile = templates/viewfile.htm
+tpl_editfile = templates/editfile.htm
+tpl_confirm_rmfile = templates/confirm_rmfile.htm
+tpl_confirm_rmdir = templates/confirm_rmdir.htm
+tpl_confirm_unlock = templates/confirm_unlock.htm
+tpl_confirm_replace = templates/confirm_replace.htm
+tpl_dirlist_file = templates/dirlist_file.htm
+tpl_dirlist_dir = templates/dirlist_dir.htm
+tpl_dirlist_up = templates/dirlist_up.htm
+tpl_error = templates/error.htm
+
+# Error messages
+
+err_binary = This editor is not able to view/edit binary files.
+err_editdir = You cannot edit directories.
+err_noedit = You have not enough permissions to edit this file.
+err_edit_failed = Saving of file '{FILE}' failed. The file could be damaged, please check its integrity.
+err_delete_failed = Could not delete file '{FILE}'.
+err_above_root = Accessing files and directories above the virtual root directory is forbidden.
+err_create_ar = You aren't allowed to create files and directories above the virtual root directory.
+
# End of configuration file
\ No newline at end of file
diff --git a/devedit.pl b/devedit.pl
index a525ec0..7a27e58 100644
--- a/devedit.pl
+++ b/devedit.pl
@@ -6,7 +6,7 @@
# Dev-Editor's main program
#
# Author: Patrick Canterino
-# Last modified: 2004-01-16
+# Last modified: 2004-02-06
#
use strict;
@@ -27,6 +27,7 @@ use constant CONFIGFILE => 'devedit.dat';
# Read the configuration file
my $config = read_config(CONFIGFILE);
+error_template($config->{'tpl_error'}); # Yes, I'm lazy...
# Read the most important form data
@@ -64,7 +65,7 @@ if($newfile ne '')
unless(($new_physical,$new_virtual) = check_path($config->{'fileroot'},$dir))
{
- abort("You aren't allowed to create files and directories above the virtual root directory.");
+ abort($config->{'err_creat_ar'});
}
# Create the physical and the virtual path
@@ -105,7 +106,7 @@ if(-e clean_path($config->{'fileroot'}."/".$file))
}
else
{
- abort("Accessing files and directories above the virtual root directory is forbidden.");
+ abort($config->{'err_above_root'});
}
}
else
diff --git a/modules/Command.pm b/modules/Command.pm
index ceee24d..d84d42f 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: 2003-12-22
+# Last modified: 2004-02-06
#
use strict;
@@ -17,26 +17,26 @@ use File::Access;
use File::Copy;
use File::Path;
-use HTML::Entities;
-use Output;
use POSIX qw(strftime);
use Tool;
+use CGI qw(header);
+use HTML::Entities;
+use Output;
+use Template;
+
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
+my %dispatch = ('show' => \&exec_show,
+ 'beginedit' => \&exec_beginedit,
+ 'canceledit' => \&exec_canceledit,
+ 'endedit' => \&exec_endedit,
+ 'mkdir' => \&exec_mkdir,
+ 'mkfile' => \&exec_mkfile,
+ 'copy' => \&exec_copy,
+ 'rename' => \&exec_rename,
+ 'remove' => \&exec_remove,
+ 'unlock' => \&exec_unlock
);
### Export ###
@@ -91,32 +91,22 @@ sub exec_show($$)
my $files = $direntries->{'files'};
my $dirs = $direntries->{'dirs'};
- $output .= htmlhead("Directory listing of $virtual");
- $output .= equal_url($config->{'httproot'},$virtual);
- $output .= "\n\n
\n";
+ my $dirlist = "";
# Create the link to the upper directory
# (only if we are not in the root directory)
unless($virtual eq "/")
{
- my $upper = $physical."/..";
- my @stat = stat($upper);
+ my @stat = stat($physical."/..");
- $output .= " [SUBDIR] ";
- $output .= strftime("%d.%m.%Y %H:%M",localtime($stat[9]));
- $output .= " " x 10;
- $output .= "../\n";
- }
+ my $udtpl = new Template;
+ $udtpl->read_file($config->{'tpl_dirlist_up'});
- # Get the length of the longest file/directory name
+ $udtpl->fillin("UPPER_DIR",encode_entities(upper_path($virtual)));
+ $udtpl->fillin("DATE",strftime($config->{'timeformat'},localtime($stat[9])));
- my $max_name_len = 0;
-
- foreach(@$dirs,@$files)
- {
- my $length = length($_);
- $max_name_len = $length if($length > $max_name_len);
+ $dirlist .= $udtpl->get_template;
}
# Directories
@@ -126,13 +116,14 @@ sub exec_show($$)
my @stat = stat($physical."/".$dir);
my $virt_path = encode_entities($virtual.$dir."/");
- $output .= " ";
- $output .= "[SUBDIR] ";
- $output .= strftime($config->{'timeformat'},localtime($stat[9]));
- $output .= " " x 10;
- $output .= "".encode_entities($dir)."/";
- $output .= " " x ($max_name_len - length($dir) - 1)."\t (";
- $output .= "Work with directory)\n";
+ my $dtpl = new Template;
+ $dtpl->read_file($config->{'tpl_dirlist_dir'});
+
+ $dtpl->fillin("DIR",$virt_path);
+ $dtpl->fillin("DIR_NAME",$dir);
+ $dtpl->fillin("DATE",strftime($config->{'timeformat'},localtime($stat[9])));
+
+ $dirlist .= $dtpl->get_template;
}
# Files
@@ -145,83 +136,37 @@ sub exec_show($$)
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($config->{'timeformat'},localtime($stat[9]));
- $output .= " " x 10;
- $output .= encode_entities($file);
- $output .= " " x ($max_name_len - length($file))."\t (";
-
- # Link "View"
+ my $ftpl = new Template;
+ $ftpl->read_file($config->{'tpl_dirlist_file'});
- if(-r $phys_path && -T $phys_path)
- {
- $output .= "View";
- }
- else
- {
- $output .= 'fillin("FILE_NAME",$file);
+ $ftpl->fillin("SIZE",$stat[7]);
+ $ftpl->fillin("DATE",strftime($config->{'timeformat'},localtime($stat[9])));
- $output .= (not -r $phys_path) ? "Not readable" :
- (-B $phys_path) ? "Binary file" : "";
+ $ftpl->parse_if_block("not_readable",not -r $phys_path);
+ $ftpl->parse_if_block("binary",-B $phys_path);
+ $ftpl->parse_if_block("readonly",not -w $phys_path);
- $output .= '">View';
- }
+ $ftpl->parse_if_block("viewable",-r $phys_path && -T $phys_path);
+ $ftpl->parse_if_block("editable",-w $phys_path && -r $phys_path && -T $phys_path && not $in_use);
- $output .= " | ";
+ $ftpl->parse_if_block("in_use",$in_use);
+ $ftpl->parse_if_block("unused",not $in_use);
- # Link "Edit"
-
- if(-w $phys_path && -r $phys_path && -T $phys_path && not $in_use)
- {
- $output .= "Edit";
- }
- else
- {
- $output .= 'get_template;
+ }
- # Link "Do other stuff"
+ my $tpl = new Template;
+ $tpl->read_file($config->{'tpl_dirlist'});
- $output .= " | Work with file)\n";
- }
+ $tpl->fillin("DIRLIST",$dirlist);
+ $tpl->fillin("DIR",$virtual);
+ $tpl->fillin("SCRIPT",$script);
+ $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual));
- $output .= "
\n\n\n\n";
-
- # Bottom of directory listing
- # (Fields for creating files and directories)
-
- $output .= <
-
-
-
-
-
Create new file:
-
-
-
-
-
-END
- $output .= htmlfoot;
+ $output = header(-type => "text/html");
+ $output .= $tpl->get_template;
}
else
{
@@ -237,22 +182,25 @@ END
{
# Binary file
- return error("This editor is not able to view/edit binary files.",upper_path($virtual));
+ return error($config->{'err_binary'},upper_path($virtual));
}
else
{
# Text file
- $output = htmlhead("Contents of file ".encode_entities($virtual));
- $output .= equal_url($config->{'httproot'},$virtual);
- $output .= dir_link($virtual);
+ my $content = file_read($physical);
+
+ my $tpl = new Template;
+ $tpl->read_file($config->{'tpl_viewfile'});
- $output .= '
";
+ $tpl->fillin("FILE",$virtual);
+ $tpl->fillin("DIR",upper_path($virtual));
+ $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual));
+ $tpl->fillin("SCRIPT",$script);
+ $tpl->fillin("CONTENT",encode_entities($$content));
- $output .= htmlfoot;
+ $output = header(-type => "text/html");
+ $output .= $tpl->get_template;
}
}
@@ -275,9 +223,9 @@ sub exec_beginedit($$)
my $virtual = $data->{'virtual'};
my $uselist = $data->{'uselist'};
- return error("You cannot edit directories.",upper_path($virtual)) if(-d $physical);
+ return error($config->{'err_editdir'},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);
+ return error($config->{'err_noedit'},upper_path($virtual)) unless(-r $physical && -w $physical);
# Check on binary files
@@ -285,7 +233,7 @@ sub exec_beginedit($$)
{
# Binary file
- return error("This editor is not able to view/edit binary files.",upper_path($virtual));
+ return error($config->{'err_binary'},upper_path($virtual));
}
else
{
@@ -294,49 +242,41 @@ sub exec_beginedit($$)
$uselist->add_file($virtual);
$uselist->save;
- my $dir = upper_path($virtual);
- my $content = encode_entities(${file_read($physical)});
+ my $content = file_read($physical);
- my $equal_url = equal_url($config->{'httproot'},$virtual);
+ my $tpl = new Template;
+ $tpl->read_file($config->{'tpl_editfile'});
- $virtual = encode_entities($virtual);
+ $tpl->fillin("FILE",$virtual);
+ $tpl->fillin("DIR",upper_path($virtual));
+ $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual));
+ $tpl->fillin("SCRIPT",$script);
+ $tpl->fillin("CONTENT",encode_entities($$content));
- 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.
+ my $output = header(-type => "text/html");
+ $output .= $tpl->get_template;
-
-
-
-END
+# exec_canceledit()
+#
+# Abort file editing
+#
+# Params: 1. Reference to user input hash
+# 2. Reference to config hash
+#
+# Return: Output of the command (Scalar Reference)
- $output .= htmlfoot;
+sub exec_canceledit($$)
+{
+ my ($data,$config) = @_;
+ my $virtual = $data->{'virtual'};
+ my $uselist = $data->{'uselist'};
- return \$output;
- }
+ file_unlock($uselist,$virtual);
+ return devedit_reload({command => 'show', file => upper_path($virtual)});
}
# exec_endedit()
@@ -355,8 +295,8 @@ sub exec_endedit($$)
my $virtual = $data->{'virtual'};
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);
+ return error($config->{'err_editdir'},upper_path($virtual)) if(-d $physical);
+ return error($config->{'err_noedit'},upper_path($virtual)) unless(-r $physical && -w $physical);
# Normalize newlines
@@ -381,11 +321,12 @@ sub exec_endedit($$)
{
# Saving of the file was successful - so unlock it!
- return exec_unlock($data,$config);
+ file_unlock($data->{'uselist'},$virtual);
+ return devedit_reload({command => 'show', file => upper_path($virtual)});
}
else
{
- return error("Saving of file '".encode_entities($virtual)."' failed'. The file could be damaged, please check it's integrity.",upper_path($virtual));
+ return error($config->{'err_editfailed'},upper_path($virtual),{FILE => $virtual});
}
}
@@ -435,159 +376,6 @@ sub exec_mkdir($$)
return devedit_reload({command => 'show', file => $dir});
}
-# exec_workwithfile()
-#
-# Display a form for renaming/copying/removing/unlocking a file
-#
-# Params: 1. Reference to user input hash
-# 2. Reference to config hash
-#
-# Return: Output of the command (Scalar Reference)
-
-sub exec_workwithfile($$)
-{
- my ($data,$config) = @_;
- my $physical = $data->{'physical'};
- my $virtual = $data->{'virtual'};
- my $unused = $data->{'uselist'}->unused($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);
-
- $output .= "\n\n";
-
- # Copying of the file is always allowed - but we need read access
-
- if(-r $physical)
- {
- $output .= <Copy
-
-
-
-
-
-END
- }
-
- if($unused)
- {
- # File is not locked
- # Allow renaming and deleting the file
-
- $output .= <Move/rename
-
-
-
-
-
-
Remove
-
-
Click on the button below to remove the file '$virtual'.
-
-
-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:
-
-
-END
- }
-
- $output .= "\n";
- $output .= htmlfoot;
-
- return \$output;
-}
-
-# exec_workwithdir()
-#
-# Display a form for renaming/removing a directory
-#
-# Params: 1. Reference to user input hash
-# 2. Reference to config hash
-#
-# Return: Output of the command (Scalar Reference)
-
-sub exec_workwithdir($$)
-{
- my ($data,$config) = @_;
- my $physical = $data->{'physical'};
- my $virtual = $data->{'virtual'};
-
- my $dir = encode_entities(upper_path($virtual));
-
- my $output = htmlhead("Work with directory ".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!
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:
+
+
+
+
\ No newline at end of file
diff --git a/templates/dirlist.htm b/templates/dirlist.htm
new file mode 100644
index 0000000..ca83e30
--- /dev/null
+++ b/templates/dirlist.htm
@@ -0,0 +1,45 @@
+
+
+
+
+Directory listing of {DIR}
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/dirlist_file.htm b/templates/dirlist_file.htm
new file mode 100644
index 0000000..a010fb5
--- /dev/null
+++ b/templates/dirlist_file.htm
@@ -0,0 +1,6 @@
+
\ No newline at end of file
diff --git a/templates/dirlist_up.htm b/templates/dirlist_up.htm
new file mode 100644
index 0000000..d35f7a4
--- /dev/null
+++ b/templates/dirlist_up.htm
@@ -0,0 +1,5 @@
+
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.
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/templates/error.htm b/templates/error.htm
new file mode 100644
index 0000000..4cbd60a
--- /dev/null
+++ b/templates/error.htm
@@ -0,0 +1,17 @@
+
+
+
+
+Error
+
+
+
+
+