From a6bb5ed04fe4aa01b2716edfd4ed45a6ed91c011 Mon Sep 17 00:00:00 2001 From: pcanterino <> Date: Fri, 20 Feb 2004 11:51:30 +0000 Subject: [PATCH] Copying and renaming of files is back again! Additionally, there was an error which caused existing files not to be replaced if they were not in the root directory. Now, this is fixed. --- devedit.dat | 6 ++ devedit.pl | 4 +- modules/Command.pm | 170 +++++++++++++++++++++------------- templates/confirm_replace.htm | 7 +- templates/copyfile.htm | 27 ++++++ templates/dirlist_dir.htm | 2 +- templates/dirlist_file.htm | 2 +- templates/renamefile.htm | 27 ++++++ 8 files changed, 174 insertions(+), 71 deletions(-) create mode 100644 templates/copyfile.htm create mode 100644 templates/renamefile.htm diff --git a/devedit.dat b/devedit.dat index c34d150..45d469d 100644 --- a/devedit.dat +++ b/devedit.dat @@ -19,6 +19,8 @@ lock_timeout = 10 tpl_dirlist = templates/dirlist.htm tpl_viewfile = templates/viewfile.htm tpl_editfile = templates/editfile.htm +tpl_copyfile = templates/copyfile.htm +tpl_renamefile = templates/renamefile.htm tpl_confirm_rmfile = templates/confirm_rmfile.htm tpl_confirm_rmdir = templates/confirm_rmdir.htm tpl_confirm_unlock = templates/confirm_unlock.htm @@ -37,5 +39,9 @@ err_edit_failed = Saving of file '{FILE}' failed. The file could be damaged, p 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. +err_dir_read_fail = Reading of directory '{DIR}' failed. +err_noview = You have not enough permissions to view this file. +err_nocopy = You have not enough permissions to copy this file. +err_dircopy = This editor is not able to copy directories. # End of configuration file \ No newline at end of file diff --git a/devedit.pl b/devedit.pl index 7a27e58..b933cf1 100644 --- a/devedit.pl +++ b/devedit.pl @@ -6,7 +6,7 @@ # Dev-Editor's main program # # Author: Patrick Canterino -# Last modified: 2004-02-06 +# Last modified: 2004-02-20 # use strict; @@ -65,7 +65,7 @@ if($newfile ne '') unless(($new_physical,$new_virtual) = check_path($config->{'fileroot'},$dir)) { - abort($config->{'err_creat_ar'}); + abort($config->{'err_create_ar'}); } # Create the physical and the virtual path diff --git a/modules/Command.pm b/modules/Command.pm index d84d42f..4a5e768 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: 2004-02-06 +# Last modified: 2004-02-20 # use strict; @@ -79,14 +79,15 @@ sub exec_show($$) my ($data,$config) = @_; my $physical = $data->{'physical'}; my $virtual = $data->{'virtual'}; - my $output; + + my $tpl = new Template; if(-d $physical) { # Create directory listing my $direntries = dir_read($physical); - return error("Reading of directory $virtual failed.",upper_path($virtual)) unless($direntries); + return error($config->{'dir_read_failed'},upper_path($virtual),{DIR => '$virtual'}) unless($direntries); my $files = $direntries->{'files'}; my $dirs = $direntries->{'dirs'}; @@ -157,22 +158,19 @@ sub exec_show($$) $dirlist .= $ftpl->get_template; } - my $tpl = new Template; + $tpl->read_file($config->{'tpl_dirlist'}); $tpl->fillin("DIRLIST",$dirlist); $tpl->fillin("DIR",$virtual); $tpl->fillin("SCRIPT",$script); $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); - - $output = header(-type => "text/html"); - $output .= $tpl->get_template; } else { # View a file - return error("You have not enough permissions to view this file.",upper_path($virtual)) unless(-r $physical); + return error($config->{'err_noview'},upper_path($virtual)) unless(-r $physical); # Check on binary files # We have to do it in this way, or empty files @@ -190,7 +188,6 @@ sub exec_show($$) my $content = file_read($physical); - my $tpl = new Template; $tpl->read_file($config->{'tpl_viewfile'}); $tpl->fillin("FILE",$virtual); @@ -198,12 +195,12 @@ sub exec_show($$) $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); $tpl->fillin("SCRIPT",$script); $tpl->fillin("CONTENT",encode_entities($$content)); - - $output = header(-type => "text/html"); - $output .= $tpl->get_template; } } + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; + return \$output; } @@ -296,7 +293,7 @@ sub exec_endedit($$) my $content = $data->{'cgi'}->param('filecontent'); return error($config->{'err_editdir'},upper_path($virtual)) if(-d $physical); - return error($config->{'err_noedit'},upper_path($virtual)) unless(-r $physical && -w $physical); + return error($config->{'err_noedit'}, upper_path($virtual)) unless(-r $physical && -w $physical); # Normalize newlines @@ -391,45 +388,66 @@ sub exec_copy($$) 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); - return error("You have not enough permissions to copy this file.") unless(-r $physical); + return error($config->{'err_dircopy'}) if(-d $physical); + return error($config->{'err_nocopy'}) unless(-r $physical); - if(-e $new_physical) + if($new_physical) { - if(-d $new_physical) + my $new_virtual = $data->{'new_virtual'}; + my $dir = upper_path($new_virtual); + $new_virtual = encode_entities($new_virtual); + + if(-e $new_physical) { - return error("A directory called '$new_virtual' already exists. You cannot replace a directory by a file!",$dir); + if(-d $new_physical) + { + return error("A directory called '$new_virtual' already exists. You cannot replace a directory by a file!",$dir); + } + elsif(not $data->{'cgi'}->param('confirmed')) + { + my $tpl = new Template; + $tpl->read_file($config->{'tpl_confirm_replace'}); + + $tpl->fillin("FILE",$virtual); + $tpl->fillin("NEW_FILE",$new_virtual); + $tpl->fillin("NEW_FILENAME",file_name($new_virtual)); + $tpl->fillin("NEW_DIR",$dir); + $tpl->fillin("DIR",upper_path($virtual)); + $tpl->fillin("COMMAND","copy"); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); + + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; + + return \$output; + } } - elsif(not $data->{'cgi'}->param('confirmed')) + + if($data->{'uselist'}->in_use($data->{'new_virtual'})) { - my $tpl = new Template; - $tpl->read_file($config->{'tpl_confirm_replace'}); + return error("The target file '$new_virtual' already exists and it is edited by someone else.",$dir); + } - $tpl->fillin("FILE",$virtual); - $tpl->fillin("NEW_FILE",$new_virtual); - $tpl->fillin("DIR",upper_path($virtual)); - $tpl->fillin("COMMAND","copy"); - $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); - $tpl->fillin("SCRIPT",$script); + copy($physical,$new_physical) or return error("Could not copy '$virtual' to '$new_virtual'",upper_path($virtual)); + return devedit_reload({command => 'show', file => $dir}); + } + else + { + my $tpl = new Template; + $tpl->read_file($config->{'tpl_copyfile'}); - my $output = header(-type => "text/html"); - $output .= $tpl->get_template; + $tpl->fillin("FILE",$virtual); + $tpl->fillin("DIR",upper_path($virtual)); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); - return \$output; - } - } + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; - if($data->{'uselist'}->in_use($data->{'new_virtual'})) - { - return error("The target file '$new_virtual' already exists and it is edited by someone else.",$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() @@ -453,38 +471,62 @@ sub exec_rename($$) return error_in_use($virtual) if($data->{'uselist'}->in_use($virtual)); - if(-e $new_physical) + if($new_physical) { - if(-d $new_physical) + my $new_virtual = $data->{'new_virtual'}; + my $dir = upper_path($new_virtual); + $new_virtual = encode_entities($new_virtual); + + if(-e $new_physical) { - return error("A directory called '$new_virtual' already exists. You cannot replace a directory!",upper_path($virtual)); + if(-d $new_physical) + { + return error("A directory called '$new_virtual' already exists. You cannot replace a directory by a file!",$dir); + } + elsif(not $data->{'cgi'}->param('confirmed')) + { + my $tpl = new Template; + $tpl->read_file($config->{'tpl_confirm_replace'}); + + $tpl->fillin("FILE",$virtual); + $tpl->fillin("NEW_FILE",$new_virtual); + $tpl->fillin("NEW_FILENAME",file_name($new_virtual)); + $tpl->fillin("NEW_DIR",$dir); + $tpl->fillin("DIR",upper_path($virtual)); + $tpl->fillin("COMMAND","rename"); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); + + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; + + return \$output; + } } - elsif(not $data->{'cgi'}->param('confirmed')) + + if($data->{'uselist'}->in_use($data->{'new_virtual'})) { - my $tpl = new Template; - $tpl->read_file($config->{'tpl_confirm_replace'}); + return error("The target file '$new_virtual' already exists and it is edited by someone else.",$dir); + } - $tpl->fillin("FILE",$virtual); - $tpl->fillin("NEW_FILE",$new_virtual); - $tpl->fillin("DIR",upper_path($virtual)); - $tpl->fillin("COMMAND","rename"); - $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); - $tpl->fillin("SCRIPT",$script); + rename($physical,$new_physical) or return error("Could not move/rename '$virtual' to '$new_virtual'",upper_path($virtual)); + return devedit_reload({command => 'show', file => $dir}); + } + else + { + my $tpl = new Template; + $tpl->read_file($config->{'tpl_renamefile'}); - my $output = header(-type => "text/html"); - $output .= $tpl->get_template; + $tpl->fillin("FILE",$virtual); + $tpl->fillin("DIR",upper_path($virtual)); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); - return \$output; - } - } + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; - if($data->{'uselist'}->in_use($data->{'new_virtual'})) - { - return error("The target file '$new_virtual' already exists and it is edited by someone else.",$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() diff --git a/templates/confirm_replace.htm b/templates/confirm_replace.htm index 52450f5..bd1f15c 100644 --- a/templates/confirm_replace.htm +++ b/templates/confirm_replace.htm @@ -10,12 +10,13 @@

