PHP Classes
Icontem

File: as_admintool_filemgr.php


  Search   All class groups All class groups   Latest entries Latest entries   Top 10 charts Top 10 charts   Newsletter Newsletter   Blog Blog   Forums Forums   Help FAQ Help FAQ  
  Login   Register  
Recommend this page to a friend! ReTweet ReTweet Stumble It! Stumble It! Bookmark in del.icio.us Bookmark in del.icio.us
  Classes of Alexander Selifonov  >  site administrator tool set  >  as_admintool_filemgr.php  
File: as_admintool_filemgr.php
Role: Auxiliary script
Content type: text/plain
Description: Plugin module: file manager
Class: site administrator tool set
Web interface to manage site resources
 

Contents

Class file image Download
<?
/**
* @package as_admintool
* @desc as_admintool_filemgr.php - File manager plugin (upload/download/delete)
* @author Alexander Selifonov <as-works@narod.ru>
* @copyright Alexander Selifonov 2007
* @link http://as-works.narod.ru/en/php/
* @version 1.001.003
* modified 28.02.2008 (dd.mm.yyyy)
* Read "as_admintool.htm" for detailed instructions
*/
define('ASADM_FILEMGR','filemgr'); // unique string ID for this plugin module
define('ASADM_UPLOADSIZE','1048576'); // upload max file size
define('ASADM_UPLOADFILES',2); // max files to upload per one POST

# Register your plugin !
CAsAdminTool::RegisterPlugin(ASADM_FILEMGR,'AsAdm_filemgr_Form','AsAdm_filemgr_Exec','FileMgr_StdPost');

// interface localization strings
if(empty($as_iface['folder'])) $as_iface['folder'] ='Folder';
if(empty($as_iface['filename'])) $as_iface['filename'] ='File name';
if(empty($as_iface['filesize'])) $as_iface['filesize'] ='Size';
if(empty($as_iface['filetime'])) $as_iface['filetime'] ='Date/time';
if(empty($as_iface['server_reply'])) $as_iface['server_reply'] ='Server reply';
if(empty($as_iface['upload'])) $as_iface['upload'] ='Upload';

// if(!isset($as_iface['chdir'])) $as_iface['chdir'] =''; // empty string - no button to chdir 'Change directory';
if(empty($as_iface['delete_files'])) $as_iface['delete_files'] ='Delete selected files';
if(empty($as_iface['confirm_delete'])) $as_iface['confirm_delete'] ='Selected files will be deleted. Confirm ?';
if(empty($as_iface['upload_files'])) $as_iface['upload_files'] ='Upload file(s)';
if(empty($as_iface['download_files'])) $as_iface['download_files'] ='Download file(s)';
if(empty($as_iface['deleting_error'])) $as_iface['deleting_error'] ='File deleting ERROR !';
if(empty($as_iface['upload_error'])) $as_iface['upload_error'] ='upload ERROR !';

if(empty($as_iface['file_deleted'])) $as_iface['file_deleted'] ='deleted';
if(empty($as_iface['file_uploaded'])) $as_iface['file_uploaded'] ='uploaded';
if(empty($as_iface['file_protected'])) $as_iface['file_protected'] ='File is protected !';
if(empty($as_iface['no_selected_files'])) $as_iface['no_selected_files'] ='No selected files for operation';

