279 lines
6.6 KiB
PHP
279 lines
6.6 KiB
PHP
<?php
|
|
|
|
namespace BitApps\FM\Providers\FileManager;
|
|
|
|
use BitApps\FM\Config;
|
|
use BitApps\WPKit\Hooks\Hooks;
|
|
|
|
\defined('ABSPATH') || exit();
|
|
class Options
|
|
{
|
|
/**
|
|
* Set locale. Currently only UTF-8 locales are supported. Passed to setLocale PHP function.
|
|
*
|
|
* Warning: Setting the locale correctly is very important.
|
|
* Especially if you do not match the character encoding to that of the server file system,
|
|
* it will create a security vulnerability.
|
|
*
|
|
* Default value: 'en_US.UTF-8'
|
|
*
|
|
* @var string
|
|
*/
|
|
private $_locale;
|
|
|
|
/*
|
|
* elFinderVolumeDriver mime.type file path as defaults.
|
|
* This can be overridden in each of the volume by setting the volume root mimefile.
|
|
* The default value '' meaning uses a file 'php/mime.type'.
|
|
*/
|
|
private $_defaultMimefile;
|
|
|
|
/**
|
|
* Session handling wrapper class object.
|
|
* It must be implement elFinderSessionInterface.
|
|
*
|
|
* @var elFinderSessionInterface
|
|
*/
|
|
private $_session;
|
|
|
|
/**
|
|
* Set sessionCacheKey. PHP $_SESSION array key of elFinder caches.
|
|
*
|
|
* Default value: 'elFinderCaches'
|
|
*
|
|
* @var string
|
|
*/
|
|
private $_sessionCacheKey;
|
|
|
|
/**
|
|
* Finder save session data as UTF-8.
|
|
* If the session storage mechanism of the system does not allow UTF-8, and it must be set true.
|
|
*
|
|
* Default value: false
|
|
*
|
|
* @var string
|
|
* */
|
|
private $_base64encodeSessionData;
|
|
|
|
/**
|
|
* Temp directory path for Upload. Default uses sys_get_temp_dir()
|
|
*
|
|
* @var string
|
|
*/
|
|
private $_uploadTempPath;
|
|
|
|
/*
|
|
* Temp directory path for temporally working files. Default uses ./.tmp if it writable.
|
|
*
|
|
* Default value: './.tmp' or sys_get_temp_dir()
|
|
*/
|
|
private $_commonTempPath;
|
|
|
|
/**
|
|
* Connection flag files path that connection check of current request.
|
|
* A file is created every time an access is made to this location and it is deleted at the end of the request.
|
|
* It is recommended to specify RAM disk such as "/dev/shm".
|
|
*
|
|
* Default value: commonTempPath or ''
|
|
*
|
|
* @var string
|
|
*/
|
|
private $_connectionFlagsPath;
|
|
|
|
/**
|
|
* Max allowed archive files size (0 - no limit)
|
|
* Default value: 0
|
|
*
|
|
* @var int
|
|
*/
|
|
private $_maxArcFilesSize;
|
|
|
|
/**
|
|
* Root options of the network mounting volume
|
|
* Default value: array()
|
|
* Example:
|
|
* 'optionsNetVolumes' => array(
|
|
* // key '*' is common additional volume root options
|
|
* '*' => array(),
|
|
* // key of elFinder::$netDrivers is each protocol volumes
|
|
* 'ftp' => array()
|
|
* )
|
|
*
|
|
* @var array
|
|
*/
|
|
private $_optionsNetVolumes;
|
|
|
|
/**
|
|
* Max number of limits of selectable items (0 - no limit)
|
|
*
|
|
* Default value: 1000
|
|
*
|
|
* @var int
|
|
*/
|
|
private $_maxTargets;
|
|
|
|
/*
|
|
* Throw Error on exec()
|
|
* true need try{} block for $connector->run();
|
|
*
|
|
* Default value: false
|
|
*/
|
|
private $_throwErrorOnExec;
|
|
|
|
/**
|
|
* Send debug to client.
|
|
*
|
|
* Default value: false
|
|
*
|
|
* @var bool
|
|
*/
|
|
private $_debug;
|
|
|
|
/**
|
|
* Bind callbacks for user actions
|
|
*
|
|
* @see https://github.com/Studio-42/elFinder/wiki/Connector-configuration-options-2.1#bind
|
|
*
|
|
* @var array<string, callable>
|
|
*/
|
|
private $_bind;
|
|
|
|
/**
|
|
* Finder volume roots
|
|
*
|
|
* @var array<int, FileRoot>
|
|
*/
|
|
private $_roots;
|
|
|
|
/**
|
|
* Constructs Finder
|
|
*
|
|
* @param mixed $debug
|
|
*/
|
|
public function __construct($debug = false)
|
|
{
|
|
$this->_debug = $debug;
|
|
}
|
|
|
|
/**
|
|
* Sets bind for command actions
|
|
*
|
|
* @param string $commandType
|
|
* @param callable $callback
|
|
*
|
|
* @return Options
|
|
*/
|
|
public function setBind($commandType, callable $callback)
|
|
{
|
|
$this->_bind[$commandType] = $callback;
|
|
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* Sets debug option
|
|
*
|
|
* @param $debug bool
|
|
*
|
|
* @return Options
|
|
*/
|
|
public function setDebug($debug)
|
|
{
|
|
$this->_debug = $debug;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function setRoot(FileRoot $root)
|
|
{
|
|
$this->_roots[] = $root;
|
|
|
|
return $this;
|
|
}
|
|
|
|
public function getRoots()
|
|
{
|
|
$roots = [];
|
|
|
|
if (isset($this->_roots)) {
|
|
foreach ($this->_roots as $root) {
|
|
$roots[] = $root->getOptions();
|
|
}
|
|
}
|
|
|
|
return $roots;
|
|
}
|
|
|
|
public function getOptions()
|
|
{
|
|
$options = [];
|
|
|
|
if (isset($this->_locale)) {
|
|
$options['locale'] = $this->_locale;
|
|
}
|
|
|
|
if (isset($this->_defaultMimefile)) {
|
|
$options['defaultMimefile'] = $this->_defaultMimefile;
|
|
}
|
|
|
|
if (isset($this->_session)) {
|
|
$options['session'] = $this->_session;
|
|
}
|
|
|
|
if (isset($this->_sessionCacheKey)) {
|
|
$options['sessionCacheKey'] = $this->_sessionCacheKey;
|
|
}
|
|
|
|
if (isset($this->_base64encodeSessionData)) {
|
|
$options['base64encodeSessionData'] = $this->_base64encodeSessionData;
|
|
}
|
|
|
|
if (isset($this->_uploadTempPath)) {
|
|
$options['uploadTempPath'] = $this->_uploadTempPath;
|
|
}
|
|
|
|
if (isset($this->_commonTempPath)) {
|
|
$options['commonTempPath'] = $this->_commonTempPath;
|
|
}
|
|
|
|
if (isset($this->_connectionFlagsPath)) {
|
|
$options['connectionFlagsPath'] = $this->_connectionFlagsPath;
|
|
}
|
|
|
|
if (isset($this->_maxArcFilesSize)) {
|
|
$options['maxArcFilesSize'] = $this->_maxArcFilesSize;
|
|
}
|
|
|
|
if (isset($this->_optionsNetVolumes)) {
|
|
$options['optionsNetVolumes'] = $this->_optionsNetVolumes;
|
|
}
|
|
|
|
if (isset($this->_maxTargets)) {
|
|
$options['maxTargets'] = $this->_maxTargets;
|
|
}
|
|
|
|
if (isset($this->_throwErrorOnExec)) {
|
|
$options['throwErrorOnExec'] = $this->_throwErrorOnExec;
|
|
}
|
|
|
|
if (isset($this->_debug)) {
|
|
$options['debug'] = $this->_debug;
|
|
}
|
|
|
|
if (isset($this->_bind)) {
|
|
$options['bind'] = $this->_bind;
|
|
}
|
|
|
|
$options['roots'] = Hooks::applyFilter(Config::withPrefix('filter_volumes'), $this->getRoots());
|
|
|
|
$filteredOptions = Hooks::applyFilter('fm_options_filter', $options);
|
|
|
|
$filteredOptions = Hooks::applyFilter(Config::withPrefix('filter_options'), $filteredOptions);
|
|
if (!empty($filteredOptions['roots'])) {
|
|
$options = $filteredOptions;
|
|
}
|
|
|
|
return $options;
|
|
}
|
|
}
|