Replace exisiting file

-

A file called '{FILE}' already exists. Do you want to replace it?

+

A file called '{NEW_FILE}' already exists. Do you want to replace it?

-
+ - + +

diff --git a/templates/copyfile.htm b/templates/copyfile.htm new file mode 100644 index 0000000..9733ed2 --- /dev/null +++ b/templates/copyfile.htm @@ -0,0 +1,27 @@ + + + + +Copy file {FILE} + + + + +

Copy file {FILE}

+ +

(equals {URL})

+ +

Back to {DIR}

+ + + + + +

Copy file '{FILE}' to:
+{DIR}

+ +

+
+ + \ No newline at end of file diff --git a/templates/dirlist_dir.htm b/templates/dirlist_dir.htm index e69b3f5..5e95952 100644 --- a/templates/dirlist_dir.htm +++ b/templates/dirlist_dir.htm @@ -2,5 +2,5 @@ [SUBDIR] {DATE} {DIR_NAME}/ -(Rename | Delete) +(Rename | Delete) \ No newline at end of file diff --git a/templates/dirlist_file.htm b/templates/dirlist_file.htm index a010fb5..347c640 100644 --- a/templates/dirlist_file.htm +++ b/templates/dirlist_file.htm @@ -2,5 +2,5 @@ {SIZE} {DATE} {FILE_NAME} -({IF viewable}View{ELSE}View{ENDIF} | {IF editable}Edit{ELSE}Edit{ENDIF} | Copy{IF unused} | Rename | Delete{ENDIF}{IF in_use} | Unlock{ENDIF}) +({IF viewable}View{ELSE}View{ENDIF} | {IF editable}Edit{ELSE}Edit{ENDIF} | Copy{IF unused} | Rename | Delete{ENDIF}{IF in_use} | Unlock{ENDIF}) \ No newline at end of file diff --git a/templates/renamefile.htm b/templates/renamefile.htm new file mode 100644 index 0000000..0d59a07 --- /dev/null +++ b/templates/renamefile.htm @@ -0,0 +1,27 @@ + + + + +Move/Rename file {FILE} + + + + +

Move/Rename file {FILE}

+ +

(equals {URL})

+ +

Back to {DIR}

+ +
+ + + +

Move/Rename file '{FILE}' to:
+{DIR}

+ +

+
+ + \ No newline at end of file -- 2.34.1