Apache2-FileManager

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

  - Added close button to upload window
  - cleaned up the documentation a bit

0.17 Philip Collins 
  - added return declined stmt if we see nossi param

0.18 Tue Nov 19 15:00 Philip Collins 
  - fixed extract to report error when trying to extract invalid archives
  - Apache::Util::escape_html on all files names
  - added ability to mass select and deselect shown files
  - added ability to edit and preview edited files
  - added error message for rename and edit operation when selected filed != 1
  - fixed bad error after canceling a rename file dialog then refreshing
  - print error dialog when trying to create blank directory name
  - added time to date stamp

0.19 Philip Collins
  - prevented file edit screen from opening when cancel is clicked when creating new filenames
  - fixed up documentation

0.20 David Aguilar
  - Updated to Apache2/mod_perl2

FileManager.pm  view on Meta::CPAN

   $r->print("</HTML>");
 }

 # .. overload the methods ..


=head1 DESCRIPTION

The Apache2::FileManager module is a simple HTML file manager.  It provides
file manipulations such as cut, copy, paste, delete, rename, extract archive,
create directory, create file, edit file, and upload files.

Apache2::FileManager also has the ability to rsync the server htdocs tree to
another server with the click of a button.


=head1 PREREQUISITES

The following (non-core) perl modules must be installed before installing
Apache2::FileManager.

FileManager.pm  view on Meta::CPAN


To get the rsync feature to work do the following:

 #1 log onto the production server

 #2 become root

 #3 give web server user (typically nobody) a home area
   I made mine /usr/local/apache/nobody
   - production_server> mkdir /usr/local/apache/nobody
   - edit passwd file and set new home area for nobody
   - production_server> mkdir /usr/local/apache/nobody/.ssh

 #4 log onto the development server

 #5 become root

 #6 give web server user (typically nobody) a home area
   - dev_server> mkdir /usr/local/apache/nobody
   - dev_server> chown -R nobody.nobody /usr/local/apache/nobody
   - edit passwd file and set new home area for nobody
   - dev_server> su - nobody
   - dev_server> ssh-keygen -t dsa      (don't use passphrase)
   - dev_server> ssh production_server 
     (will fail but will make known_hosts file)
   - log out from user nobody back to root user
   - dev_server> cd /usr/local/apache/nobody/.ssh
   - dev_server> scp id_dsa.pub production_server:/usr/local/apache/nobody/.ssh/authorized_keys
   - dev_server> chown -R nobody.nobody /usr/local/apache/nobody
   - dev_server> chmod -R 700 /usr/local/apache/nobody

FileManager.pm  view on Meta::CPAN

      <!-- Footer -->
      ".$o->html_bottom()."

    </FORM>
    ");

  return undef;
}


