/administrator/components/com_k2/lib/elfinder/elFinderConnector.class.php
PHP | 149 lines | 76 code | 22 blank | 51 comment | 22 complexity | 9ebc4f2b7a31d97146fcdce56001f56e MD5 | raw file
- <?php
- /**
- * @version $Id: elFinderConnector.class.php 1492 2012-02-22 17:40:09Z joomlaworks@gmail.com $
- * @package K2
- * @author JoomlaWorks http://www.joomlaworks.net
- * @copyright Copyright (c) 2006 - 2012 JoomlaWorks Ltd. All rights reserved.
- * @license GNU/GPL license: http://www.gnu.org/copyleft/gpl.html
- */
- // no direct access
- defined('_JEXEC') or die('Restricted access');
- ob_start();
- // mb_internal_encoding("UTF-8");
- /**
- * 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']);
- ob_end_clean();
- 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
- ?>