File Manager

Current Directory: /home/astoriaah/www/components/com_jce/editor/tiny_mce/plugins/filemanager
Viewing File: /home/astoriaah/www/components/com_jce/editor/tiny_mce/plugins/filemanager/filemanager.php
<?php /** * @copyright Copyright (c) 2009-2022 Ryan Demmer. All rights reserved * @license GNU/GPL 2 or later - http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * JCE is free software. This version may have been modified pursuant * to the GNU General Public License, and as distributed it includes or * is derivative of works licensed under the GNU General Public License or * other free or open source software licenses */ defined('JPATH_PLATFORM') or die; // Set flag that this is an extension parent if (!defined('_WF_EXT')) { define('_WF_EXT', 1); } class WFFileManagerPlugin extends WFMediaManager { /* * @var string */ protected $name = 'filemanager'; public $_filetypes = 'acrobat=pdf;office=doc,docx,dot,dotx,ppt,pps,pptx,ppsx,xls,xlsx;image=gif,jpeg,jpg,png,apng,webp,avif;archive=zip,tar,gz;video=swf,mov,wmv,avi,flv,mp4,ogv,ogg,webm,mpeg,mpg;audio=wav,mp3,ogg,webm,aiff;openoffice=odt,odg,odp,ods,odf;text=txt,rtf,md'; public function __construct() { $config = array( 'can_edit_images' => 1, 'show_view_mode' => 1, ); parent::__construct($config); $request = WFRequest::getInstance(); $request->setRequest(array($this, 'getFileDetails')); $browser = $this->getBrowser(); $browser->addEvent('onUpload', array($this, 'onUpload')); } /** * Display the plugin. */ public function display() { $slot = JFactory::getApplication()->input->getCmd('slot', 'plugin'); if ($slot === 'editor') { return parent::display(); } parent::display(); $document = WFDocument::getInstance(); $tabs = WFTabs::getInstance(array('base_path' => WF_EDITOR_PLUGIN)); // Add tabs $tabs->addTab('file'); $tabs->addTab('advanced', $this->getParam('tabs_advanced', 1)); // Load Popups instance $popups = WFPopupsExtension::getInstance(array( 'text' => false, 'default' => $this->getParam('filemanager.popups.default', ''), )); $popups->display(); $document->addScript(array('filemanager'), 'plugins'); $document->addStyleSheet(array('filemanager'), 'plugins'); $document->addScriptDeclaration('FileManager.settings=' . json_encode($this->getSettings()) . ';'); } protected function getIconMap() { jimport('joomla.filesystem.folder'); $path = $this->getParam('filemanager.icon_path', 'media/jce/icons'); $format = $this->getParam('filemanager.icon_format', '{$name}.png'); $extensions = $this->getParam('extensions', $this->get('_filetypes')); if (strpos($path, 'http') !== false) { return $extensions; } // get extension from format $ext = JFile::getExt($format); // get all matched icons $icons = JFolder::files(JPATH_SITE . '/' . $path, '\.' . $ext); if ($icons) { for ($i = 0; $i < count($icons); ++$i) { // convert format to regex equivalent $format = str_replace('{$name}', '([a-z0-9]+)', $format); // get icon name preg_match('#' . $format . '#i', $icons[$i], $matches); if ($matches) { $icons[$i] = basename($matches[0], '.' . $ext); } } } else { $icons = array(); } $map = array(); // map through extensions and remove icons that do not exist foreach (explode(';', $extensions) as $group) { // only if valid extensions group if (substr($group, 0, 1) === '-') { continue; } // remove extensions that are disabled $group = preg_replace('#(,)?-([\w]+)#', '', $group); // get the groups parts eg: image, 'jpg,jpeg,png,gif' $parts = explode('=', $group); $key = $parts[0]; $values = explode(',', $parts[1]); foreach (array_diff($values, $icons) as $item) { $map[$item] = $key; } foreach (array_intersect($values, $icons) as $item) { $map[$item] = $item; } } return $map; } public function onUpload($file, $relative = '') { $app = JFactory::getApplication(); // inline upload if ($app->input->getInt('inline', 0) === 1) { $result = array( 'file' => $relative, 'name' => WFUtility::mb_basename($file), ); $result['method'] = $this->getParam('filemanager.format', 'link'); if ($result['method'] === 'embed') { $result['openwith'] = $this->getParam('filemanager.method_openwith', ''); $result['width'] = $this->getParam('filemanager.embed_width', 640); $result['height'] = $this->getParam('filemanager.embed_height', 480); // remove px if present $result['width'] = str_replace('px', '', $result['width']); $result['height'] = str_replace('px', '', $result['height']); return $result; } $defaults = $this->getDefaultAttributes(); $features = array(); $attribs = array(); // add icon first if ($defaults['option_icon_check']) { jimport('joomla.filesystem.file'); $ext = JFile::getExt(basename($file)); $map = $this->getIconMap(); $icon = str_replace('{$name}', $map[$ext], $this->getParam('filemanager.icon_format', '{$name}.png')); $icon = $this->getParam('filemanager.icon_path', 'media/jce/icons') . '/' . $icon; $features[] = array('node' => 'img', 'attribs' => array('src' => $icon, 'alt' => basename($icon), 'class' => 'wf_file_icon')); } // add text $features[] = array('node' => 'span', 'attribs' => array('class' => 'wf_file_text'), 'html' => basename($file)); foreach ($defaults as $key => $value) { switch ($key) { default: if ($value !== '') { $attribs[$key] = $value; } break; case 'method': case 'width': case 'height': case 'option_date_check': break; case 'option_size_check': if ($value) { $features[] = array('node' => 'span', 'attribs' => array('class' => 'wf_file_size', 'style' => 'margin-left:5px;'), 'html' => WFUtility::formatSize(filesize($file))); } break; case 'option_date_check': if ($value) { $features[] = array('node' => 'span', 'attribs' => array('class' => 'wf_file_date', 'style' => 'margin-left:5px;'), 'html' => WFUtility::formatDate(filemtime($file), $this->getParam('filemanager.date_format', '%d/%m/%Y, %H:%M'))); } break; } } if (!empty($attribs)) { $result['attributes'] = $attribs; } if (!empty($features)) { $result['features'] = $features; } return $result; } return array(); } public function getFileDetails($file) { $browser = $this->getBrowser(); $data = array('size' => '', 'date' => '', 'url' => ''); $filesystem = $browser->getFileSystem(); // get array with folder date and content count eg: array('date'=>'00-00-000', 'folders'=>1, 'files'=>2); $details = $filesystem->getFileDetails($file); if (!empty($details['size'])) { $details['size'] = WFUtility::formatSize($details['size']); } if (!empty($details['modified'])) { $details['date'] = WFUtility::formatDate($details['modified'], $this->getParam('filemanager.date_format', '%d/%m/%Y, %H:%M')); } return array_merge($data, $details); } public function getSettings($settings = array()) { $settings = array( 'icon_map' => $this->getIconMap(), 'icon_path' => $this->getParam('filemanager.icon_path', 'media/jce/icons'), 'icon_format' => $this->getParam('filemanager.icon_format', '{$name}.png'), 'date_format' => $this->getParam('filemanager.date_format', '%d/%m/%Y, %H:%M'), 'method' => $this->getParam('filemanager.method', 'link'), 'width' => $this->getParam('filemanager.embed_width', ''), 'height' => $this->getParam('filemanager.embed_height', ''), 'target' => $this->getParam('filemanager.target', ''), 'text_alert' => $this->getParam('filemanager.text_alert', 1), 'replace_text' => $this->getParam('filemanager.replace_text', 1), 'can_edit_images' => 1, 'option_icon_check' => $this->getParam('filemanager.option_icon_check', 0), 'option_size_check' => $this->getParam('filemanager.option_size_check', 0), 'option_date_check' => $this->getParam('filemanager.option_date_check', 0), ); return parent::getSettings($settings); } }