$asdt_fmgr_folder = false;
$asdt_fmgr_protect = array(); # protected filenames (can't be deleted or rewritten by upload
/**
* AsAdm_filemgr_Form - function for drawing client interface page (FORM)
* This function will be called when CAsAdmin::Draw() is drawing all pages.
* param1-3 are the parameters You've passed to CAsAdminTool::AddPage()
* @param array $pginfo : [0] - pageid, [1],[2] - parent table size (width,height)
* @param array $param1 pass folder list to work with: [i][0] - real folder, [i][1] - visible title
* @return none
*/
function AsAdm_filemgr_Form($pginfo,$param1=false, $param2=false, $param3=false) {
  global $as_dbengine, $as_iface, $as_cssclass, $asdt_result,$asdt_fmgr_folder;
  $pageid=isset($pginfo[0])? $pginfo[0]: 0;
  $lwidth = isset($pginfo[1])? $pginfo[1]: 800;
  $lheight = isset($pginfo[2])? $pginfo[2]: 600;
  $r_width = $lwidth-20;
  $up_height = ASADM_UPLOADFILES*24 + (ASADM_UPLOADFILES ? 60:0); // height for upload form
  $r_height = max(80, $lheight-195-$up_height); # calculated height of filelist area
  $self = $_SERVER['PHP_SELF'];
  static $js_drawn = false;
  if(!$js_drawn) { #<3> draw only once !!!
    $js_drawn = true;
     ?>
<script language='javascript'>
var ajax_filemgr_busy = false;
var fmgr_folders = [];
var delete_confirm = "<?=$as_iface['confirm_delete']?>";
var fmgr_result = [];
<?
  $result= empty($asdt_result[$pageid]) ? '' : $asdt_result[$pageid];
  echo "fmgr_result[$pageid] = '$result';\n";
?>

function FileMgrChkAll(chkobj,pageid) {
  var fm = asGetObj('asadt_filemgr_'+pageid);
  var chkt = chkobj.checked;
  var els = fm.elements;
  for(i=0; i<els.length; i++)  {
    if(els[i].type=='checkbox' && els[i].name.substring(0,3)=='fl_')
      els[i].checked = chkt;
  }
}
function RefreshFileList(pageid,spl) {
  var sbody = "<tr><td class='<?=$as_cssclass['tdhead']?>'  width=220><?=$as_iface['filename']?></td>";
  sbody += "<td class='<?=$as_cssclass['tdhead']?>' width=120><?=$as_iface['filesize']?></td><td class='<?=$as_cssclass['tdhead']?>'  width=120><?=$as_iface['filetime']?></td>";
  sbody += "<td class='<?=$as_cssclass['tdhead']?>'><input type=checkbox name=chkall onClick='FileMgrChkAll(this,<?=$pageid?>)' value='1'></td>";
  asGetObj('result_'+pageid).innerHTML = spl[1]; // passed action log
  sclass = '<?=$as_cssclass['troweven']?>';
  for(ifl=2;ifl<spl.length;ifl++) {
     finfo = spl[ifl].split('^'); // 0-filename, 1-size, 2-modif-date/time
     if(finfo.length>2) {
       sclass = (sclass=='<?=$as_cssclass['troweven']?>')? '<?=$as_cssclass['trowodd']?>' : '<?=$as_cssclass['troweven']?>';
       sbody +="<tr class='"+sclass+"'><td nowrap><b>"+finfo[0]+'</b></td><td nowrap align=right>'+finfo[1]+'</td>';
       sbody +='<td nowrap align=center>'+finfo[2]+"</td><input type=hidden name='name_"+ifl+"' value='"+finfo[0]+"'><td><input name='fl_"+ifl+"' type='checkbox' value='1'></td></tr>";
     }
  }
  asGetObj('filelist_'+pageid).innerHTML = "<table border=0 cellspacing=1 cellpadding=0>"+sbody+"</table>";
}
function filemgrSetFolder(pageid) {
  if (ajax_filemgr_busy) return;
  var fm = asGetObj('asadt_filemgr_'+pageid);
  isel = fm.folder.selectedIndex;
  foldname = fm.folder.options[isel].value;
  var xmlreq = NewXMLHttpRequest();
  if(!xmlreq) return false;
  ajax_filemgr_busy = true;
  asGetObj('result_'+pageid).innerHTML = '<?=$as_iface['msg_waiting']?>';
  xmlreq.onreadystatechange= function() { //<3>
    if (xmlreq.readyState == 4) { //<3A>
      var resp = xmlreq.responseText;
      var spl = xmlreq.responseText.split("{|}");
      delete xmlreq;
      asGetObj('result_'+pageid).innerHTML = '';
      ajax_filemgr_busy = false;
      if(spl.length < 2 || spl[0].length>10) {
        asGetObj('result_'+pageid).innerHTML ='<?=$as_iface['msg_wrongreply']?> '+"<hr>"+resp;
      }
      else {
        RefreshFileList(pageid, spl);
        asGetObj('result_'+pageid).innerHTML = (fmgr_result[pageid]==undefined ? '': fmgr_result[pageid]);
        fmgr_result[pageid] = '';
      } //<4>
    } //<3A>
  } //<3>

  xmlreq.open('POST','<?=$self?>',true);
  xmlreq.setRequestHeader("Content-Type", postcont);
  params = 'adm_action_type=<?=ASADM_FILEMGR?>&pageid=' + pageid + '&action=chdir&folder='+fm.folder.options[isel].value;
  xmlreq.send(params);
  return false;
}
function AsAdm_FilemgrDelete(pageid) {
  if (ajax_filemgr_busy) return;
  if(!confirm(delete_confirm)) return false;
  var fm = asGetObj('asadt_filemgr_'+pageid);
  var xmlreq = NewXMLHttpRequest();
  if(!xmlreq) return false;
  ajax_filemgr_busy = true;
  asGetObj('result_'+pageid).innerHTML = '<?=$as_iface['msg_waiting']?>';
  xmlreq.onreadystatechange= function() { //<3>
    if (xmlreq.readyState == 4) { //<3A>
      var spl = xmlreq.responseText.split("{|}");
      delete xmlreq;
      ajax_filemgr_busy = false;
      if(spl.length < 2) {
        asGetObj('result_'+pageid).innerHTML ='<?=$as_iface['msg_wrongreply']?> '+spl[0];
      }
      else {
        RefreshFileList(pageid,spl);
      } //<4>
    } //<3A>
  } //<3>

  xmlreq.open('POST','<?=$self?>',true);
  xmlreq.setRequestHeader("Content-Type", postcont);
  params = 'adm_action_type=<?=ASADM_FILEMGR?>&pageid=' + pageid + '&action=delete&'+ComputeParamString('asadt_filemgr_'+pageid);
  xmlreq.send(params);
  return false;
}
function AsAdm_DownloadFile(pageid) {
  var fm = asGetObj('asadt_filemgr_'+pageid);
  var els = fm.elements;
  for(i=0; i<els.length; i++)  {
    if(els[i].type=='checkbox' && els[i].name.substring(0,3)=='fl_' && els[i].checked) {
      // create and open url for downloading file
      var fieldname = 'name_' + els[i].name.substring(3);
      eval('fl_name=fm.'+fieldname+'.value');
      fullname = fm.folder.options[fm.folder.selectedIndex].value + encodeURIComponent(fl_name);
      //alert(fullname);
      var wnd=window.open('<?=$self?>?adm_action_type=filemgr&asadm_download='+fullname, "_blank","height=200,width=600,location=0,menubar=0,resizable=0,scrollbars=0,status=0,toolbar=0,top=40,left=40");
    }
  }
  return false;
}
</script>
<?
  }
?>
<center>
<table id='asadt_tbl_<?=$pageid?>'>
<tr><form name='asadt_filemgr_<?=$pageid?>'>
<input type='hidden' name='your_param1' value='<?=$param1?>'>
<?
  if(is_array($param1)) {
    echo "<tr><td><b>{$as_iface['folder']}</b> <SELECT name='folder' onChange='filemgrSetFolder($pageid)'>";
    for($kf=0;$kf<count($param1);$kf++) {
      $sdir = $stitle = $param1[$kf];
      if(is_array($param1[$kf])) {
        $sdir = $param1[$kf][0];
        $stitle = empty($param1[$kf][1])? $sdir : $param1[$kf][1];
      }
      $sel = ($asdt_fmgr_folder===$sdir ? 'selected':'');
      echo "<OPTION value='$sdir' $sel>$stitle</OPTION>\n";
    }
    echo "</SELECT>\n";
//    if(!empty($as_iface['chdir'])) echo "&nbsp; <button name='chdir{$pageid}' class='{$as_cssclass['button']}' onClick='filemgrSetFolder($pageid)' >{$as_iface['chdir']}</button></td></tr>\n";
  }

  $result = empty($asdt_result[$pageid])? '&nbsp;' : $asdt_result[$pageid];
?>
<tr><td><div id='filelist_<?=$pageid?>' class='<?=$as_cssclass['resultarea']?>' style='overflow:auto; width:<?=$r_width?>px; height:<?=$r_height?>'>files here...<div></td></tr>
<tr><td>
<?
  if(!empty($as_iface['download_files'])) {
    echo "<button name='download' class='button' onClick='AsAdm_DownloadFile($pageid)'>{$as_iface['download_files']}</button> &nbsp;";
  }
?>
<button class='button' name='fdelete' onClick='AsAdm_FilemgrDelete(<?=$pageid?>)'><?=$as_iface['delete_files']?></button> &nbsp;
</td></tr></form></table>
<? if(ASADM_UPLOADFILES >0) { ?>
<hr><div id='asadt_upload_<?=$pageid?>' class='<?=$as_cssclass['resultarea']?>' style='overflow:auto; height:<?=$up_height?>px; width:<?=$r_width?>px; text-align:left'>
<script language="javascript">
function FileMgrUpload(pageid) {
  var fmsrc = asGetObj('asadt_filemgr_'+pageid);
  var fmdest = asGetObj('asadt_upl_'+pageid);
  fmdest.folder.value = fmsrc.folder.options[fmsrc.folder.selectedIndex].value;
//  alert(fmdest.folder.value); return false; // debug
  return true;
}
</script>
<table>
<!-- Form for uploading files to server... -->
<tr><FORM name='asadt_upl_<?=$pageid?>' method='POST' action='<?=$self?>' ENCTYPE="multipart/form-data" >
<input type='hidden' name='adm_action_type' value='<?=ASADM_FILEMGR?>' />
<input type='hidden' name='filemgr_action' value='upload' />
<input type='hidden' name='pageid' value='<?=$pageid?>' />
<input type='hidden' name='as_stdpost' value='1' />
<input type='hidden' name='folder' value='' />
<input type='hidden' name='MAX_FILE_SIZE' value='<?=ASADM_UPLOADSIZE?>' />
<tr><td colspan='2'><b><?=$as_iface['upload_files']?> ...</b></td></tr>
<? for($kup=1; $kup<=ASADM_UPLOADFILES; $kup++) {
    echo "<tr><td width=20><b>$kup</b>:</td><td><input type='FILE' class='{$as_cssclass['textfield']}' name='file{$kup}' style='width:320' /></td></tr>\n";
  }
?>
</tr>
<tr><td>&nbsp;</td><td><input type='SUBMIT' name='submit' class='<?=$as_cssclass['button']?>' onClick='return FileMgrUpload(<?=$pageid?>)' value='<?=$as_iface['upload']?>' /></td></tr>
</form></table></div></center>
<? } ?>

<div align=center>
<table width='98%'>
<tr><td><b><?=$as_iface['server_reply']?></b></td></tr>
<tr><td><div id='result_<?=$pageid?>' class='<?=$as_cssclass['resultarea']?>' style='overflow:auto; height:80px; width:<?=$r_width?>px;'><?=$result?></div></td></tr>
</tr>
</table>
</div>
<?
  if(is_array($param1)) echo "<script language='Javascript'>filemgrSetFolder($pageid);</script>\n";
}

