<?php namespace BitApps\FM\Providers\FileManager; \defined('ABSPATH') || exit(); class ClientOptions { /** * Connector URL * * @var string */ private $_url = ''; /** * Finder themes * * @var array */ private $_themes; /** * Finder selected theme * * @var array */ private $_theme; /** * The interface lang to use * * @var string */ private $_lang = 'en'; /** * Data to append to all requests and to upload files * * @var array */ private $_customData = []; /** * Additional css class for file manager node * * @var string */ private $_cssClass = ''; /** * Auto load required CSS * * @var bool */ private $_cssAutoLoad = true; /** * Remember last opened dir to open it after reload or in next session * * @var bool */ private $_rememberLastDir = true; /** * Clear history's(elFinder) on reload(not browser) function * * @var bool */ private $_reloadClearHistory = false; /** * Use browser native history with supported browsers * * @var bool */ private $_useBrowserHistory = true; /** * Display only certain files based on their mime type * * @var string */ private $_onlyMimes = []; /** * Used to validate file names * * @var string|bool */ private $_validName; /** * Hash of default directory path to open * * @var string */ private $_startPathHash = ''; /** * Default view mode * * @var string icons | list */ private $_defaultView = 'icons'; /** * Default sort * 'name' - sort by name * * @var string name | kind |size | date */ private $_sortType = 'nameDirsFirst'; /** * Default sort order * * @var string asc | desc */ private $_sortOrder = 'asc'; /** * Display folders first? * * @var bool */ private $_sortStickFolders = true; /** * The width of the elFinder main interface. * Can be the string 'auto' or any number measurement (in pixels). * * @var string|int */ private $_width = 'auto'; /** * The height of the elFinder main interface (in pixels) * number or string (ex. '100%') Default value: 400 * * @var string|int */ private $_height = 400; /** * Format dates using client * If set to false - backend date format will be used. * * @var bool */ private $_clientFormatDate = true; /** * Show datetime in UTC timezone. * Requires clientFormatDate set to true. * * @var bool */ private $_UTCDate = false; /** * File modification datetime format * Set format here to overwrite it. Format is set in PHP date manner * * @var string */ private $_dateFormat = ''; /** * File modification datetime format for last two days (today, yesterday) * Same syntax as for dateFormat. Use $1 for "Today" and "Yesterday" placeholder. * * Example: '$1 H:m:i' will return Today 21:59:34 * * @var string */ private $_fancyDateFormat = ''; /** * Style of file mode at cwd-list, info dialog * 'string' (ex. rwxr-xr-x) or 'octal' (ex. 755) or 'both' (ex. rwxr-xr-x (755)) * * @var string */ private $_fileModeStyle = 'both'; /** * Active commands list * '*' means all of the commands that have been load. * available commands: * [ * 'archive', 'back', 'chmod', 'colwidth', 'copy', 'cut', 'download', 'duplicate', 'edit', 'extract', * 'forward', 'fullscreen', 'getfile', 'help', 'home', 'info', 'mkdir', 'mkfile', 'netmount', 'netunmount', * 'open', 'opendir', 'paste', 'places', 'quicklook', 'reload', 'rename', 'resize', 'restore', 'rm', * 'search', 'sort', 'up', 'upload', 'view', 'zipdl' * ] * * @see https://github.com/Studio-42/elFinder/wiki/Client-configuration-options-2.1#commands * * @var array */ private $_commands = ['*']; /** * Commands to disable */ private $_disabled = []; /** * Commands options used to interact with external callbacks, editors, plugins * * @see https://github.com/Studio-42/elFinder/wiki/Client-configuration-options-2.1#commandsoptions * * @var array */ private $_commandsOptions; /** * Callback function for "getfile" command (js function) * * @var string */ private $_getFileCallback; /** * Event listeners to bind on elFinder init (js function) * * @var string */ private $_handlers; /** * UI plugins to load * ['toolbar', 'places', 'tree', 'path', 'stat'] * * @var array */ private $_ui = ['toolbar', 'places', 'tree', 'path', 'stat']; /** * Specifies the configuration for the elFinder UI * * @var string */ private $_uiOptions; /** * The configuration for the right-click context menu * * Example: * { * // navbar folder menu * navbar : ['open', '|', 'copy', 'cut', 'paste', 'duplicate', '|', 'rm', '|', 'info'], * * // current directory menu * cwd : ['reload', 'back', '|', 'upload', 'mkdir', 'mkfile', 'paste', '|', 'info'], * * // current directory file menu * files : [ * 'getfile', '|','open', 'quicklook', '|', 'download', '|', 'copy', 'cut', 'paste', 'duplicate', '|', * 'rm', '|', 'edit', 'rename', 'resize', '|', 'archive', 'extract', '|', 'info' * ] * } * * @see https://github.com/Studio-42/elFinder/wiki/Client-configuration-options-2.1#contextmenu * * @var array */ private $_contextmenu; /** * Whether or not the elFinder interface will be resizable * * @var bool */ private $_resizable = true; /** * Timeout for open notification dialogs in millisecond * * @var int */ private $_notifyDelay = 800; /** * Position and width of notification dialogs * {position: {top : '12px', right : '12px'}, width : 280} * * @var array */ private $_notifyDialog; /** * Allow to drag and drop to upload files * * @var string */ private $_dragUploadAllow = 'auto'; /** * Allow shortcuts * * @var bool */ private $_allowShortcuts = true; /** * Amount of thumbnails to create per one request * * @var int */ private $_loadTmbs = 5; /** * Lazy load * * @var int */ private $_showFiles = 30; /** * Lazy load. Distance in px to cwd bottom edge to start displaying files. * * @var int */ private $_showThreshold = 50; /** * The AJAX request type * * @var string post | get */ private $_requestType = 'post'; /** * Separate URL to upload file to * * @var string */ private $_urlUpload = ''; /** * Timeout for upload using iframe * * @var int */ private $_iframeTimeout = 0; /** * Sync content by refreshing cwd every N seconds * * @var int */ private $_sync = 0; /** * Cookie option for browsers that does not support localStorage * * @var array */ private $_cookie; /** * Passing custom headers during Ajax calls * * @var array */ private $_customHeaders; /** * Any custom xhrFields to send across every ajax request, useful for CORS (Cross-origin resource sharing) support * * @var array */ private $_xhrFields; /** * Debug config * * @var bool|array */ private $_debug = ['error', 'warning', 'event-destroy']; /** * Increase chunk size.(bytes) * * @var int */ private $_uploadMaxChunkSize = 10485760; /** * Directory path to rm.wav file * * @var string */ private $_soundPath; /** * Constructs Finder frontend options * * @param mixed $debug */ public function __construct($debug = null) { if (!\is_null($debug)) { $this->_debug = $debug; } } public function setOption($name, $value) { if (property_exists($this, "_{$name}")) { $this->{"_{$name}"} = $value; } return $this; } public function getOption($name) { if (property_exists($this, "_{$name}")) { return $this->{"_{$name}"}; } } public function getOptions() { $options = []; $optionsToAdd = [ 'url', 'themes', 'theme', 'cssAutoLoad', 'contextmenu', 'customData', 'lang', 'requestType', 'width', 'height', 'commands', 'disabled', 'commandsOptions', 'rememberLastDir', 'reloadClearHistory', 'defaultView', 'ui', 'sortOrder', 'sortStickFolders', 'dragUploadAllow', 'fileModeStyle', 'resizable', ]; foreach ($optionsToAdd as $option) { if (isset($this->{"_{$option}"})) { $options[$option] = $this->getOption($option); } } return $options; } }