= 2.1.15) * * @var string */ private $_phash; /** * Folder hash value on elFinder to trash bin of this volume (elFinder >= 2.1.24) * Folder hash value on elFinder to trash bin of this volume, it require 'copyJoin' to true * * @var string */ private $_trashHash; /** * To make hash same to Linux one on windows too * * @var bool */ private $_winHashFix; /** * Root directory path * * @var string */ private $_path; /** * Open this path on initial request instead of root path. * Notice: In order to validate this option by a multi-route, * you have to set a value only to the volume which applies this option. * * @var string */ private $_startPath; /** * URL that points to path directory (also called 'root URL') * If not set client will not see full path to files (replacement for old fileURL option), * also all files downloads will be handled by connector. * * @var string */ private $_URL; /** * This volume's local encoding. * (server's file system encoding) It's necessary to be valid value to iconv. * * @see https://gist.github.com/nao-pon/78d64ad9a89d0267833564e5d61f0001 * * @var string */ private $_encoding; /** * This volume's local locale. * It's important for encoding setting. * It's necessary to be valid value in your server. * * 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. * * @var string */ private $_locale; /** * Root path alias for volume root. * If not set will use directory name of path. * * @var string */ private $_alias; /** * Enable i18n folder name that convert name to elFinderInstance.messages['folder_'+name] * * @var bool */ private $_i18nFolderName; /** * Method to detect files mime types. * * @var string auto | internal | finfo | mime_content_type */ private $_mimeDetect; /** * Path to alternative mime types file. Only used when mimeDetect set to internal. * If not set will use default mime.types * * @var string */ private $_mimefile; /** * Additional MIME type normalize map * * Example : * `array( * 'tpl:application/vnd.groove-tool-template' => 'text/plain', * '[ext]:[Detected MIME Type]' => '[Normalized MIME Type]' * )` * * @var array */ private $_additionalMimeMap; /** * MIME regex of send HTTP header "Content-Disposition: inline" on file open command. * '.*' is allow inline of all of MIME types * * '$^' is not allow inline of all of MIME types * * '^(?:image|text/plain$)' is recommended for safety on public elFinder * * Default value: '^(?:(?:video|audio)|image/(?!.+\+xml) * |application/(?:ogg|x-mpegURL|dash\+xml)|(?:text/plain|application/pdf)$)' * * @var string */ private $_dispInlineRegex = '^(?:(?:video|audio)|image/(?!.+\+xml)|application/(?:ogg|x-mpegURL|dash\+xml)|(?:text/plain|application/pdf)$)'; /** * Image manipulations library * * Default value: 'auto' * * @var string auto | imagick | gd | convert */ private $_imgLib; /** * Directory for thumbnails. * If this is a simple filename, it will be prefixed with the root directory path. * If you choose to use a location outside of the root directory, * you should use a full pathname as a relative path using ellipses * will get mangled and may not work (create thumbnails because tmbPath is NOT writable) on some server OS's. * * Default value: '.tmb' * * @var string */ private $_tmbPath; /** * Umask for thumbnails dir creation. * * Default value: 0777 * * @var octal */ private $_tmbPathMode; /** * URL for thumbnails directory set in tmbPath. * Set it only if you want to store thumbnails outside root directory. * If you want chose original image as thumbnail it is able to set 'self'. (elFinder >= 2.1.12) * * @var string */ private $_tmbURL; /** * Thumbnails size in pixels * * Default value: 48 * * @var int */ private $_tmbSize; /** * Crop thumbnails to fit tmbSize. * true - resize and crop. * false - scale image to fit thumbnail size. * * @var bool */ private $_tmbCrop; /** * Thumbnails background color (hex #rrggbb or transparent) * * Default value: 'transparent' * * @var string */ private $_tmbBgColor; /** * Image rotate fallback background color (hex #rrggbb). * Uses this color if it can not specify to transparent. * * Default value: '#ffffff' * * @var bool */ private $_bgColorFb; /** * Fallback self image to thumbnail (nothing imgLib) * * Default value: true * * @var bool */ private $_tmbFbSelf; /** * Replace files on paste or give new names to pasted files. * true - old file will be replaced with new one * false - new file get name - original_name-number.ext * * Default value: true * * @var bool */ private $_copyOverwrite; /** * Merge new and old content on paste * true - join new and old directories content * false - replace old directories with new ones * * Default value: true * * @var bool */ private $_copyJoin = true; /** * Allow to copy from this volume to other ones. * * Default value: true * * @var true */ private $_copyFrom = true; /** * Allow to copy from other volumes to this one * * Default value: true * * @var bool */ private $_copyTo = true; /** * (temporary) Directory for extracts etc. * * @var string */ private $_tmpPath; /** * Replace files with the same name on upload or give them new names * true - replace old files * false - give new names like original_name-number.ext * * Default value: true * * @var bool */ private $_uploadOverwrite; /** * Mime types allowed to upload * Default value: array() * Example: * 'uploadAllow' => array('image') # allow any images * 'uploadAllow' => array('image/png', 'application/x-shockwave-flash') # allow png and flash * * @var array */ private $_uploadAllow = []; /** * Mime types not allowed to upload. * Same values accepted as in uploadAllow * * Default value: array() * Example: * 'uploadDeny' => array('all') # deny of all types * * @var array */ private $_uploadDeny = []; /** * Order to process uploadAllow and uploadDeny options. * Logic is the same as Apache web server options Allow, Deny, Order * * Default value: array('deny', 'allow') * * @var array */ private $_uploadOrder = ['deny', 'allow']; /** * Maximum upload file size. * Can be set as number or string with unit 10M, 500K, 1G. * Note: elFinder 2.1+ support chunked file uploading. * 0 means unlimited upload. * * @var int|string */ private $_uploadMaxSize; /** * Maximum number of chunked upload connection, -1 to disable chunked upload. * * Default value: 3 * * @var int */ private $_uploadMaxConn; /** * Default file/directory permissions. * Setting hidden, locked here - take no effect * * Default value: 'defaults' => array('read' => true, 'write' => true) * * @var array */ private $_defaults = ['read' => true, 'write' => true]; /** * File permission attributes. * * @see https://github.com/Studio-42/elFinder/wiki/Simple-file-permissions-control * * @var array */ private $_attributes; /** * Validate new file name regex or function * * Default value:Default value: '^[^\.].*' * * @var string|callable */ private $_acceptedName; /** * Function or class instance method to control files permissions. * * @var callable|null */ private $_accessControl; /** * Data that will be passed to access control method. * * @var mixed */ private $_accessControlData; /** * List of commands disabled on this root. * * @see https://github.com/Studio-42/elFinder/wiki/Client-Server-API-2.1#command-list * * @var array */ private $_disabled = []; /** * Include file owner, group & mode in stat results * * Default value: false * * @var bool */ private $_statOwner = false; /** * Allow exec chmod of read-only files * * Default value: false * * @var bool */ private $_allowChmodReadOnly = false; /** * How many sub dir levels return per request * * Default value: 1 * * @var int */ private $_treeDeep; /** * Check children directories for other directories in it. * true - every folder will be check for children folders, * -1 - every folder will be check asynchronously, * false - all folders will be marked as having sub folders * * Default value: true * * @var bool|int */ private $_checkSubfolders; /** * Directory separator * * Default value: DIRECTORY_SEPARATOR * * @var string */ private $_separator; /** * File modification date format * * Default value: 'j M Y H:i' * * @var string */ private $_dateFormat = 'j M Y H:i'; /** * File modification time format * * Default value: 'H:i' * * @var string */ private $_timeFormat = 'H:i'; /** * Library to crypt/decrypt files names (not implemented yet) * * @var [type] */ private $_cryptLib; /** * Allowed archive's mime types to create * * @var array */ private $_archiveMimes; /** * Manual config for archiver's. * * @var array */ private $_archivers; /** * Temporary directory for extracting archives (LocalFileSystem volume only) * * @var string */ private $_quarantine; /** * Configure plugin options of each volume * * @var array */ private $_plugin; /** * Constructs Volume root * * @param string $path * @param string $url * @param null|string $alias * @param string $driver LocalFileSystem | MySQL | FTP */ public function __construct($path, $url, $alias = null, $driver = 'LocalFileSystem') { $this->_path = $path; $this->_URL = $url; $this->_driver = $driver; $this->_alias = $alias; } /** * Is this folder readable */ public function isReadable() { return is_readable($this->_path); } /** * Set alias for the root * * @param string $alias * * @return FileRoot */ public function setAlias($alias) { $this->_alias = $alias; return $this; } /** * Sets driver for the root * * @param string $driver LocalFileSystem | MySQL | FTP * * @return FileRoot */ public function setDriver($driver) { $this->_driver = $driver; return $this; } /** * Sets path for the root * * @param string $path * * @return FileRoot */ public function setPath($path) { $this->_path = $path; return $this; } /** * Sets url * * @param string $url * * @return FileRoot */ public function setURL($url) { $this->_URL = $url; return $this; } /** * Sets mime types denied to upload * * @param array $mimes * * @return FileRoot */ public function setUploadDeny($mimes) { $this->_uploadDeny = $mimes; } /** * Sets mime types allowed to upload * * @param array $mimes * * @return FileRoot */ public function setUploadAllow($mimes) { $this->_uploadAllow = $mimes; return $this; } /** * Sets which mimes get precedence $_uploadDeny or $_uploadAllow. * * @param array $order * * @return FileRoot */ public function setUploadOrder($order) { $this->_uploadOrder = $order; return $this; } /** * Sets a callback function for file folder access control. * What is the permission for this file or folder like read or write. * Or hidden or locked * * @return void */ public function setAccessControl(callable $callback) { $this->_accessControl = $callback; return $this; } /** * Sets callback function for file, folder name validation * * @param callable $callback * * @return FileRoot */ public function setAcceptedName(callable $callback) { $this->_acceptedName = $callback; return $this; } /** * Sets commands are need to disable for this volume * * @param array $commands * * @return FileRoot */ public function setDisabled($commands) { $this->_disabled = $commands; return $this; } /** * Sets regex for allowed mime type for Content-Type Header * * @param string $regex * * @return FileRoot */ public function setDispInlineRegex($regex) { $this->_dispInlineRegex = $regex; return $this; } /** * Sets hash for trash bin for this volume * Folder hash value on elFinder to trash bin of this volume, it require 'copyJoin' to true * * @param string $hash * * @return FileRoot */ public function setTrashHash($hash) { $this->_trashHash = $hash; return $this; } /** * Sets winHash fix * * @param bool $status * * @return FileRoot */ public function setWinHashFix($status) { $this->_winHashFix = $status; return $this; } /** * Sets default file permission for this volume * * @param array $permission * * @return FileRoot */ public function setDefaults($permission) { $this->_defaults = $permission; return $this; } /** * Sets $_allowChmodReadOnly. Which determine exec to readonly file is allowed or not * * @param bool $allow * * @return FileRoot */ public function setAllowChmodReadOnly($allow) { $this->_allowChmodReadOnly = $allow; return $this; } /** * Sets $_statOwner. Which determine Inclusion of file owner, group & mode in stat results * * @param bool $allow * * @return FileRoot */ public function setStatOwner($allow) { $this->_statOwner = $allow; return $this; } /** * Sets attributes fo file permission using pattern * * @param array $attributes * * @return FileRoot */ public function setAttributes(array $attributes) { $this->_attributes = $attributes; return $this; } /** * Sets copyTo which determines copy from other volume is allowed or not * * @param bool $copyTo * * @return FileRoot */ public function setCopyTo($copyTo) { $this->_copyTo = $copyTo; return $this; } /** * Sets maximum size of file upload * * @param string|int $uploadMaxSize * * @return FileRoot */ public function setUploadMaxSize($uploadMaxSize) { $this->_uploadMaxSize = $uploadMaxSize; return $this; } /** * Sets allowed archive mime type * * @param array $archiveMimes * * @return void */ public function setArchiveMimes($archiveMimes) { $this->_archiveMimes = $archiveMimes; return $this; } public function setMaxTargets($archiveMimes) { $this->_archiveMimes = $archiveMimes; return $this; } public function setOption($name, $value) { if (property_exists($this, "_{$name}")) { return $this->{"_{$name}"} = $value; } throw new Exception('Property [' . esc_html($name) . '] not Exists in ' . __CLASS__); } public function getOption($name) { if (property_exists($this, $name)) { return $this->{$name}; } } public function getOptions() { $options['tmbPath'] = $this->getOption('_tmbPath'); $options['id'] = $this->getOption('_id'); $options['alias'] = $this->getOption('_alias'); $options['driver'] = $this->getOption('_driver'); $options['path'] = $this->getOption('_path'); $options['URL'] = $this->getOption('_URL'); $options['uploadDeny'] = $this->getOption('_uploadDeny'); $options['uploadAllow'] = $this->getOption('_uploadAllow'); $options['uploadOrder'] = $this->getOption('_uploadOrder'); $options['accessControl'] = $this->getOption('_accessControl'); $options['acceptedName'] = $this->getOption('_acceptedName'); $options['disabled'] = $this->getOption('_disabled'); $options['dispInlineRegex'] = $this->getOption('_dispInlineRegex'); $options['trashHash'] = $this->getOption('_trashHash'); $options['winHashFix'] = $this->getOption('_winHashFix'); $options['defaults'] = $this->getOption('_defaults'); $options['allowChmodReadOnly'] = $this->getOption('_allowChmodReadOnly'); $options['statOwner'] = $this->getOption('_statOwner'); $options['attributes'] = $this->getOption('_attributes'); $options['copyTo'] = $this->getOption('_copyTo'); $options['uploadMaxSize'] = $this->getOption('_uploadMaxSize'); $options['archiveMimes'] = $this->getOption('_archiveMimes'); $options['maxTargets'] = $this->getOption('_maxTargets'); return $options; } }