<?php 
 
/** 
 * Default elFinder connector 
 * 
 * @author Dmitry (dio) Levashov 
 **/ 
class elFinderConnector { 
    /** 
     * elFinder instance 
     * 
     * @var elFinder 
     **/ 
    protected $elFinder; 
     
    /** 
     * Options 
     * 
     * @var aray 
     **/ 
    protected $options = array(); 
     
    /** 
     * undocumented class variable 
     * 
     * @var string 
     **/ 
    protected $header = 'Content-Type: application/json'; 
     
     
    /** 
     * Constructor 
     * 
     * @return void 
     * @author Dmitry (dio) Levashov 
     **/ 
    public function __construct($elFinder, $debug=false) { 
         
        $this->elFinder = $elFinder; 
        if ($debug) { 
            $this->header = 'Content-Type: text/html; charset=utf-8'; 
        } 
    } 
     
    /** 
     * Execute elFinder command and output result 
     * 
     * @return void 
     * @author Dmitry (dio) Levashov 
     **/ 
    public function run() { 
        $isPost = $_SERVER["REQUEST_METHOD"] == 'POST'; 
        $src    = $_SERVER["REQUEST_METHOD"] == 'POST' ? $_POST : $_GET; 
        $cmd    = isset($src['cmd']) ? $src['cmd'] : ''; 
        $args   = array(); 
         
        if (!function_exists('json_encode')) { 
            $error = $this->elFinder->error(elFinder::ERROR_CONF, elFinder::ERROR_CONF_NO_JSON); 
            $this->output(array('error' => '{"error":["'.implode('","', $error).'"]}', 'raw' => true)); 
        } 
         
        if (!$this->elFinder->loaded()) { 
            $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_CONF, elFinder::ERROR_CONF_NO_VOL), 'debug' => $this->elFinder->mountErrors)); 
        } 
         
        // telepat_mode: on 
        if (!$cmd && $isPost) { 
            $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_UPLOAD, elFinder::ERROR_UPLOAD_TOTAL_SIZE), 'header' => 'Content-Type: text/html')); 
        } 
        // telepat_mode: off 
         
        if (!$this->elFinder->commandExists($cmd)) { 
            $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_UNKNOWN_CMD))); 
        } 
         
        // collect required arguments to exec command 
        foreach ($this->elFinder->commandArgsList($cmd) as $name => $req) { 
            $arg = $name == 'FILES'  
                ? $_FILES  
                : (isset($src[$name]) ? $src[$name] : ''); 
                 
            if (!is_array($arg)) { 
                $arg = trim($arg); 
            } 
            if ($req && (!isset($arg) || $arg === '')) { 
                $this->output(array('error' => $this->elFinder->error(elFinder::ERROR_INV_PARAMS, $cmd))); 
            } 
            $args[$name] = $arg; 
        } 
         
        $args['debug'] = isset($src['debug']) ? !!$src['debug'] : false; 
         
        $this->output($this->elFinder->exec($cmd, $args)); 
    } 
     
    /** 
     * Output json 
     * 
     * @param  array  data to output 
     * @return void 
     * @author Dmitry (dio) Levashov 
     **/ 
    protected function output(array $data) { 
        $header = isset($data['header']) ? $data['header'] : $this->header; 
        unset($data['header']); 
        if ($header) { 
            if (is_array($header)) { 
                foreach ($header as $h) { 
                    header($h); 
                } 
            } else { 
                header($header); 
            } 
        } 
         
        if (isset($data['pointer'])) { 
            rewind($data['pointer']); 
            fpassthru($data['pointer']); 
            if (!empty($data['volume'])) { 
                $data['volume']->close($data['pointer'], $data['info']['hash']); 
            } 
            exit(); 
        } else { 
            if (!empty($data['raw']) && !empty($data['error'])) { 
                exit($data['error']); 
            } else { 
                exit(json_encode($data)); 
            } 
        } 
         
    } 
     
}// END class  
 
 |