/**
* AsAdm_Filemgr_Exec - function that executes action on server and returns result string.
* @param array $parms, decoded data passes in POST
* @return 'delimited' result. I use a string '{|}' as a delimiter.
*/
function AsAdm_Filemgr_Exec($parms='') {
  global $as_dbengine, $as_iface, $as_admt_bckpfolder, $asdt_result;
  if(!empty($_GET['asadm_download'])) { // download file cmd
    $flname = $_GET['asadm_download'];
    $splt = split("[/\\]",$flname);
    $justfname = $splt[count($splt)-1];
    $fh = fopen($flname,'r');
    $fsize = filesize($flname);

    Header('Pragma: no-cache'); // avoid cached versions
    Header("Pragma: public");
    Header("Cache-Control: must-revalidate, post-check=0, pre-check=0");

    Header('Content-Type: application/octet-stream'); // any binary file
    Header("Content-Length: $fsize");
    Header("Content-Disposition: attachment; filename=\"$justfname\"");
    if($fh>0) { echo fread($fh,$fsize); fclose($fh); }
    exit;
  }
  $pageid = isset($parms['pageid'])? $parms['pageid'] : '1';
  $action = isset($parms['action'])? $parms['action'] : 'chdir';
  switch($action) {
    case 'chdir': # return file list for $folder
      $ret = "$pageid{|}".FlMgr_FileList($parms);
      break;
    case 'delete': #delete some files... $parms["file_<filename>"] = 1
      $ret = "$pageid{|}".FlMgr_DeleteFiles($parms);
  }
  return $ret;
}
function FlMgr_FileList($parms) {
  global $asdt_result;
  $ret = '';
  $folder = isset($parms['folder'])? $parms['folder'] : './';
  $tflist = array();
  if (($handle = @opendir($folder))) {
    while (($file = readdir($handle))) {
      if (is_file($folder.$file)) $tflist[] = $file;
    }
    closedir($handle);
  }
  natsort($tflist); // sort($tflist, SORT_STRING);
  foreach($tflist as $fkey=>$fname) { //$kk=0; $kk<count($tflist);$kk++) {
     $ftime = date ("Y-m-d H:i", filemtime($folder.$fname)); //tflist[$kk]));
     $fsize = number_format(filesize($folder.$fname)); //tflist[$kk]));
     $ret .= "{|}$fname^$fsize^$ftime";
  }
  return $ret;
}
function FlMgr_DeleteFiles($parms) {
  global $asdt_fmgr_protect,$as_iface;
  $folder = isset($parms['folder'])? $parms['folder'] : './';
  $ret = '';
  $dlist = array();
  foreach($parms as $vkey=>$vval) {
    if(substr($vkey,0,3)==='fl_' && $vval=='1') {
      $i = substr($vkey,3);
      $dlist[] = $parms['name_'.$i];
    }
  }
  if(count($dlist)) {
    $msg = '';
    for($kk=0;$kk<count($dlist);$kk++) {
      $msg .= ($msg==''? '':'<br>').$dlist[$kk].' : ';
      if(in_array($dlist[$kk],$asdt_fmgr_protect)) $msg .= $as_iface['file_protected'];
      else
        $msg .= (unlink($folder.$dlist[$kk]) ? $as_iface['file_deleted'] : $as_iface['deleting_error']);
#      $msg .= '<br>'.$dlist[$kk].' '.(true ? ' deleted':' deleting error!');  # emulate, no real seletion! (debug)
    }
    $ret = $msg.FlMgr_FileList($parms); # send new file list after deletion
  }
  else $ret = $as_iface['no_selected_files'].FlMgr_FileList($parms);
  return $ret;
}
/**
* @desc FileMgr_StdPost() standart (non AJAX) POST handling.
* Now used only for uploading files.
*/
function FileMgr_StdPost() {
  global $as_iface, $asdt_fmgr_folder, $asdt_fmgr_protect, $asdt_result;
  $pageid = isset($_POST['pageid'])? $_POST['pageid']: 0;
  $asdt_fmgr_folder = $folder = isset($_POST['folder'])? $_POST['folder']: '';
/*
  $_FILES['fileNN']['name'] - original filename
  $_FILES['fileNN']['tmp_name'] - temp.file path/name
  $_FILES['fileNN']['size'] - file size
  $_FILES['fileNN']['type'] - MIME-type ( "image/gif" )
  $_FILES['fileNN']['error'] - error code
*/
  $asdt_result[$pageid]= '';
  for($kk=1; $kk<=ASADM_UPLOADFILES;$kk++) {
    if(empty($_FILES['file'.$kk]['name'])) { continue; }
    $fl = $_FILES['file'.$kk];
    $to_name = ($folder==='./'?'':$folder) . $fl['name'];
    $tempname = $fl['tmp_name'];
    $errcode = $fl['error'];
    if(!empty($errcode)) {
       $asdt_result[$pageid] .= "{$fl['name']} - upload error: {$fl['error']}<br>";
    }
    else {
      if(in_array($fl['name'],$asdt_fmgr_protect)) {
        # file in 'protected' list, don't upload it!
        $asdt_result[$pageid] .= "{$fl['name']} : {$as_iface['file_protected']}<br>";
        unlink($tempname);
      }
      else {

#        if(@move_uploaded_file($tempname, $to_name) && is_file($to_name)) { // move_uploaded_file sucks ?!
        if(@copy($tempname, $to_name) && is_file($to_name)) {
          $asdt_result[$pageid] .= "$to_name : {$as_iface['file_uploaded']}, (" .number_format(filesize($to_name))." Bytes)<br>";
          @unlink($tempname);
      }
      else  $asdt_result[$pageid] .= "$to_name : {$as_iface['upload_error']} ($errcode)<br>";
      }
    }
  }
}

?>

 
  Advertise on this site Advertise on this site   Site map Site map   Statistics Statistics   Site tips Site tips   Privacy policy Privacy policy   Contact Contact  

For more information send a message to :
info at phpclasses dot org.
Copyright (c) Icontem 1999-2009 PHP Classes - PHP Class Scripts
  PHP Book Reviews - Reviews of books and other products