~;
} # End List Files Procedure.
# Begin Edit Text File Procedure:
sub edit {
$filename = $FORM{'filename'};
$edit_file = "$data_path/$filename";
$report = &checkname($filename);
if ($report) { &report($report); &list_files; exit; }
if (-e $edit_file) { open(FILE, "$edit_file"); @LINES = ; close(FILE); } else { @LINES = ''; $new = 'yes'; }
if ($new) { print " This is a new file. Input your text below:
"; } else { # edit only text files
if (-T $edit_file) { print " Modify $filename as needed below:
"; } else { &report("$filename is not a text file, only text can be edited."); &list_files; }
}
print qq~
~; } # End Edit Text File Procedure.
# Begin Write Text File Procedure:
sub write {
$filename = $FORM{'filename'};
$report = &checkname($filename);
$Ext = &Check_Ext($filename);
$new_path = "$data_path/$filename";
$new_http = "$data_http/$filename";
if (!-e $new_path) { $new = 'yes';}
unless ($report) {
$FORM{'file'} =~ s/\cM\n/\n/g;
open(FILE,">$new_path"); print FILE "$FORM{'file'}"; close(FILE); if (!$new) { # set permissions on new files
if ($Ext =~ /cgi|pl/i) { $perms = "755"; } else { $perms = "644"; } `chmod $perms $new_path`;
}
}
if ($new) {
if (-e $new_path) {
$report .= "$filename has been created."; } else { $report .= "$filename has not been created."; }
}
else { $report .= "$filename has been edited."; } &report($report);
} # End Write Text File Procedure.
# Begin Make Directory Procedure:
sub makedir {
$directory = $FORM{'directory'};
$new_dir = "$data_path/$directory";
$report = &checkname($directory);
if (-e $new_dir) { $report .= "$directory already exists."; } else { unless ($report) { `mkdir $new_dir`; `chmod 777 $new_dir`; }
if (-e $new_dir) { $report .= "$directory has been created."; } else { $report .= "$directory was not created."; }
}
&report($report);
} # End Make Directory
# Begin Copy Files and Directories
sub confirm_copy { $sel_files = ''; $sel_dirs = '';
if (@file_names) { $sel_files = "files"; }
if (@dir_names) { $sel_dirs = "directories"; }
if (@file_names && @dir_names) { $sel_both = " and "; }
if ($dirname eq '') { $stay_dir = "Root Directory"; }
else { $stay_dir = $dirname; }
if ($sel_files || $sel_dirs) {
print qq~
Copy these $sel_files$sel_both$sel_dirs from: $stay_dir...
to the directory in the text box below.
Enter new names in the text boxes or leave them blank to keep the same name.
~;
foreach $cp_dir (@dir_names) {
print qq~
$cp_dir
~; }
foreach $cp_file (@file_names) {
print qq~
$cp_file
~; }
print qq~
Stay in $stay_dir after copy?
~;
}
else { &report('You must choose one or more files or directories to use copy.'); &list_files; } }
sub copy {
$last_dir = $FORM{'last_dir'};
$new_dir = $FORM{'new_dir'};
$copied = &checkname($new_dir);
if ($last_dir eq $dirname) { $show_last_dir = ""; }
elsif (!$last_dir && $dirname eq $new_dir) { $show_last_dir = "Root/"; } elsif ($dirname eq $new_dir) { $show_last_dir = "$last_dir/"; } if (!$new_dir) { $show_new_dir = "Root/"; } if ($last_dir) { $cp_dir = "$last_dir/"; }
if ($new_dir) { $new_dir_path = "$core_data_path/$new_dir"; } else { $new_dir_path = $core_data_path; }
if (!-e $new_dir_path) { `mkdir $new_dir_path`; `chmod 777 $new_dir`; if (-e $new_dir_path) {$copied .= "Directory: $new_dir has been created. ";} else { $copied .= "Directory: $new_dir was not created. "; }
}
foreach $cp_file (@file_names) {
$new_file = $FORM{$cp_file};
# create new file path from choices
if ($new_dir && $new_file) { $new_full_name = "$new_dir/$new_file"; } elsif ($new_dir && !$new_file) { $new_full_name = "$new_dir/$cp_file"; } elsif (!$new_dir && $new_file) { $new_full_name = $new_file; } # root, new name else { $new_full_name = $cp_file; } # root, same name $copied .= &checkname($new_full_name);
# display full file path only for the directory that was not listed if ($dirname eq $last_dir) { # stayed in the same directory
$cp_file_name = $cp_file;
if ($dirname eq $new_dir) { # copied file to current directory if ($new_file) { $new_file_name = $new_file; }
else { $new_file_name = $cp_file; }
}
else { # copied file to different directory
$new_file_name = $show_new_dir . $new_full_name;
}
}
else { # changed to a different directory
$cp_file_name = $show_last_dir . $cp_file;
if ($dirname eq $new_dir) { # copied file to current directory if ($new_file) { $new_file_name = $new_file; }
else { $new_file_name = $cp_file; }
}
else { $new_file_name = $new_full_name; } # copied file to different directory }
$cp_file_path = "$core_data_path/" . $cp_dir . $cp_file;
$new_file_path = "$core_data_path/$new_full_name";
if (-e $new_file_path) { $copied .= "$new_file_name already exists. "; } else { `cp $cp_file_path $new_file_path`;
if (-e $new_file_path) {
$copied .= "$cp_file_name has been copied to $new_file_name. "; } else { $copied .= "$cp_file_name has not been copied. "; }
}
}
&report($copied);
} # End Copy Files and Directories
# Begin Delete Files and Empty Directories
sub Confirm_Delete { $sel_files = ''; $sel_dirs = '';
if (@file_names) { $sel_files = "files"; }
if (@dir_names) { $sel_dirs = "directories"; }
if (@file_names && @dir_names) { $sel_both = " and "; }
print qq~
Are you sure you want to delete these $sel_files$sel_both$sel_dirs?
"; foreach $Dir (sort @rmDirs) { # show all directories and files to delete
print qq~$working_path/$Dir ~;
$rmls = `ls -a $Dir`; @rmls = split(/\s+/, $rmls);
foreach $file (sort @rmls) { if (!-d "$dir_path/$Dir/$file") { print qq~$file ~; } } print "
";
}
print qq~
~;
}
else { # skip to remove if no contents
`rmdir $dir_path`;
if (-e $dir_path) {
&report("$remove_dir was not removed."); &list_files; } else { &report("$remove_dir was removed. It was empty."); &list_files; }
}
}
else { &report("$remove_dir was not found."); &list_files; } }
sub removedir {
$delete_dir = $FORM{'delete_dir'};
$delete_path = "$data_path/$delete_dir";
if (-e $delete_path) { `rm -r $delete_path`;
if (-e $delete_path) { &report("$delete_dir was not removed."); } else { &report("$delete_dir and everything in it has been removed."); }
}
else { &report("$delete_dir was not found."); }
}
# End Remove Directory Routine
# Begin Rename Routine
sub rename {
$old = $FORM{'old'};
$new = $FORM{'new'};
$oldfile = "$data_path/$old";
$newfile = "$data_path/$new";
$report = &checkname($new);
if (-e $oldfile) { unless ($report) { `mv $oldfile $newfile`; } if (!-e $oldfile && -e $newfile) {
$report .= "$old has been renamed to $new."; } else { $report .= "$old has not been renamed."; }
}
else { $report .= "$old was not found."; }
&report($report);
} # End Rename Routine
# Begin Chmod Routine
sub chmod {
$file = $FORM{'file'};
$perms = $FORM{'perms'};
$file_path = "$data_path/$file";
if (-e $file_path) {
if ($perms =~ /[0-7][0-7][0-7]/) { `chmod $perms $file_path`; &report("Permissions for $file have been set to $perms.");
}
else { &report("Permissions for $file have not been set. Invalid number."); } }
else { &report("$file was not found."); }
} # End Chmod Routine
# Begin Error Report for Bad File Name:
sub checkname { $testname = $_[0];
$error = ''; @chars = split(//,$testname); $size = @chars;
if ($size == 0) { $no_name = 'y'; $error = 'y'; }
if ($testname =~ /\.\./) { $double_period = 'y'; $error = 'y'; } if ($testname =~ /\/\//) { $double_slash = 'y'; $error = 'y'; } $character = "";
foreach $char (@chars) {
if (!($char =~ /[A-Z,a-z,'_',\/,\-,0-9,\.]/)) { $bad_char = 'y'; if ($character) { $character = "$character, $char"; } else { $character = $char; } $error = 'y';
}
}
if ($chars[0] eq '/') { $initial_slash = 'y'; $error = 'y'; }
if ($error) {
if ($no_name) { $err .= "No file or directory name was given."; } if ($initial_slash) { $err .= "A forward slash was used as the first character."; } if ($double_period) { $err .= "Two periods were found side by side."; } if ($double_slash) { $err .= "Two forward slashes were found side by side."; } if ($bad_char) { $err .= "The character(s) $character is (are) forbidden.";}
return("Name Error! $err ");
}
} # Finish Error Report for Bad File Name.
# Report Action Routine
sub report { $full_report = $_[0];
print qq~