!C99Shell v. 2.0 [PHP 7 Update] [25.02.2019]!

Software: Apache/2.2.22 (Debian). PHP/5.6.36 

uname -a: Linux h05.hvosting.ua 4.9.110-amd64 #3 SMP Sun Nov 4 16:27:09 UTC 2018 x86_64 

uid=1389(h33678) gid=1099(h33678) groups=1099(h33678),502(mgrsecure) 

Safe-mode: OFF (not secure)

/home/h33678/data/www/zt-tsou.org.ua/modules-alien/ajaxfilemanager/plugins/access.fs/   drwxr-xr-x
Free 117.59 GB of 200.55 GB (58.64%)
Home    Back    Forward    UPDIR    Refresh    Search    Buffer    Encoder    Tools    Proc.    FTP brute    Sec.    SQL    PHP-code    Update    Feedback    Self remove    Logout    


Viewing file:     class.fsAccessDriver.php (46.09 KB)      -rw-r--r--
Select action/file-type:
(+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
<?php
/**
 * @package info.ajaxplorer.plugins
 * 
 * Copyright 2007-2009 Charles du Jeu
 * This file is part of AjaXplorer.
 * The latest code can be found at http://www.ajaxplorer.info/
 * 
 * This program is published under the LGPL Gnu Lesser General Public License.
 * You should have received a copy of the license along with AjaXplorer.
 * 
 * The main conditions are as follow : 
 * You must conspicuously and appropriately publish on each copy distributed 
 * an appropriate copyright notice and disclaimer of warranty and keep intact 
 * all the notices that refer to this License and to the absence of any warranty; 
 * and give any other recipients of the Program a copy of the GNU Lesser General 
 * Public License along with the Program. 
 * 
 * If you modify your copy or copies of the library or any portion of it, you may 
 * distribute the resulting library provided you do so under the GNU Lesser 
 * General Public License. However, programs that link to the library may be 
 * licensed under terms of your choice, so long as the library itself can be changed. 
 * Any translation of the GNU Lesser General Public License must be accompanied by the 
 * GNU Lesser General Public License.
 * 
 * If you copy or distribute the program, you must accompany it with the complete 
 * corresponding machine-readable source code or with a written offer, valid for at 
 * least three years, to furnish the complete corresponding machine-readable source code. 
 * 
 * Any of the above conditions can be waived if you get permission from the copyright holder.
 * AjaXplorer is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; 
 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * 
 * Description : The most used and standard plugin : FileSystem access
 */
class fsAccessDriver extends AbstractAccessDriver 
{
    
/**
    * @var Repository
    */
    
var $repository;
    
    function  
fsAccessDriver($driverName$filePath$repository$optOptions NULL){
        
parent::AbstractAccessDriver($driverName$filePath$repository);
    }
    
    function 
initRepository(){
        
$create $this->repository->getOption("CREATE");
        
$path $this->repository->getOption("PATH");
        
$recycle $this->repository->getOption("RECYCLE_BIN");
        if(
$create == true){
            if(!
is_dir($path)) @mkdir($path);
            if(!
is_dir($path)){
                return new 
AJXP_Exception("Cannot create root path for repository. Please check repository configuration or that your folder is writeable!");
            }
            if(
$recycle!= "" && !is_dir($path."/".$recycle)){
                @
mkdir($path."/".$recycle);
                if(!
is_dir($path."/".$recycle)){
                    return new 
AJXP_Exception("Cannot create recycle bin folder. Please check repository configuration or that your folder is writeable!");
                }
            }
        }else{
            if(!
is_dir($path)){
                return new 
AJXP_Exception("Cannot find base path for your repository! Please check the configuration!");
            }
        }
    }
    
    function 
switchAction($action$httpVars$fileVars){
        if(!isSet(
$this->actions[$action])) return;
        
$xmlBuffer "";
        foreach(
$httpVars as $getName=>$getValue){
            $
$getName Utils::securePath(SystemTextEncoding::magicDequote($getValue));
        }
        
$selection = new UserSelection();

        
$selection->initFromHttpVars($httpVars);
        if(isSet(
$dir) && $action != "upload") { $safeDir $dir$dir SystemTextEncoding::fromUTF8($dir); }
        if(isSet(
$dest)) $dest SystemTextEncoding::fromUTF8($dest);
        
$mess ConfService::getMessages();
        
$recycleBinOption $this->repository->getOption("RECYCLE_BIN");
        
// FILTER ACTION FOR DELETE
        
if($recycleBinOption!="" && $action == "delete" && $dir != "/".$recycleBinOption)
        {
            
$action "move";
            
$dest "/".$recycleBinOption;
            
$dest_node "AJAXPLORER_RECYCLE_NODE";
        }
        
// FILTER ACTION FOR RESTORE
        
if($recycleBinOption!="" &&  $action == "restore" && $dir == "/".$recycleBinOption)
        {
            
$originalRep RecycleBinManager::getFileOrigin($selection->getUniqueFile());
            if(
$originalRep != "")
            {
                
$action "move";
                
$dest $originalRep;
            }
        }
        
// FILTER DIR PAGINATION ANCHOR
        
if(isSet($dir) && strstr($dir"#")!==false){
            
$parts split("#"$dir);
            
$dir $parts[0];
            
$page $parts[1];
        }        
        
        switch(
$action)
        {            
            
//------------------------------------
            //    DOWNLOAD, IMAGE & MP3 PROXYS
            //------------------------------------
            
case "download":
                
AJXP_Logger::logAction("Download", array("files"=>$selection));
                
set_error_handler(array("HTMLWriter""javascriptErrorHandler"), E_ALL & ~ E_NOTICE);
                
register_shutdown_function("restore_error_handler");                
                if(
$selection->inZip){
                    
$tmpDir dirname($selection->getZipPath())."/.tmpExtractDownload";
                    @
mkdir($this->getPath()."/".$tmpDir);
                    
$this->convertSelectionToTmpFiles($tmpDir$selection);
                }
                
$zip false;
                if(
$selection->isUnique()){
                    if(
is_dir($this->getPath()."/".$selection->getUniqueFile())) {
                        
$zip true;
                        
$dir .= "/".basename($selection->getUniqueFile());
                    }
                }else{
                    
$zip true;
                }
                if(
$zip){
                    
// Make a temp zip and send it as download
                    
$loggedUser AuthService::getLoggedUser();
                    
$file USERS_DIR."/".($loggedUser?$loggedUser->getId():"shared")."/".time()."tmpDownload.zip";
                    
$zipFile $this->makeZip($selection->getFiles(), $file$dir);
                    if(!
$zipFileAJXP_Exception::errorToXml("Error while compressing");
                    
$localName = (basename($dir)==""?"Files":basename($dir)).".zip";
                    
$this->readFile($file"force-download"$localNamefalsefalse);
                    
register_shutdown_function("unlink"$file);
                }else{
                    
$this->readFile($this->getPath()."/".$selection->getUniqueFile(), "force-download");
                }
                if(isSet(
$tmpDir)){
                    
//$this->deldir($this->getPath()."/".$tmpDir);
                    
$delDir $this->getPath()."/".$tmpDir;
                    
register_shutdown_function(array($this"deldir"), $delDir);
                }
                exit(
0);
            break;
        
            case 
"image_proxy":
                if(
$split UserSelection::detectZip(SystemTextEncoding::fromUTF8($file))){
                    require_once(
"server/classes/pclzip.lib.php");
                    
$zip = new PclZip($this->getPath().$split[0]);
                    
$data $zip->extract(PCLZIP_OPT_BY_NAMEsubstr($split[1], 1), PCLZIP_OPT_EXTRACT_AS_STRING);
                    
header("Content-Type: ".Utils::getImageMimeType(basename($split[1]))."; name=\"".basename($split[1])."\"");
                    
header("Content-Length: ".strlen($data[0]["content"]));
                    
header('Cache-Control: public');
                    print(
$data[0]["content"]);
                }else{
                    
                    if(isSet(
$get_thumb) && $get_thumb == "true" && $this->driverConf["GENERATE_THUMBNAIL"]){
                        require_once(
"server/classes/PThumb.lib.php");
                        
$pThumb = new PThumb($this->driverConf["THUMBNAIL_QUALITY"]);                        
                        if(!
$pThumb->isError()){                            
                            
$pThumb->use_cache $this->driverConf["USE_THUMBNAIL_CACHE"];
                            
$pThumb->cache_dir INSTALL_PATH."/".$this->driverConf["THUMBNAIL_CACHE_DIR"];    
                            
$pThumb->fit_thumbnail($this->getPath()."/".SystemTextEncoding::fromUTF8($file), 200);
                            if(
$pThumb->isError()){
                                
print_r($pThumb->error_array);
                            }
                            exit(
0);
                        }
                    }
                    
                    
$this->readFile($this->getPath()."/".SystemTextEncoding::fromUTF8($file), "image");
                }
                exit(
0);
            break;
            
            case 
"mp3_proxy":
                if(
$split UserSelection::detectZip(SystemTextEncoding::fromUTF8($file))){
                    require_once(
"server/classes/pclzip.lib.php");
                    
$zip = new PclZip($this->getPath().$split[0]);
                    
$data $zip->extract(PCLZIP_OPT_BY_NAMEsubstr($split[1], 1), PCLZIP_OPT_EXTRACT_AS_STRING);                    
                    
header("Content-Type: audio/mp3; name=\"".basename($split[1])."\"");
                    
header("Content-Length: ".strlen($data[0]["content"]));
                    print(
$data[0]["content"]);
                }else{
                    
$this->readFile($this->getPath()."/".SystemTextEncoding::fromUTF8($file), "mp3");
                }
                exit(
0);
            break;
            
            
//------------------------------------
            //    ONLINE EDIT
            //------------------------------------
            
case "edit";    
                if(isset(
$save) && $save==&& isSet($code))
                {
                    
// Reload "code" variable directly from POST array, do not "securePath"...
                    
$code $_POST["code"];
                    
AJXP_Logger::logAction("Online Edition", array("file"=>SystemTextEncoding::fromUTF8($file)));
                    
$code=stripslashes($code);
                    
$code=str_replace("&lt;","<",$code);
                    
$fp=fopen($this->getPath().SystemTextEncoding::fromUTF8("/$file"),"w");
                    
fputs ($fp,$code);
                    
fclose($fp);
                    echo 
$mess[115];
                }
                else 
                {
                    
$this->readFile($this->getPath()."/".SystemTextEncoding::fromUTF8($file), "plain");
                }
                exit(
0);
            break;
        
            
//------------------------------------
            //    COPY / MOVE
            //------------------------------------
            
case "copy";
            case 
"move";
                
                if(
$selection->isEmpty())
                {
                    
$errorMessage $mess[113];
                    break;
                }
                if(
$selection->inZip()){
                    
$tmpDir dirname($selection->getZipPath())."/.tmpExtractDownload";
                    @
mkdir($this->getPath()."/".$tmpDir);                    
                    
$this->convertSelectionToTmpFiles($tmpDir$selection);
                    if(
is_dir($tmpDir))    $this->deldir($this->getPath()."/".$tmpDir);                    
                }
                
$success $error = array();
                
                
$this->copyOrMove($dest$selection->getFiles(), $error$success, ($action=="move"?true:false));
                
                if(
count($error)){
                    
$errorMessage join("\n"$error);
                }
                else {
                    
$logMessage join("\n"$success);
                    
AJXP_Logger::logAction(($action=="move"?"Move":"Copy"), array("files"=>$selection"destination"=>$dest));
                }
                
$reload_current_node true;
                if(isSet(
$dest_node)) $reload_dest_node $dest_node;
                
$reload_file_list true;
                
            break;
            
            
//------------------------------------
            //    SUPPRIMER / DELETE
            //------------------------------------
            
case "delete";
            
                if(
$selection->isEmpty())
                {
                    
$errorMessage $mess[113];
                    break;
                }
                
$logMessages = array();
                
$errorMessage $this->delete($selection->getFiles(), $logMessages);
                if(
count($logMessages))
                {
                    
$logMessage join("\n"$logMessages);
                }
                
AJXP_Logger::logAction("Delete", array("files"=>$selection));
                
$reload_current_node true;
                
$reload_file_list true;
                
            break;
        
            
//------------------------------------
            //    RENOMMER / RENAME
            //------------------------------------
            
case "rename";
            
                
$file SystemTextEncoding::fromUTF8($file);
                
$filename_new SystemTextEncoding::fromUTF8($filename_new);
                
$error $this->rename($file$filename_new);
                if(
$error != null) {
                    
$errorMessage  $error;
                    break;
                }
                
$logMessageSystemTextEncoding::toUTF8($file).$mess[41] ".SystemTextEncoding::toUTF8($filename_new);
                
$reload_current_node true;
                
$reload_file_list basename($filename_new);
                
AJXP_Logger::logAction("Rename", array("original"=>$file"new"=>$filename_new));
                
            break;
        
            
//------------------------------------
            //    CREER UN REPERTOIRE / CREATE DIR
            //------------------------------------
            
case "mkdir";
                    
                
$messtmp="";
                
$dirname=Utils::processFileName(SystemTextEncoding::fromUTF8($dirname));
                
$error $this->mkDir($dir$dirname);
                if(isSet(
$error)){
                    
$errorMessage $error; break;
                }
                
$reload_file_list $dirname;
                
$messtmp.="$mess[38] ".SystemTextEncoding::toUTF8($dirname).$mess[39] ";
                if(
$dir=="") {$messtmp.="/";} else {$messtmp.= SystemTextEncoding::toUTF8($dir);}
                
$logMessage $messtmp;
                
$reload_current_node true;
                
AJXP_Logger::logAction("Create Dir", array("dir"=>$dir."/".$dirname));
                
            break;
        
            
//------------------------------------
            //    CREER UN FICHIER / CREATE FILE
            //------------------------------------
            
case "mkfile";
            
                
$messtmp="";
                
$filename=Utils::processFileName(SystemTextEncoding::fromUTF8($filename));    
                
$error $this->createEmptyFile($dir$filename);
                if(isSet(
$error)){
                    
$errorMessage $error; break;
                }
                
$messtmp.="$mess[34] ".SystemTextEncoding::toUTF8($filename).$mess[39] ";
                if(
$dir=="") {$messtmp.="/";} else {$messtmp.=SystemTextEncoding::toUTF8($dir);}
                
$logMessage $messtmp;
                
$reload_file_list $filename;
                
AJXP_Logger::logAction("Create File", array("file"=>$dir."/".$filename));
        
            break;
            
            
//------------------------------------
            //    CHANGE FILE PERMISSION
            //------------------------------------
            
case "chmod";
            
                
$messtmp="";
                
$files $selection->getFiles();
                
$changedFiles = array();
                foreach (
$files as $fileName){
                    
$error $this->chmod($this->getPath().$fileName$chmod_value, ($recursive=="on"), ($recursive=="on"?$recur_apply_to:"both"), $changedFiles);
                }
                if(isSet(
$error)){
                    
$errorMessage $error; break;
                }
                
//$messtmp.="$mess[34] ".SystemTextEncoding::toUTF8($filename)." $mess[39] ";
                
$logMessage="Successfully changed permission to ".$chmod_value." for ".count($changedFiles)." files or folders";
                
$reload_file_list $dir;
                
AJXP_Logger::logAction("Chmod", array("dir"=>$dir"filesCount"=>count($changedFiles)));
        
            break;
            
            
//------------------------------------
            //    UPLOAD
            //------------------------------------    
            
case "upload":

                
$fancyLoader false;
                if(isSet(
$fileVars["Filedata"])){
                    
$fancyLoader true;
                    if(
$dir!=""$dir "/".base64_decode($dir);
                }
                if(
$dir!=""){$rep_source="/$dir";}
                else 
$rep_source "";
                
$destination=SystemTextEncoding::fromUTF8($this->getPath().$rep_source);
                if(!
$this->isWriteable($destination))
                {
                    
$errorMessage "$mess[38] ".SystemTextEncoding::toUTF8($dir).$mess[99].";
                    if(
$fancyLoader){
                        
header('HTTP/1.0 412 '.$errorMessage);
                        die(
'Error 412 '.$errorMessage);
                    }else{
                        print(
"\n if(parent.ajaxplorer.actionBar.multi_selector)parent.ajaxplorer.actionBar.multi_selector.submitNext('".str_replace("'""\'"$errorMessage)."');");        
                        break;
                    }
                }    
                
$logMessage "";
                foreach (
$fileVars as $boxName => $boxData)
                {
                    if(
$boxName != "Filedata" && substr($boxName09) != "userfile_")    continue;
                    if(
$boxName == "Filedata"$fancyLoader true;
                    
$err Utils::parseFileDataErrors($boxData$fancyLoader);
                    if(
$err != null)
                    {
                        
$errorMessage $err;
                        break;
                    }
                    
$userfile_name $boxData["name"];
                    if(
$fancyLoader$userfile_name SystemTextEncoding::fromUTF8($userfile_name);
                    
$userfile_name=Utils::processFileName($userfile_name);
                    if(isSet(
$auto_rename)){
                        
$userfile_name fsDriver::autoRenameForDest($destination$userfile_name);
                    }
                    if (!
move_uploaded_file($boxData["tmp_name"], "$destination/".$userfile_name))
                    {
                        
$errorMessage=($fancyLoader?"411 ":"")."$mess[33] ".$userfile_name;
                        break;
                    }
                    
$this->changeMode($destination."/".$userfile_name);
                    
$logMessage.="$mess[34] ".SystemTextEncoding::toUTF8($userfile_name).$mess[35] $dir";
                    
AJXP_Logger::logAction("Upload File", array("file"=>SystemTextEncoding::fromUTF8($dir)."/".$userfile_name));
                }
                if(
$fancyLoader)
                {
                    if(isSet(
$errorMessage)){
                        
header('HTTP/1.0 '.$errorMessage);
                        die(
'Error '.$errorMessage);
                    }else{
                        
header('HTTP/1.0 200 OK');
                        die(
"200 OK");
                    }
                }
                else
                {
                    print(
"<html><script language=\"javascript\">\n");
                    if(isSet(
$errorMessage)){
                        print(
"\n if(parent.ajaxplorer.actionBar.multi_selector)parent.ajaxplorer.actionBar.multi_selector.submitNext('".str_replace("'""\'"$errorMessage)."');");        
                    }else{        
                        print(
"\n if(parent.ajaxplorer.actionBar.multi_selector)parent.ajaxplorer.actionBar.multi_selector.submitNext();");
                    }
                    print(
"</script></html>");
                }
                exit;
                
            break;
            
            
//------------------------------------
            // Public URL
            //------------------------------------
            
case "public_url":
                
$file SystemTextEncoding::fromUTF8($file);
                
$url $this->makePubliclet($file$password$expiration);
                
header("Content-type:text/plain");
                echo 
$url;
                exit(
1);                
            break;
            
            
//------------------------------------
            //    XML LISTING
            //------------------------------------
            
case "ls":
            
                if(!isSet(
$dir) || $dir == "/"$dir "";
                
$searchMode $fileListMode $completeMode false;
                if(isSet(
$mode)){
                    if(
$mode == "search"$searchMode true;
                    else if(
$mode == "file_list"$fileListMode true;
                    else if(
$mode == "complete"$completeMode true;
                }                
                if(isSet(
$skipZip) && $skipZip == "true"){
                    
$skipZip true;
                }else{
                    
$skipZip false;
                }
                if(
$test UserSelection::detectZip($dir)){
                    
$liste = array();
                    
$zip $this->zipListing($test[0], $test[1], $liste);
                    
AJXP_XMLWriter::header();
                    
$tmpDir $this->getPath().dirname($test[0]).".tmpZipExtract";                    
                    foreach (
$liste as $zipEntry){
                        
$atts = array();
                        if(!
$fileListMode && !$zipEntry["folder"]) continue;
                        
$atts[] = "is_file=\"".($zipEntry["folder"]?"false":"true")."\"";
                        
$atts[] = "text=\"".Utils::xmlEntitiesbasename(SystemTextEncoding::toUTF8($zipEntry["stored_filename"])))."\"";
                        
$atts[] = "filename=\"".Utils::xmlEntitiesSystemTextEncoding::toUTF8($zipEntry["filename"]))."\"";
                        if(
$fileListMode){
                            
$atts[] = "filesize=\"".Utils::roundSize($zipEntry["size"])."\"";
                            
$atts[] = "bytesize=\"".$zipEntry["size"]."\"";
                            
$atts[] = "ajxp_modiftime=\"".$zipEntry["mtime"]."\"";
                            
$atts[] = "mimestring=\"".Utils::mimetype($zipEntry["stored_filename"], "mime"$zipEntry["folder"])."\"";
                            
$atts[] = "icon=\"".Utils::mimetype($zipEntry["stored_filename"], "image"$zipEntry["folder"])."\"";
                            
$is_image Utils::is_image(basename($zipEntry["stored_filename"]));
                            
$atts[] = "is_image=\"".$is_image."\"";
                            if(
$is_image){
                                if(!
is_dir($tmpDir)) mkdir($tmpDir);
                                
$currentFile $tmpDir."/".basename($zipEntry["stored_filename"]);                                
                                
$data $zip->extract(PCLZIP_OPT_BY_NAME$zipEntry["stored_filename"], PCLZIP_OPT_REMOVE_ALL_PATHPCLZIP_OPT_PATH$tmpDir);
                                list(
$width$height$type$attr) = @getimagesize($currentFile);
                                
$atts[] = "image_type=\"".image_type_to_mime_type($type)."\"";
                                
$atts[] = "image_width=\"$width\"";
                                
$atts[] = "image_height=\"$height\"";
                                
unlink($currentFile);
                            }
                        }else{                            
                            
$atts[] = "icon=\"client/images/foldericon.png\"";
                            
$atts[] = "openicon=\"client/images/foldericon.png\"";
                            
$atts[] = "src=\"content.php?dir=".urlencode(SystemTextEncoding::toUTF8($zipEntry["filename"]))."\"";
                        }                        
                        print(
"<tree ".join(" "$atts)."/>");
                        if(
is_dir($tmpDir)){
                            
rmdir($tmpDir);
                        }
                    }
                    
AJXP_XMLWriter::close();
                    exit(
0);
                }
                
$nom_rep $this->initName($dir);
                
AJXP_Exception::errorToXml($nom_rep);
                
                if(
$fileListMode){
                    
$countFiles $this->countFiles($nom_rep);
                    
$threshold $this->repository->getOption("PAGINATION_THRESHOLD");
                    if(!isSet(
$threshold) || intval($threshold) == 0$threshold 500;                    
                    if(
$countFiles $threshold){
                        
$limitPerPage $this->repository->getOption("PAGINATION_NUMBER");
                        if(!isset(
$limitPerPage) || intval($limitPerPage) == 0$limitPerPage 200;
                        
$offset 0;
                        
$crtPage 1;
                        if(isSet(
$page)){
                            
$offset = (intval($page)-1)*$limitPerPage
                            
$crtPage $page;
                        }
                        
$totalPages floor($countFiles $limitPerPage) + 1;
                        
$reps $this->listing($nom_repfalse$offset$limitPerPage);                        
                    }else{
                        
$reps $this->listing($nom_rep$searchMode);
                    }
                }else{
                    
$reps $this->listing($nom_rep, !$searchMode);
                }
                
//$reps = $result[0];
                
AJXP_XMLWriter::header();
                if(isSet(
$totalPages) && isSet($crtPage)){
                    print 
'<columns switchDisplayMode="list" switchGridMode="filelist"/>';
                    print 
'<pagination count="'.$countFiles.'" total="'.$totalPages.'" current="'.$crtPage.'"/>';
                }
                foreach (
$reps as $repIndex => $repName)
                {
                    if((
eregi("\.zip$",$repName) && $skipZip)) continue;
                    
$attributes "";
                    if(
$searchMode)
                    {
                        if(
is_file($nom_rep."/".$repIndex)) {$attributes "is_file=\"true\" icon=\"$repName\""$repName $repIndex;}
                    }
                    else if(
$fileListMode)
                    {
                        
$currentFile $nom_rep."/".$repIndex;            
                        
$atts = array();
                        
$atts[] = "is_file=\"".(is_file($currentFile)?"1":"0")."\"";
                        
$atts[] = "is_image=\"".Utils::is_image($currentFile)."\"";
                        
$atts[] = "file_group=\"".filegroup($currentFile)."\"";
                        
$atts[] = "file_owner=\"".fileowner($currentFile)."\"";
                        
$atts[] = "file_perms=\"".substr(decoctfileperms($currentFile) ), (is_file($currentFile)?2:1))."\"";
                        if(
Utils::is_image($currentFile))
                        {
                            list(
$width$height$type$attr) = @getimagesize($currentFile);
                            
$atts[] = "image_type=\"".image_type_to_mime_type($type)."\"";
                            
$atts[] = "image_width=\"$width\"";
                            
$atts[] = "image_height=\"$height\"";
                        }
                        
$atts[] = "mimestring=\"".Utils::mimetype($currentFile"type"is_dir($currentFile))."\"";
                        
$datemodif $this->date_modif($currentFile);
                        
$atts[] = "ajxp_modiftime=\"".($datemodif $datemodif "0")."\"";
                        
$bytesize = @filesize($currentFile) or 0;
                        if(
$bytesize 0$bytesize sprintf("%u"$bytesize);
                        
$atts[] = "filesize=\"".Utils::roundSize($bytesize)."\"";
                        
$atts[] = "bytesize=\"".$bytesize."\"";
                        
$atts[] = "filename=\"".Utils::xmlEntitiesSystemTextEncoding::toUTF8($dir."/".$repIndex))."\"";
                        
$atts[] = "icon=\"".(is_file($currentFile)?SystemTextEncoding::toUTF8($repName):(is_dir($currentFile) ? "folder.png" "mime-empty.png"))."\"";
/*                        if (!is_dir($currentFile))
                            $atts[] = "onclick=\"alert(opener.CKEDITOR.tools.callFunction(1,'http://12','');window.top.close() ;window.top.opener.focus() ;"."\"";*/
                        
                        
$attributes join(" "$atts);
                        
$repName $repIndex;
                    }
                    else 
                    {
                        
$folderBaseName Utils::xmlEntities$repName);
                        
$link SystemTextEncoding::toUTF8(SERVER_ACCESS."?dir=".$dir."/".$folderBaseName);
                        
$link urlencode($link);                        
                        
$folderFullName Utils::xmlEntities$dir)."/".$folderBaseName;
                        
$parentFolderName $dir;
                        if(!
$completeMode){
                            
$icon CLIENT_RESOURCES_FOLDER."/images/foldericon.png";
                            
$openicon CLIENT_RESOURCES_FOLDER."/images/openfoldericon.png";
                            if(
eregi("\.zip$",$repName)){
                                
$icon $openicon CLIENT_RESOURCES_FOLDER."/images/crystal/actions/16/accessories-archiver.png";
                            }
                            
$attributes "icon=\"$icon\"  openicon=\"$openicon\" filename=\"".SystemTextEncoding::toUTF8($folderFullName)."\" src=\"$link\"";
                        }
                    }
                    print(
"<tree text=\"".Utils::xmlEntitiesSystemTextEncoding::toUTF8($repName))."\" $attributes>");
                    print(
"</tree>");
                }
                
// ADD RECYCLE BIN TO THE LIST
                
if($nom_rep == $this->repository->getOption("PATH") && $recycleBinOption!="" && !$completeMode && !$skipZip)
                {
                    if(
$fileListMode)
                    {
                        print(
"<tree text=\"".Utils::xmlEntities($mess[122])."\" filesize=\"-\" is_file=\"0\" is_recycle=\"1\" mimestring=\"Trashcan\" ajxp_modiftime=\"".$this->date_modif($this->repository->getOption("PATH")."/".$recycleBinOption)."\" filename=\"/".$recycleBinOption."\" icon=\"trashcan.png\"></tree>");
                    }
                    else 
                    {                        
                        print(
"<tree text=\"$mess[122]\" is_recycle=\"true\" icon=\"".CLIENT_RESOURCES_FOLDER."/images/crystal/mimes/16/trashcan.png\"  openIcon=\"".CLIENT_RESOURCES_FOLDER."/images/crystal/mimes/16/trashcan.png\" filename=\"/".$recycleBinOption."\"/>");
                    }
                }
                
AJXP_XMLWriter::close();
                exit(
1);
                
            break;        
        }

        if(isset(
$logMessage) || isset($errorMessage))
        {
            
$xmlBuffer .= AJXP_XMLWriter::sendMessage((isSet($logMessage)?$logMessage:null), (isSet($errorMessage)?$errorMessage:null), false);            
        }
        
        if(isset(
$requireAuth))
        {
            
$xmlBuffer .= AJXP_XMLWriter::requireAuth(false);
        }
        
        if(isset(
$reload_current_node) && $reload_current_node == "true")
        {
            
$xmlBuffer .= AJXP_XMLWriter::reloadCurrentNode(false);
        }
        
        if(isset(
$reload_dest_node) && $reload_dest_node != "")
        {
            
$xmlBuffer .= AJXP_XMLWriter::reloadNode($reload_dest_nodefalse);
        }
        
        if(isset(
$reload_file_list))
        {
            
$xmlBuffer .= AJXP_XMLWriter::reloadFileList($reload_file_listfalse);
        }
        
        return 
$xmlBuffer;
    }
    
    function 
getPath(){
        return 
$this->repository->getOption("PATH");
    }
    
    function 
zipListing($zipPath$localPath, &$filteredList){
        require_once(
"server/classes/pclzip.lib.php");
        
$crtZip = new PclZip($this->getPath()."/".$zipPath);
        
$liste $crtZip->listContent();
        
$files = array();
        if(
$localPath[strlen($localPath)-1] != "/"$localPath.="/";
        foreach (
$liste as $item){
            
$stored $item["stored_filename"];            
            if(
$stored[0] != "/"$stored "/".$stored;                        
            
$pathPos strpos($stored$localPath);
            if(
$pathPos !== false){
                
$afterPath substr($stored$pathPos+strlen($localPath));
                if(
$afterPath != "" && strpos($afterPath"/")=== false || strpos($afterPath"/") == strlen($afterPath)-1){
                    
$item["filename"] = $zipPath.$localPath.$afterPath;
                    if(
$item["folder"]){
                        
$filteredList[] = $item;
                    }else{
                        
$files[] = $item;
                    }
                }
                
            }
        }
        
$filteredList array_merge($filteredList$files);
        return 
$crtZip;        
    }
    
    function 
filterFile($fileName){
        
$pathParts pathinfo($fileName);
        if(
array_key_exists("HIDE_FILENAMES"$this->driverConf) && is_array($this->driverConf["HIDE_FILENAMES"])){
            foreach (
$this->driverConf["HIDE_FILENAMES"] as $search){
                if(
strcasecmp($search$pathParts["basename"]) == 0) return true;
            }
        }
        if(
array_key_exists("HIDE_EXTENSIONS"$this->driverConf) && is_array($this->driverConf["HIDE_EXTENSIONS"])){
            foreach (
$this->driverConf["HIDE_EXTENSIONS"] as $search){
                if(
strcasecmp($search$pathParts["extension"]) == 0) return true;
            }
        }
        return 
false;
    }
    
    function 
filterFolder($folderName){
        if(
array_key_exists("HIDE_FOLDERS"$this->driverConf) && is_array($this->driverConf["HIDE_FOLDERS"])){
            foreach (
$this->driverConf["HIDE_FOLDERS"] as $search){
                if(
strcasecmp($search$folderName) == 0) return true;
            }
        }
        return 
false;        
    }
    
    function 
initName($dir)
    {
        
$racine $this->getPath();        
        
$mess ConfService::getMessages();
        if(!isset(
$dir) || $dir=="" || $dir == "/")
        {
            
$nom_rep=$racine;
        }
        else
        {
            
$nom_rep="$racine/$dir";
        }
        if(!
file_exists($racine))
        {
            return new 
AJXP_Exception(72);
        }
        if(!
is_dir($nom_rep))
        {
            return new 
AJXP_Exception(100);
        }
        return 
$nom_rep;
    }

    function 
getTrueSize($file) {
        if (!(
strtoupper(substr(PHP_OS03)) == 'WIN')){
            
$cmd "stat -L -c%s \"".$file."\"";
            
$val trim(`$cmd`);
            if (
strlen($val) == || floatval($val) == 0)
            {
                
// No stat on system
                
$cmd "ls -1s --block-size=1 \"".$file."\"";
                
$val trim(`$cmd`);
            }
            if (
strlen($val) == || floatval($val) == 0)
            {
                
// No block-size on system (probably busybox), try long output
                
$cmd "ls -l \"".$file."\"";

                
$arr preg_split("/[\s]+/", `$cmd`);
                
$val trim($arr[4]);
            }
            if (
strlen($val) == || floatval($val) == 0){
                
// Still not working, get a value at least, not 0...
                
$val sprintf("%u"filesize($file));
            }
            return 
floatval($val);
        }else if (
extension_loaded("COM")){
            
$fsobj = new COM("Scripting.FileSystemObject");
            
$f $fsobj->GetFile($file);
            return 
floatval($file->Size);
        }
        else if (
is_file($file)){
            return 
exec('FOR %A IN ("'.$file.'") DO @ECHO %~zA');
        }
        else return 
sprintf("%u"filesize($file));
    }

    function 
readFile($filePathOrData$headerType="plain"$localName=""$data=false$gzip=GZIP_DOWNLOAD)
    {
        
session_write_close();
        if(!
$data){
            
$test fopen($filePathOrData"r");
            if(
$testfclose($test);
        }
        
$isFile = !$data && !$gzip
        
$size = ($data strlen($filePathOrData) : floatval(trim($this->getTrueSize($filePathOrData))));
        if(
$gzip && ($size GZIP_LIMIT || !function_exists("gzencode") || @strpos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') === FALSE)){
            
$gzip false// disable gzip
        
}
        
$localName = ($localName=="" basename($filePathOrData) : $localName);
        if(
$headerType == "plain")
        {
            
header("Content-type:text/plain");
        }
        else if(
$headerType == "image")
        {
            
header("Content-Type: ".Utils::getImageMimeType(basename($filePathOrData))."; name=\"".$localName."\"");
            
header("Content-Length: ".$size);
            
header('Cache-Control: public');
        }
        else if(
$headerType == "mp3")
        {
            
header("Content-Type: audio/mp3; name=\"".$localName."\"");
            
header("Content-Length: ".$size);
        }
        else
        {
            if(
preg_match('/ MSIE /',$_SERVER['HTTP_USER_AGENT']) || preg_match('/ WebKit /',$_SERVER['HTTP_USER_AGENT'])){
                
$localName str_replace("+"" "urlencode(SystemTextEncoding::toUTF8($localName)));
            }

            if (
$isFileheader("Accept-Ranges: bytes");
            
// Check if we have a range header (we are resuming a transfer)
            
if ( isset($_SERVER['HTTP_RANGE']) && $isFile && $size != )
            {
                
// multiple ranges, which can become pretty complex, so ignore it for now
                
$ranges explode('='$_SERVER['HTTP_RANGE']);
                
$offsets explode('-'$ranges[1]);
                
$offset floatval($offsets[0]);

                
$length floatval($offsets[1]) - $offset;
                if (!
$length$length $size $offset;
                if (
$length $offset $size || $length 0$length $size $offset;
                
header('HTTP/1.1 206 Partial Content');

                
header('Content-Range: bytes ' $offset '-' . ($offset $length 1) . '/' $size);
                
header("Content-Length: "$length);
                
$file fopen($filePathOrData'rb');
                
fseek($file0);
                
$relOffset $offset;
                while (
$relOffset 2.0E9)
                {
                    
// seek to the requested offset, this is 0 if it's not a partial content request
                    
fseek($file2000000000SEEK_CUR);
                    
$relOffset -= 2000000000;
                    
// This works because we never overcome the PHP 32 bit limit
                
}
                
fseek($file$relOffsetSEEK_CUR);

                
$readSize 0.0;
                while (!
feof($file) && $readSize $length && connection_status() == 0)
                {
                    echo 
fread($file2048);
                    
$readSize += 2048.0;
                    
flush();
                }
                
fclose($file);
                return;
            } else
            {
                
header("Content-Type: application/force-download; name=\"".$localName."\"");
                
header("Content-Transfer-Encoding: binary");
                if(
$gzip){
                    
header("Content-Encoding: gzip");
                    
// If gzip, recompute data size!
                    
$gzippedData = ($data?gzencode($filePathOrData,9):gzencode(file_get_contents($filePathOrData), 9));
                    
$size strlen($gzippedData);
                }
                
header("Content-Length: ".$size);
                if (
$isFile && ($size != 0)) header("Content-Range: bytes 0-" . ($size 1) . "/" $size ";");
                
header("Content-Disposition: attachment; filename=\"".$localName."\"");
                
header("Expires: 0");
                
header("Cache-Control: no-cache, must-revalidate");
                
header("Pragma: no-cache");
                if (
preg_match('/ MSIE 6/',$_SERVER['HTTP_USER_AGENT'])){
                    
header("Cache-Control: max_age=0");
                    
header("Pragma: public");
                }

                
// For SSL websites there is a bug with IE see article KB 323308
                // therefore we must reset the Cache-Control and Pragma Header
                
if (ConfService::getConf("USE_HTTPS")==&& preg_match('/ MSIE /',$_SERVER['HTTP_USER_AGENT']))
                {
                    
header("Cache-Control:");
                    
header("Pragma:");
                }
                if(
$gzip){
                    print 
$gzippedData;
                    return;
                }
            }
        }

        if(
$data){
            print(
$filePathOrData);
        }else{
            
readfile($filePathOrData);
        }
    }

    function 
countFiles($dirName){
        
$handle=opendir($dirName);
        
$count 0;
        while (
$file readdir($handle))
        {
            if(
$file != "." && $file !=".." && !(Utils::isHidden($file) && !$this->driverConf["SHOW_HIDDEN_FILES"])){
                
$count++;
            }            
        }
        
closedir($handle);
        return 
$count;
    }
    
    function 
listing($nom_rep$dir_only false$offset=0$limit=0)
    {
        
$mess ConfService::getMessages();
        
$size_unit $mess["byte_unit_symbol"];
        
$orderDir 0;
        
$orderBy "filename";
        
$handle=opendir($nom_rep);
        
$recycle $this->repository->getOption("RECYCLE_BIN");
        
$cursor 0;
        while (
$file readdir($handle))
        {
            if(
$file!="." && $file!=".." && !(Utils::isHidden($file) && !$this->driverConf["SHOW_HIDDEN_FILES"]))
            {
                if(
$offset && $cursor $offset){
                    
$cursor ++;
                    continue;
                }
                if(
$limit && ($cursor $offset) >= $limit) {
                    break;
                }
                
$cursor ++;
                if(
$recycle != "" 
                    
&& $nom_rep == $this->repository->getOption("PATH")."/".$recycle 
                    
&& $file == RecycleBinManager::getCacheFileName()){
                    continue;
                }
                
$poidsfic=@filesize("$nom_rep/$file") or 0;
                if(
is_dir("$nom_rep/$file"))
                {    
                    if(
$this->filterFolder($file)) continue;                
                    if(
$recycle != "" && $this->getPath()."/".$recycle == "$nom_rep/$file")
                    {
                        continue;
                    }
                    if(
$orderBy=="mod") {$liste_rep[$file]=filemtime("$nom_rep/$file");}
                    else {
$liste_rep[$file]=$file;}
                }
                else
                {
                    if(
$this->filterFile($file)) continue;
                    if(!
$dir_only)
                    {
                        if(
$orderBy=="filename") {$liste_fic[$file]=Utils::mimetype("$nom_rep/$file","image"is_dir("$nom_rep/$file"));}
                        else if(
$orderBy=="filesize") {$liste_fic[$file]=$poidsfic;}
                        else if(
$orderBy=="mod") {$liste_fic[$file]=filemtime("$nom_rep/$file");}
                        else if(
$orderBy=="filetype") {$liste_fic[$file]=Utils::mimetype("$nom_rep/$file","type",is_dir("$nom_rep/$file"));}
                        else {
$liste_fic[$file]=Utils::mimetype("$nom_rep/$file","image"is_dir("$nom_rep/$file"));}
                    }
                    else if(
eregi("\.zip$",$file) && ConfService::zipEnabled()){
                        if(!isSet(
$liste_zip)) $liste_zip = array();
                        
$liste_zip[$file] = $file;
                    }
                }
            }
        }
        
closedir($handle);
    
        if(isset(
$liste_fic) && is_array($liste_fic))
        {
            if(
$orderBy=="filename") {if($orderDir==0){ksort($liste_fic);}else{krsort($liste_fic);}}
            else if(
$orderBy=="mod") {if($orderDir==0){arsort($liste_fic);}else{asort($liste_fic);}}
            else if(
$orderBy=="filesize"||$orderBy=="filetype") {if($orderDir==0){asort($liste_fic);}else{arsort($liste_fic);}}
            else {if(
$orderDir==0){ksort($liste_fic);}else{krsort($liste_fic);}}

            if(
$orderBy != "filename"){
                foreach (
$liste_fic as $index=>$value){
                    
$liste_fic[$index] = Utils::mimetype($index"image"false);
                }
            }
        }
        else
        {
            
$liste_fic = array();
        }
        if(isset(
$liste_rep) && is_array($liste_rep))
        {
            if(
$orderBy=="mod") {if($orderDir==0){arsort($liste_rep);}else{asort($liste_rep);}}
            else {if(
$orderDir==0){ksort($liste_rep);}else{krsort($liste_rep);}}
            if(
$orderBy != "filename"){
                foreach (
$liste_rep as $index=>$value){
                    
$liste_rep[$index] = $index;
                }
            }
        }
        else (
$liste_rep = array());

        
$liste Utils::mergeArrays($liste_rep,$liste_fic);
        if(isSet(
$liste_zip)){
            
$liste Utils::mergeArrays($liste,$liste_zip);
        }
    
        return 
$liste;
    }
    
    function 
date_modif($file)
    {
        
$tmp = @filemtime($file) or 0;
        return 
$tmp;// date("d,m L Y H:i:s",$tmp);
    
}
    
    function 
changeMode($filePath)
    {
        
$chmodValue $this->repository->getOption("CHMOD_VALUE");
        if(isSet(
$chmodValue) && $chmodValue != "")
        {
            
chmod($filePathoctdec(ltrim($chmodValue"0")));
        }        
    }
    
    function 
copyOrMove($destDir$selectedFiles, &$error, &$success$move false)
    {
        
$mess ConfService::getMessages();
        if(!
is_writable($this->getPath()."/".$destDir))
        {
            
$error[] = $mess[38]." ".$destDir." ".$mess[99];
            return ;
        }
                
        foreach (
$selectedFiles as $selectedFile)
        {
            if(
$move && !is_writable(dirname($this->getPath()."/".$selectedFile)))
            {
                
$error[] = "\n".$mess[38]." ".dirname($selectedFile)." ".$mess[99];
                continue;
            }
            
$this->copyOrMoveFile($destDir$selectedFile$error$success$move);
        }
    }
    
    function 
renameAction($actionName$httpVars)
    {
        
$filePath SystemTextEncoding::fromUTF8($httpVars["file"]);
        
$newFilename SystemTextEncoding::fromUTF8($httpVars["filename_new"]);
        return 
$this->rename($filePath$newFilename);
    }
    
    function 
rename($filePath$filename_new)
    {
        
$nom_fic=basename($filePath);
        
$mess ConfService::getMessages();
        
$filename_new=Utils::processFileName($filename_new);
        
$old=$this->getPath()."/$filePath";
        if(!
is_writable($old))
        {
            return 
$mess[34]." ".$nom_fic." ".$mess[99];
        }
        
$new=dirname($old)."/".$filename_new;
        if(
$filename_new=="")
        {
            return 
"$mess[37]";
        }
        if(
file_exists($new))
        {
            return 
"$filename_new $mess[43]"
        }
        if(!
file_exists($old))
        {
            return 
$mess[100].$nom_fic";
        }
        
rename($old,$new);
        return 
null;        
    }
    
    function 
autoRenameForDest($destination$fileName){
        if(!
is_file($destination."/".$fileName)) return $fileName;
        
$i 1;
        
$ext "";
        
$name "";
        
$split split("\."$fileName);
        if(
count($split) > 1){
            
$ext ".".$split[count($split)-1];
            
array_pop($split);
            
$name join("\."$split);
        }else{
            
$name $fileName;
        }
        while (
is_file($destination."/".$name."-$i".$ext)) {
            
$i++; // increment i until finding a non existing file.
        
}
        return 
$name."-$i".$ext;
    }
    
    function 
mkDir($crtDir$newDirName)
    {
        
$mess ConfService::getMessages();
        if(
$newDirName=="")
        {
            return 
"$mess[37]";
        }
        if(
file_exists($this->getPath()."/$crtDir/$newDirName"))
        {
            return 
"$mess[40]"
        }
        if(!
is_writable($this->getPath()."/$crtDir"))
        {
            return 
$mess[38].$crtDir ".$mess[99];
        }

        
$dirMode 0775;
        
$chmodValue $this->repository->getOption("CHMOD_VALUE");
        if(isSet(
$chmodValue) && $chmodValue != "")
        {
            
$dirMode octdec(ltrim($chmodValue"0"));
            if (
$dirMode 0400$dirMode |= 0100// User is allowed to read, allow to list the directory
            
if ($dirMode 0040$dirMode |= 0010// Group is allowed to read, allow to list the directory
            
if ($dirMode 0004$dirMode |= 0001// Other are allowed to read, allow to list the directory            
        
}
        
mkdir($this->getPath()."/$crtDir/$newDirName"$dirMode);
        return 
null;        
    }
    
    function 
createEmptyFile($crtDir$newFileName)
    {
        
$mess ConfService::getMessages();
        if(
$newFileName=="")
        {
            return 
"$mess[37]";
        }
        if(
file_exists($this->getPath()."/$crtDir/$newFileName"))
        {
            return 
"$mess[71]";
        }
        if(!
is_writable($this->getPath()."/$crtDir"))
        {
            return 
"$mess[38] $crtDir $mess[99]";
        }
        
        
$fp=fopen($this->getPath()."/$crtDir/$newFileName","w");
        if(
$fp)
        {
            if(
eregi("\.html$",$newFileName)||eregi("\.htm$",$newFileName))
            {
                
fputs($fp,"<html>\n<head>\n<title>New Document - Created By AjaXplorer</title>\n<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n</head>\n<body bgcolor=\"#FFFFFF\" text=\"#000000\">\n\n</body>\n</html>\n");
            }
            
fclose($fp);
            
$this->changeMode($this->getPath()."/$crtDir/$newFileName");
            return 
null;
        }
        else
        {
            return 
"$mess[102] $crtDir/$newFileName (".$fp.")";
        }        
    }
    
    
    function 
delete($selectedFiles, &$logMessages)
    {
        
$mess ConfService::getMessages();
        foreach (
$selectedFiles as $selectedFile)
        {    
            if(
$selectedFile == "" || $selectedFile == DIRECTORY_SEPARATOR)
            {
                return 
$mess[120];
            }
            
$fileToDelete=$this->getPath().$selectedFile;
            if(!
file_exists($fileToDelete))
            {
                
$logMessages[]=$mess[100]." ".SystemTextEncoding::toUTF8($selectedFile);
                continue;
            }        
            
$this->deldir($fileToDelete);
            if(
is_dir($fileToDelete))
            {
                
$logMessages[]="$mess[38] ".SystemTextEncoding::toUTF8($selectedFile).$mess[44].";
            }
            else 
            {
                
$logMessages[]="$mess[34] ".SystemTextEncoding::toUTF8($selectedFile).$mess[44].";
            }
        }
        return 
null;
    }
    
    
    
    function 
copyOrMoveFile($destDir$srcFile, &$error, &$success$move false)
    {
        
$mess ConfService::getMessages();        
        
$destFile $this->repository->getOption("PATH").$destDir."/".basename($srcFile);
        
$realSrcFile $this->repository->getOption("PATH")."/$srcFile";
        
$recycle $this->repository->getOption("RECYCLE_BIN");        
        if(!
file_exists($realSrcFile))
        {
            
$error[] = $mess[100].$srcFile;
            return ;
        }
        if(
$realSrcFile==$destFile)
        {
            
$error[] = $mess[101];
            return ;
        }
        if(
is_dir($realSrcFile))
        {
            
$errors = array();
            
$succFiles = array();
            if(
$move){
                if(
is_file($destFile)) unlink($destFile);
                
$res rename($realSrcFile$destFile);
            }else{
                
$dirRes $this->dircopy($realSrcFile$destFile$errors$succFiles);
            }
            if(
count($errors) || (isSet($res) && $res!==true))
            {
                
$error[] = $mess[114];
                return ;
            }            
        }
        else 
        {
            if(
$move){
                if(
is_file($destFile)) unlink($destFile);
                
$res rename($realSrcFile$destFile);
            }else{
                
$res copy($realSrcFile,$destFile);
            }
            if(
$res != 1)
            {
                
$error[] = $mess[114];
                return ;
            }
        }
        
        if(
$move)
        {
            
// Now delete original
            // $this->deldir($realSrcFile); // both file and dir
            
$messagePart $mess[74]." ".SystemTextEncoding::toUTF8($destDir);
            if(
$destDir == "/".$recycle)
            {
                
RecycleBinManager::fileToRecycle($srcFile);
                
$messagePart $mess[123]." ".$mess[122];
            }
            if(isset(
$dirRes))
            {
                
$success[] = $mess[117]." ".SystemTextEncoding::toUTF8(basename($srcFile))." ".$messagePart." (".SystemTextEncoding::toUTF8($dirRes)." ".$mess[116].") ";
            }
            else 
            {
                
$success[] = $mess[34]." ".SystemTextEncoding::toUTF8(basename($srcFile))." ".$messagePart;
            }
        }
        else
        {            
            if(
$destDir == "/".$this->repository->getOption("RECYCLE_BIN"))
            {
                
RecycleBinManager::fileToRecycle($srcFile);
            }
            if(isSet(
$dirRes))
            {
                
$success[] = $mess[117]." ".SystemTextEncoding::toUTF8(basename($srcFile))." ".$mess[73]." ".SystemTextEncoding::toUTF8($destDir)." (".SystemTextEncoding::toUTF8($dirRes)." ".$mess[116].")";    
            }
            else 
            {
                
$success[] = $mess[34]." ".SystemTextEncoding::toUTF8(basename($srcFile))." ".$mess[73]." ".SystemTextEncoding::toUTF8($destDir);
            }
        }
        
    }

    
// A function to copy files from one directory to another one, including subdirectories and
    // nonexisting or newer files. Function returns number of files copied.
    // This function is PHP implementation of Windows xcopy  A:\dir1\* B:\dir2 /D /E /F /H /R /Y
    // Syntaxis: [$number =] dircopy($sourcedirectory, $destinationdirectory [, $verbose]);
    // Example: $num = dircopy('A:\dir1', 'B:\dir2', 1);

    
function dircopy($srcdir$dstdir, &$errors, &$success$verbose false
    {
        
$num 0;
        if(!
is_dir($dstdir)) mkdir($dstdir);
        if(
$curdir opendir($srcdir)) 
        {
            while(
$file readdir($curdir)) 
            {
                if(
$file != '.' && $file != '..'
                {
                    
$srcfile $srcdir DIRECTORY_SEPARATOR $file;
                    
$dstfile $dstdir DIRECTORY_SEPARATOR $file;
                    if(
is_file($srcfile)) 
                    {
                        if(
is_file($dstfile)) $ow filemtime($srcfile) - filemtime($dstfile); else $ow 1;
                        if(
$ow 0
                        {
                            if(
$verbose) echo "Copying '$srcfile' to '$dstfile'...";
                            if(
copy($srcfile$dstfile)) 
                            {
                                
touch($dstfilefilemtime($srcfile)); $num++;
                                if(
$verbose) echo "OK\n";
                                
$success[] = $srcfile;
                            }
                            else 
                            {
                                
$errors[] = $srcfile;
                            }
                        }
                    }
                    else if(
is_dir($srcfile)) 
                    {
                        
$num += $this->dircopy($srcfile$dstfile$errors$success$verbose);
                    }
                }
            }
            
closedir($curdir);
        }
        return 
$num;
    }
    
    function 
simpleCopy($origFile$destFile)
    {
        return 
copy($origFile$destFile);
    }
    
    function 
isWriteable($dir)
    {
        return 
is_writable($dir);
    }
    
    function 
deldir($location)
    {
        if(
is_dir($location))
        {
            
$all=opendir($location);
            while (
$file=readdir($all))
            {
                if (
is_dir("$location/$file") && $file !=".." && $file!=".")
                {
                    
$this->deldir("$location/$file");
                    if(
file_exists("$location/$file")){
                        
rmdir("$location/$file"); 
                    }
                    unset(
$file);
                }
                elseif (!
is_dir("$location/$file"))
                {
                    if(
file_exists("$location/$file")){
                        
unlink("$location/$file"); 
                    }
                    unset(
$file);
                }
            }
            
closedir($all);
            
rmdir($location);
        }
        else
        {
            if(
file_exists("$location")) {
                
$test = @unlink("$location");
                if(!
$test) throw new Exception("Cannot delete file ".$location);
            }
        }
        if(
basename(dirname($location)) == $this->repository->getOption("RECYCLE_BIN"))
        {
            
// DELETING FROM RECYCLE
            
RecycleBinManager::deleteFromRecycle($location);
        }
    }
    
    
/**
     * Change file permissions 
     *
     * @param String $path
     * @param String $chmodValue
     * @param Boolean $recursive
     * @param String $nodeType "both", "file", "dir"
     */
    
function chmod($path$chmodValue$recursive=false$nodeType="both", &$changedFiles)
    {
        
$chmodValue octdec(ltrim($chmodValue"0"));
        if(
is_file($path) && ($nodeType=="both" || $nodeType=="file")){
            
chmod($path$chmodValue);
            
$changedFiles[] = $path;
        }else if(
is_dir($path)){
            if(
$nodeType=="both" || $nodeType=="dir"){
                
chmod($path$chmodValue);                
                
$changedFiles[] = $path;
            }
            if(
$recursive){
                
$handler opendir($path);
                while (
$child=readdir($handler)) {
                    if(
$child == "." || $child == "..") continue;
                    
$this->chmod($path."/".$child$chmodValue$recursive$nodeType$changedFiles);
                }
                
closedir($handler);
            }
        }
    }
    
    
/**
     * @return zipfile
     */ 
    
function makeZip ($src$dest$basedir)
    {
        
$safeMode =  (@ini_get("safe_mode") == 'On' || @ini_get("safe_mode") === 1) ? TRUE FALSE;
        if(!
$safeMode){
            
set_time_limit(60);
        }
        require_once(
SERVER_RESOURCES_FOLDER."/pclzip.lib.php");
        
$filePaths = array();
        
$totalSize 0;
        foreach (
$src as $item){
            
$filePaths[] = array(PCLZIP_ATT_FILE_NAME => $this->getPath().$item
                                 
PCLZIP_ATT_FILE_NEW_SHORT_NAME => basename($item));
        }
        
$archive = new PclZip($dest);
        
$vList $archive->create($filePathsPCLZIP_OPT_REMOVE_PATH$this->getPath().$basedirPCLZIP_OPT_NO_COMPRESSION);
        if(
$vList == 0) return false;
    }
    
    
    
/**
     * @param $selection UserSelection
     */
    
function convertSelectionToTmpFiles($tmpDir, &$selection){
        
$zipPath $selection->getZipPath();
        
$localDir $selection->getZipLocalPath();
        
$files $selection->getFiles();
        foreach (
$files as $key => $item){// Remove path
            
$item substr($itemstrlen($zipPath));
            if(
$item[0] == "/"$item substr($item1);
            
$files[$key] = $item;
        }
        require_once(
"server/classes/pclzip.lib.php");
        
$zip = new PclZip($this->getPath().$zipPath);
        
$err $zip->extract(PCLZIP_OPT_BY_NAME$files
                      
PCLZIP_OPT_PATH$this->getPath()."/".$tmpDir);
        foreach (
$files as $key => $item){// Remove path
            
$files[$key] = $tmpDir."/".$item;
        }
        
$selection->setFiles($files);
    }
    
    
/** The publiclet URL making */
    
function makePubliclet($filePath$password$expire)
    {
        
$data = array("DRIVER"=>"fs""OPTIONS"=>NULL"FILE_PATH"=>$filePath"ACTION"=>"download""EXPIRE_TIME"=>$expire ? (time() + $expire 86400) : 0"PASSWORD"=>$password);
        return 
$this->writePubliclet($data);
     }
    
}

?>

:: Command execute ::

Enter:
 
Select:
 

:: Search ::
  - regexp 

:: Upload ::
 
[ ok ]

:: Make Dir ::
 
[ ok ]
:: Make File ::
 
[ ok ]

:: Go Dir ::
 
:: Go File ::
 

--[ c99shell v. 2.0 [PHP 7 Update] [25.02.2019] maintained by PinoyWH1Z | C99Shell Github | Generation time: 0.0257 ]--