sub view_pre_editfile {
  my $o = shift;

  my $editfile = r->param('FILEMANAGER_editfile');
  my $base = "http://".r->hostname."/$editfile";
  $editfile =~ /([^\/]+)$/;
  my $filename = $1;

  my $fh;
  if (-T $filename && -w $filename) {
    $fh = IO::File->new("< ".$filename);
  }

  my $message = "";
  if ($$o{MESSAGE}) {
    $message =

FileManager.pm  view on Meta::CPAN


    <!-- Styles -->
    ".$o->html_style_sheet()."

    <FORM NAME=FileManagerEditFile
          ACTION='".r->uri."'
          METHOD=POST>

      ".$o->html_hidden_fields()."

      <INPUT TYPE=HIDDEN NAME=FILEMANAGER_editfile
             VALUE=\"".r->param('FILEMANAGER_editfile')."\">

      <!-- Header -->
      <TABLE WIDTH=100% CELLPADDING=0 CELLSPAING=0>
        <TR>
          <TD>
            <FONT COLOR=#3a3a3a><B>$base</B></FONT>
          </TD>
        </TR>
      </TABLE>

FileManager.pm  view on Meta::CPAN

                      var f = window.document.FileManagerEditFile;
                      f.FILEMANAGER_cmd.value = 'savefiledata';
                      f.submit();
                      return false;\">
                </TD>
              </TR>
            </TABLE>
          </TD>
        </TR>

        <!-- file edit box -->
        <TR>
          <TD ALIGN=CENTER BGCOLOR=#efefef>
          <TEXTAREA NAME=FILEMANAGER_filedata
            COLS=$$o{EDIT_COLS}
            ROWS=$$o{EDIT_ROWS}>$data</TEXTAREA>
          </TD>
        </TR>

        <!-- Toolbar -->
        <TR>

FileManager.pm  view on Meta::CPAN





    // get the number checked
    function get_num_checked() {
      var sel_ar = get_sel_ckbox_array();
      return sel_ar.length;
    }

    //function to edit file
    function edit_file () {
      var sel_ar = get_sel_ckbox_array();

      //make sure there is 1 and only 1 selected file
      if (sel_ar.length != 1) {
        window.alert('Please select ONE file to edit by clicking on a '+
                     'check box with the mouse.');
      }

      else {
        var f= window.document.FileManager;
        var cd = escape(f.FILEMANAGER_curr_dir.value);
        var editfile = escape(sel_ar[0].value);
        var w = window.open('".r->uri."?FILEMANAGER_cmd=editfile".
                                      "&FILEMANAGER_curr_dir='+cd+'".
                                      "&FILEMANAGER_editfile='+editfile,
                            'FileManagerEditFile',
                            'scrollbars,resizable');
        sel_ar[0].checked = false;
        w.focus();
      }
    }

    // make cookie for checked filenames
    function save_names (type) {
      var cb = get_sel_ckbox_array();

FileManager.pm  view on Meta::CPAN


    #Refresh
    "<A HREF=# onclick=\"
        var f=window.document.FileManager;
        f.submit();
        return false;\"
        ><FONT COLOR=WHITE><B>refresh</B></FONT></A>",

    #Edit
    "<A HREF=# onclick=\"
        window.edit_file(); return false;\"
        ><FONT COLOR=WHITE><B>edit</B></FONT></A>",

    #Cut
    "<A HREF=# onclick=\"
        window.save_names('cut'); return false;\"
        ><FONT COLOR=WHITE><B>cut</B></FONT></A>",

    #Copy
    "<A HREF=# onclick=\"
        window.save_names('copy'); return false;\"
        ><FONT COLOR=WHITE><B>copy</B></FONT></A>",

FileManager.pm  view on Meta::CPAN


    #New File
    "<A HREF=# onclick=\"
        var f=window.document.FileManager;
        var rv = window.prompt('new file name','');
        var cd = f.FILEMANAGER_curr_dir.value;
        if (cd != '') {
          rv = cd+'/'+rv;
        }
        if ((rv != null) && (rv != '')) {
          var w = window.open('".r->uri."?FILEMANAGER_cmd=editfile".
                                        "&FILEMANAGER_curr_dir='+escape(cd)+'".
                                        "&FILEMANAGER_editfile='+escape(rv),
                              'FileManagerEditFile',
                              'scrollbars,resizable');
          w.focus();

        } else if (rv == '') {
          window.alert('can not create blank file names');
        }
        return false; \">
        <FONT COLOR=WHITE><B>new file</B></FONT></A>",

FileManager.pm  view on Meta::CPAN




###############################################################################
# -- Commands (called via form input from method execute_cmds or manually) -- #
###############################################################################

sub cmd_savefiledata {
  my $o = shift;

  my $base = r->param('FILEMANAGER_editfile');
  $base =~ /([^\/]+)$/;
  my $filename = $1;
  remove $filename;
  my $fh = IO::File->new("> ".$filename);
  print $fh scalar(r->param('FILEMANAGER_filedata'));
  $$o{MESSAGE} = "file saved";
  $$o{view} = "pre_editfile";
  return undef;
}


sub cmd_editfile {
  my $o = shift;

  my $base = r->param('FILEMANAGER_editfile');
  $base =~ /([^\/]+)$/;
  my $filename = $1;

  if (! -e $filename) {
    my $fh = IO::File->new("> ".$filename);
    if ($fh) {
      $$o{JS} .= "
        if (window.opener && window.opener.document.FileManager) {
          window.opener.document.FileManager.submit();
        }";
    }
  }
  $$o{view} = "pre_editfile";
}


sub cmd_paste {
  my $o = shift;
  my $arg1 = shift;
  my ($buffer_type, $files) = $o->get_clip_board();

  my $count = 0;



( run in 0.392 second using v1.01-cache-2.11-cpan-de7293f3b23 )