X-Git-Url: https://git.p6c8.net/devedit.git/blobdiff_plain/a1cc5ce8035db2ac85e3a4ae675c504ff595d3b6..d45094b7ee0dee87ae03d62f9e9a0a3e2196add8:/modules/Command.pm?ds=sidebyside
diff --git a/modules/Command.pm b/modules/Command.pm
index ceee24d..8e899d3 100644
--- a/modules/Command.pm
+++ b/modules/Command.pm
@@ -6,7 +6,7 @@ package Command;
# Execute Dev-Editor's commands
#
# Author: Patrick Canterino
\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 +118,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,89 +138,39 @@ 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 (";
+ my $ftpl = new Template;
+ $ftpl->read_file($config->{'tpl_dirlist_file'});
- # Link "View"
+ $ftpl->fillin("FILE",$virt_path);
+ $ftpl->fillin("FILE_NAME",$file);
+ $ftpl->fillin("SIZE",$stat[7]);
+ $ftpl->fillin("DATE",strftime($config->{'timeformat'},localtime($stat[9])));
- if(-r $phys_path && -T $phys_path)
- {
- $output .= "View";
- }
- else
- {
- $output .= '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);
- if(-w $phys_path && -r $phys_path && -T $phys_path && not $in_use)
- {
- $output .= "Edit";
- }
- else
- {
- $output .= '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);
- # Link "Do other stuff"
+ $ftpl->parse_if_block("in_use",$in_use);
+ $ftpl->parse_if_block("unused",not $in_use);
- $output .= " | Work with file)\n";
+ $dirlist .= $ftpl->get_template;
}
- $output .= "
\n\n
\n\n";
-
- # Bottom of directory listing
- # (Fields for creating files and directories)
-
- $output .= <
-
-
-
-
-
-
-Create new file:
-
-
-END
- $output .= htmlfoot;
+ $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));
}
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
@@ -237,25 +180,28 @@ 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);
+ $$content =~ s/\015\012|\012|\015/\n/g;
- $output .= ''."\n";
- $output .= encode_entities(${file_read($physical)});
- $output .= "\n
\n
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 .= "Click on the button below to remove the file '$virtual'.
+ close(FILE); - -END + return devedit_reload({command => "show", file => $virtual}); } else { - # File is locked - # Just display a button for unlocking it + my $tpl = new Template; + $tpl->read_file($config->{'tpl_upload'}); - $output .= <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:
+ my $output = header(-type => "text/html"); + $output .= $tpl->get_template; - -END + return \$output; } - - $output .= "\nNote: On UNIX systems, filenames are case-sensitive!
\n\n"; - $output .= "Click on the button below to completely remove the directory '$virtual' and oll of it's files and sub directories.
- - -END - - $output .= "\nA file called '$new_virtual' already exists. Do you want to replace it?
- - + if(-d $new_physical) + { + return error($config->{'err_dircopy'}); + } + 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; + } + } - -END + $tpl->fillin("FILE",$virtual); + $tpl->fillin("DIR",upper_path($virtual)); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); - $output .= htmlfoot; + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; - return \$output; - } - } - - 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() @@ -671,61 +533,67 @@ sub exec_rename($$) 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)); + return error($config->{'err_in_use'},upper_path($virtual),{FILE => $virtual}) if($data->{'uselist'}->in_use($virtual)); - if(-e $new_physical) + if($new_physical) { - if(-d $new_physical) - { - return error("A directory called '$new_virtual' already exists. You cannot replace a directory!",upper_path($virtual)); - } - elsif(not $data->{'cgi'}->param('confirmed')) - { - $dir = encode_entities($dir); - - my $output = htmlhead("Replace existing file"); - $output .= <<"END"; -A file called '$new_virtual' already exists. Do you want to replace it?
+ my $new_virtual = $data->{'new_virtual'}; + my $dir = upper_path($new_virtual); + $new_virtual = encode_entities($new_virtual); - + if(-e $new_physical) + { + return error($config->{'err_exist_edited'},$dir,{FILE => $new_virtual}) if($data->{'uselist'}->in_use($data->{'new_virtual'})); - -END + rename($physical,$new_physical) or return error($config->{'err_rename_failed'},upper_path($virtual),{FILE => $virtual, NEW_FILE => $new_virtual}); + return devedit_reload({command => 'show', file => $dir}); + } + else + { + my $tpl = new Template; + $tpl->read_file($config->{'tpl_renamefile'}); - $output .= htmlfoot; + $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() # -# Remove a file and return to directory view +# Remove a file or a directory and return to directory view # # Params: 1. Reference to user input hash # 2. Reference to config hash @@ -738,132 +606,97 @@ sub exec_remove($$) my $physical = $data->{'physical'}; my $virtual = $data->{'virtual'}; - return exec_rmdir($data,$config) if(-d $physical); - return error_in_use($virtual) if($data->{'uselist'}->in_use($virtual)); - - if($data->{'cgi'}->param('confirmed')) - { - unlink($physical) or return error("Could not delete file '".encode_entities($virtual)."'.",upper_path($virtual)); - return devedit_reload({command => 'show', file => upper_path($virtual)}); - } - else + if(-d $physical) { - my $dir = encode_entities(upper_path($virtual)); - my $output; - - $output = htmlhead("Remove file ".encode_entities($virtual)); - $output .= equal_url($config->{'httproot'},$virtual); + # Remove a directory - $virtual = encode_entities($virtual); + if($data->{'cgi'}->param('confirmed')) + { + rmtree($physical); + return devedit_reload({command => 'show', file => upper_path($virtual)}); + } + else + { + my $tpl = new Template; + $tpl->read_file($config->{'tpl_confirm_rmdir'}); - $output .= dir_link($virtual); + $tpl->fillin("DIR",$virtual); + $tpl->fillin("UPPER_DIR",upper_path($virtual)); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); - $output .= <<"END"; -Do you really want to remove the file '$virtual'?
+ my $output = header(-type => "text/html"); + $output .= $tpl->get_template; - + return error($config->{'err_in_use'},upper_path($virtual),{FILE => $virtual}) if($data->{'uselist'}->in_use($virtual)); - -END + $tpl->fillin("FILE",$virtual); + $tpl->fillin("DIR",upper_path($virtual)); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); - $output .= htmlfoot; + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; - return \$output; + return \$output; + } } } -# exec_rmdir() +# exec_unlock() # -# Remove a directory and return to directory view +# Remove a file from the list of used files and +# return to directory view # # Params: 1. Reference to user input hash # 2. Reference to config hash # # Return: Output of the command (Scalar Reference) -sub exec_rmdir($$) +sub exec_unlock($$) { my ($data,$config) = @_; - my $physical = $data->{'physical'}; my $virtual = $data->{'virtual'}; - return exec_remove($data,$config) if(not -d $physical); - if($data->{'cgi'}->param('confirmed')) { - rmtree($physical); + file_unlock($data->{'uselist'},$virtual); return devedit_reload({command => 'show', file => upper_path($virtual)}); } else { - my $dir = encode_entities(upper_path($virtual)); - my $output; - - $output = htmlhead("Remove directory ".encode_entities($virtual)); - $output .= equal_url($config->{'httproot'},$virtual); - - $virtual = encode_entities($virtual); - - $output .= dir_link($virtual); + my $tpl = new Template; + $tpl->read_file($config->{'tpl_confirm_unlock'}); - $output .= <<"END"; -Do you really want to remove the directory '$virtual' and all of it's files and sub directories?
+ $tpl->fillin("FILE",$virtual); + $tpl->fillin("DIR",upper_path($virtual)); + $tpl->fillin("URL",equal_url($config->{'httproot'},$virtual)); + $tpl->fillin("SCRIPT",$script); - - - -END - - $output .= htmlfoot; + my $output = header(-type => "text/html"); + $output .= $tpl->get_template; return \$output; } } -# exec_unlock() -# -# Remove a file from the list of used files and -# return to directory view -# -# Params: 1. Reference to user input hash -# 2. Reference to config hash -# -# Return: Output of the command (Scalar Reference) - -sub exec_unlock($$) -{ - my ($data,$config) = @_; - my $virtual = $data->{'virtual'}; - my $uselist = $data->{'uselist'}; - - $uselist->remove_file($virtual); - $uselist->save; - - return devedit_reload({command => 'show', file => upper_path($virtual)}); -} - # it's true, baby ;-) 1;