From bff4807a8580ea6db591f1d010c6cd6fbc38d394 Mon Sep 17 00:00:00 2001 From: Fabrice Cipolla Date: Sun, 7 Aug 2016 14:14:32 +0200 Subject: [PATCH 1/2] rename params + good thumb for images + previewimage with the good field --- connectors/php/LocalFilemanager.php | 64 +++++++++++++++-------------- scripts/filemanager.js | 21 +++++----- scripts/filemanager.min.js | 4 +- 3 files changed, 47 insertions(+), 42 deletions(-) diff --git a/connectors/php/LocalFilemanager.php b/connectors/php/LocalFilemanager.php index c5c8f776..fcd242b6 100644 --- a/connectors/php/LocalFilemanager.php +++ b/connectors/php/LocalFilemanager.php @@ -148,10 +148,10 @@ public function getfolder() if(is_dir($current_path . $file)) { if(!in_array($file, $this->config['exclude']['unallowed_dirs']) && !preg_match($this->config['exclude']['unallowed_dirs_REGEXP'], $file)) { - $array[$file_path . '/'] = $this->get_file_info($file_path . '/', true); + $array[$file_path . '/'] = $this->get_file_info($file_path . '/'); } } else if (!in_array($file, $this->config['exclude']['unallowed_files']) && !preg_match($this->config['exclude']['unallowed_files_REGEXP'], $file)) { - $item = $this->get_file_info($file_path, true); + $item = $this->get_file_info($file_path); if(!isset($this->refParams['type']) || (isset($this->refParams['type']) && strtolower($this->refParams['type']) === 'images' && in_array(strtolower($item['File Type']), array_map('strtolower', $this->config['images']['imagesExt'])))) { if($this->config['upload']['imagesOnly']== false || ($this->config['upload']['imagesOnly'] === true && in_array(strtolower($item['File Type']), array_map('strtolower', $this->config['images']['imagesExt'])))) { @@ -186,7 +186,7 @@ public function getinfo() $this->error(sprintf($this->lang('NOT_ALLOWED'))); } - return $this->get_file_info($path, false); + return $this->get_file_info($path); } /** @@ -826,13 +826,12 @@ protected function has_system_permission($filepath, $permissions) return true; } - /** - * Create array with file properties - * @param string $relative_path - * @param bool $thumbnail - * @return array|void - */ - protected function get_file_info($relative_path, $thumbnail = false) + /** + * Create array with file properties + * @param string $relative_path + * @return array|void + */ + protected function get_file_info($relative_path) { $current_path = $this->getFullPath($relative_path); $dynamic_path = $this->getDynamicPath($current_path); @@ -848,27 +847,34 @@ protected function get_file_info($relative_path, $thumbnail = false) // check if file is writable and readable $protected = $this->has_system_permission($current_path, array('w', 'r')) ? 0 : 1; + $preview = $beyondDocRoot ? $readFileMode : $dynamic_path; if(is_dir($current_path)) { $fileType = self::FILE_TYPE_DIR; - $imagePath = $iconsFolder . ($protected ? 'locked_' : '') . $this->config['icons']['directory']; + $thumbPath = $iconsFolder . ($protected ? 'locked_' : '') . $this->config['icons']['directory']; } else { $fileType = $pathInfo['extension']; if($protected == 1) { - $imagePath = $iconsFolder . 'locked_' . $this->config['icons']['default']; + $thumbPath = $iconsFolder . 'locked_' . $this->config['icons']['default']; } else { - $imagePath = $iconsFolder . $this->config['icons']['default']; $item['Properties']['Size'] = $this->get_real_filesize($current_path); + $thumbPath = $iconsFolder . $this->config['icons']['default']; - if(in_array(strtolower($fileType), array_map('strtolower', $this->config['images']['imagesExt']))) { + $isAllowedImage = in_array(strtolower($fileType), array_map('strtolower', $this->config['images']['imagesExt'])); + $isImageWithThumb = $isAllowedImage && $this->config['options']['showThumbs'] ; + $useImageThumb = $this->config['options']['showThumbs']; - // svg should not be previewed as raster formats images - if($fileType === 'svg') { - $imagePath = $beyondDocRoot ? $readFileMode : $dynamic_path; - } else if($thumbnail && $this->config['options']['showThumbs']) { - $imagePath = $getImageMode . '&thumbnail=true'; - } else { - $imagePath = $beyondDocRoot ? $getImageMode : $dynamic_path; + if(!$isImageWithThumb && file_exists($this->fm_path . '/' . $this->config['icons']['path'] . strtolower($fileType) . '.png')) { + $thumbPath = $iconsFolder . strtolower($fileType) . '.png'; + } + + if($isAllowedImage){ + // svg don't need to generate a thumb + if($useImageThumb && $fileType === 'svg'){ + $thumbPath = $preview; + } else{ + $preview = $beyondDocRoot ? $getImageMode : $dynamic_path; + if($useImageThumb) $thumbPath = $beyondDocRoot ? $getImageMode . '&thumbnail=true' : $this->getDynamicPath($this->get_thumbnail($current_path)); } if($item['Properties']['Size']) { @@ -879,8 +885,6 @@ protected function get_file_info($relative_path, $thumbnail = false) $item['Properties']['Height'] = $height; $item['Properties']['Width'] = $width; - } else if(file_exists($this->fm_path . '/' . $this->config['icons']['path'] . strtolower($fileType) . '.png')) { - $imagePath = $iconsFolder . strtolower($fileType) . '.png'; } } } @@ -889,8 +893,8 @@ protected function get_file_info($relative_path, $thumbnail = false) $item['Filename'] = $pathInfo['basename']; $item['File Type'] = $fileType; $item['Protected'] = $protected; - $item['Image Path'] = $imagePath; - $item['Dynamic Path'] = $beyondDocRoot ? $readFileMode : $dynamic_path; + $item['Thumbnail'] = $thumbPath; + $item['Preview'] = $beyondDocRoot ? $readFileMode : $dynamic_path; $item['Properties']['Date Modified'] = $this->formatDate($filemtime); //$item['Properties']['Date Created'] = $this->formatDate(filectime($current_path)); // PHP cannot get create timestamp $item['Properties']['filemtime'] = $filemtime; @@ -1266,10 +1270,10 @@ protected function get_thumbnail($path) /** * Creates thumbnail from the original image - * @param $imagePath + * @param $thumbPath * @param $thumbnailPath */ - protected function createThumbnail($imagePath, $thumbnailPath) + protected function createThumbnail($thumbPath, $thumbnailPath) { if($this->config['images']['thumbnail']['enabled'] === true) { $this->__log('generating thumbnail "' . $thumbnailPath . '"'); @@ -1280,9 +1284,9 @@ protected function createThumbnail($imagePath, $thumbnailPath) } $this->initUploader(array( - 'upload_dir' => dirname($imagePath) . '/', - ))->create_thumbnail_image($imagePath); + 'upload_dir' => dirname($thumbPath) . '/', + ))->create_thumbnail_image($thumbPath); } } -} \ No newline at end of file +} diff --git a/scripts/filemanager.js b/scripts/filemanager.js index 6dd742e5..476d656b 100644 --- a/scripts/filemanager.js +++ b/scripts/filemanager.js @@ -540,7 +540,7 @@ var createPreviewUrl = function(path, encode) { // Return HTML video player var getVideoPlayer = function(data) { - var url = createPreviewUrl(data['Dynamic Path'], true); + var url = createPreviewUrl(data['Preview'], true); var code = ''; $fileinfo.find('img').remove(); @@ -549,7 +549,7 @@ var getVideoPlayer = function(data) { // Return HTML audio player var getAudioPlayer = function(data) { - var url = createPreviewUrl(data['Dynamic Path'], true); + var url = createPreviewUrl(data['Preview'], true); var code = ''; $fileinfo.find('img').remove(); @@ -558,7 +558,7 @@ var getAudioPlayer = function(data) { // Return PDF Reader var getPdfReader = function(data) { - var url = createPreviewUrl(data['Dynamic Path'], true); + var url = createPreviewUrl(data['Preview'], true); var code = ''; $fileinfo.find('img').remove(); @@ -567,7 +567,7 @@ var getPdfReader = function(data) { // Return Google Viewer var getGoogleViewer = function(data) { - var url = encodeURIComponent(createPreviewUrl(data['Dynamic Path'])); + var url = encodeURIComponent(createPreviewUrl(data['Preview'])); var code = ''; $fileinfo.find('img').remove(); @@ -876,7 +876,7 @@ var createFileTree = function() { // contextual menu option in list views. // NOTE: closes the window when finished. var selectItem = function(data) { - var url = createPreviewUrl(data['Dynamic Path']); + var url = createPreviewUrl(data['Preview']); if(window.opener || window.tinyMCEPopup || $.urlParam('field_name') || $.urlParam('CKEditorCleanUpFuncNum') || $.urlParam('CKEditor') || $.urlParam('ImperaviElementId')) { if(window.tinyMCEPopup) { // use TinyMCE > 3.0 integration method @@ -1853,7 +1853,8 @@ var getFileInfo = function(file) { $fileinfo.find('#main-title > h1').text(data['Filename']).attr('title', file); - $fileinfo.find('img').attr('src', createPreviewUrl(data['Image Path'])); + // if file is an image we display the preview + $fileinfo.find('img').attr('src', isImageFile(data['Filename']) ? createPreviewUrl(data['Preview']) : createPreviewUrl(data['Thumbnail'])); if(isVideoFile(data['Filename']) && config.videos.showVideoPlayer == true) { getVideoPlayer(data); } @@ -1870,7 +1871,7 @@ var getFileInfo = function(file) { editItem(data); } - var url = createPreviewUrl(data['Dynamic Path']); + var url = createPreviewUrl(data['Preview']); if(data['Protected']==0) { $fileinfo.find('div#tools').append(' ' + lg.copy_to_clipboard + ''); @@ -1907,7 +1908,7 @@ var getFileInfo = function(file) { // Clean up unnecessary item data var prepareItemInfo = function(item) { var data = $.extend({}, item); - delete data['Image Path']; + delete data['Thumbnail']; delete data['Error']; delete data['Code']; return data; @@ -1967,7 +1968,7 @@ var getFolderInfo = function(path) { 'data-path': item['Path'] }).data('itemdata', prepareItemInfo(item)); - node = '
' + item['Path'] + '
'; + node = '
' + item['Path'] + '
'; node += '

' + item['Filename'] + '

'; if(props['Width'] && props['Width'] != '') node += '' + props['Width'] + 'x' + props['Height'] + ''; if(props['Size'] && props['Size'] != '') node += '' + props['Size'] + ''; @@ -2895,4 +2896,4 @@ if (!window.location.origin) { $(window).load(function() { $('#fileinfo').css({'left':$('#splitter .vsplitbar').width() + $('#filetree').width()}); -}); \ No newline at end of file +}); diff --git a/scripts/filemanager.min.js b/scripts/filemanager.min.js index 1d0c8a35..682f7e1c 100644 --- a/scripts/filemanager.min.js +++ b/scripts/filemanager.min.js @@ -1,2 +1,2 @@ -!function(a){function b(b,c){return-1===m.indexOf(c)?!1:"dir"==b["File Type"]&&"replace"==c?!1:"dir"==b["File Type"]&&"select"==c?!1:"dir"==b["File Type"]&&"download"==c?g.security.allowFolderDownload===!0:"undefined"!=typeof b.Capabilities?a.inArray(c,b.Capabilities)>-1:!0}function c(c){var d={select:{name:B.select,className:"select"},download:{name:B.download,className:"download"},rename:{name:B.rename,className:"rename"},move:{name:B.move,className:"move"},replace:{name:B.replace,className:"replace"},separator1:"-----","delete":{name:B.del,className:"delete"}},e=c.data("itemdata");return b(e,"download")||delete d.download,b(e,"rename")&&g.options.browseOnly!==!0||delete d.rename,b(e,"delete")&&g.options.browseOnly!==!0||delete d["delete"],b(e,"move")&&g.options.browseOnly!==!0||delete d.move,b(e,"select")&&(window.opener||window.tinyMCEPopup||a.urlParam("field_name"))||delete d.select,delete d.replace,d}a.urlParam=function(a){var b=new RegExp("[\\?&]"+a+"=([^&#]*)").exec(window.location.href);return b?b[1]:0};var d=function(a){var b="",c="/",d=".",e=d.concat(d);if(!a||a===c)return c;var f,g,h,i=a.split(c),j=a[0]===c||a[0]===d?[b]:[];for(f=0,g=i.length;g>f;++f)h=i[f]||b,h===e?j.length>1&&j.pop():h!==b&&h!==d&&j.push(h);return j.join(c).replace(/[\/]{2,}/g,c)||c},e=function(b){var c=null,d=".";if(b="undefined"==typeof b?"user":b,window._FMConfig&&window._FMConfig.pluginPath&&(d=window._FMConfig.pluginPath),"user"==b)if(0!=a.urlParam("config")){var e=d+"/scripts/"+a.urlParam("config");userconfig=a.urlParam("config")}else{var e=d+"/scripts/filemanager.config.json";userconfig="filemanager.config.json"}else var e=d+"/scripts/filemanager.config.default.json";return a.ajax({async:!1,url:e,dataType:"json",cache:!1,success:function(a){c=a}}),"default"==b&&(c.globals={pluginPath:d}),c},f=e("default"),g=e();if(null!==g&&delete g.version,g=a.extend({},f,g),g.options.logger){(new Date).getTime()}var h,i=[],j="/",k="/connectors/"+g.options.lang+"/filemanager."+g.options.lang,l=g.options.fileConnector||g.globals.pluginPath+k,m=g.options.capabilities||["upload","select","download","rename","move","delete","replace"],n=null,o={},p=[];g.options.fileSorting&&(p=g.options.fileSorting.toLowerCase().split("_"));var q=p[0]||"name",r=p[1]||"asc",s=function(b){if(b=g.globals.pluginPath+b,-1==a.inArray(b,i)){var c=a("");a("head").append(c),i.push(b)}},t=function(b){if(b=g.globals.pluginPath+b,-1==a.inArray(b,i)){var c=a("