diff --git a/web/file_manager/fm_core.php b/web/file_manager/fm_core.php index 5a9e39b7d..fb827d481 100644 --- a/web/file_manager/fm_core.php +++ b/web/file_manager/fm_core.php @@ -45,13 +45,13 @@ class FileManager { public function checkFileType($dir) { $dir = $this->formatFullPath($dir); - exec(VESTA_CMD . "v-delete-fs-file {$this->user} {$dir}", $output, $return_var); + exec(VESTA_CMD . "v-get-fs-file-type {$this->user} {$dir}", $output, $return_var); $error = self::check_return_code($return_var, $output); - if (empty($error)) { return array( - 'result' => true + 'result' => true, + 'data' => implode('', $output) ); } else { diff --git a/web/js/file_manager.js b/web/js/file_manager.js index 263902740..2702b92d2 100644 --- a/web/js/file_manager.js +++ b/web/js/file_manager.js @@ -46,11 +46,37 @@ FM.EDITABLE_FILETYPES = [ 'txt', 'php', 'js', 'html' ]; +FM.EDITABLE_MIMETYPES = [ + 'application/emma+xml', + 'application/epp+xml', + 'application/javascript', + 'application/json', + 'application/jsonml+json ', + 'application/lost+xml', + 'application/marc', + 'application/msword', + 'application/sru+xml', + 'application/vnd.android.package-archive', + 'text/csv', + 'text/css', + 'text/javascript', + 'text/html', + 'text/x-java-source' +]; + +FM.EDITABLE_MIMETYPES_MASKS = [ + /(.)*text(.)*/, + /(.)*inode(.)*/ +]; + FM.preselectedItems = {'A': [], 'B': []}; FM.directoryNotAvailable = function(reply) { - alert('Directory not available'); // todo: translate + var tpl = Tpl.get('popup_alert', 'FM'); + tpl.set(':TEXT', App.Constants.FM_DIRECTORY_NOT_AVAILABLE); + + FM.popupOpen(tpl.finalize()); } FM.showError = function(type, message) { @@ -382,7 +408,8 @@ FM.sortItems = function(items, box) { return sorted; } -FM.isFileEditable = function(src) { +FM.isFileEditable = function(src, mime) { + if ('undefined' == typeof src.filetype) { return false; } @@ -391,7 +418,21 @@ FM.isFileEditable = function(src) { return true; } - return false; + var mime_type = mime.split(';'); + mime_type = mime_type[0]; + + if ($.inArray(mime_type, FM.EDITABLE_MIMETYPES) != -1) { + return true; + } + + var editable = false; + $.each(FM.EDITABLE_MIMETYPES_MASKS, function(i, mask) { + if (mime_type.search(mask) != -1) { + editable = true; + } + }); + + return editable; } FM.editFileFromSubcontext = function(elm) { @@ -414,26 +455,36 @@ FM.openFile = function(dir, box, elm) { var tab = FM.getTabLetter(box); FM['TAB_'+tab+'_CURRENT_PATH'] = dir; - - - + var elm = $(elm).hasClass('dir') ? $(elm) : $(elm).closest('.dir'); var src = $.parseJSON($(elm).find('.source').val()); - + if (FM.isItemPseudo(src)) { - FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]); - } - - if (FM.isFileEditable(src)) { - var myWindow = window.open('/edit/file/?path=' + src.full_path, '_blank');//, src.full_path, "width=900, height=700"); - } - else { - var path = src.full_path; - var win = window.open('/download/file/?path=' + path, '_blank'); - win.focus(); + return FM.open(FM['TAB_' + tab + '_CURRENT_PATH'], FM['TAB_' + tab]); } + var params = { + dir: src.full_path + }; + App.Ajax.request('check_file_type', params, function(reply) { + if (reply.result) { + if (FM.isFileEditable(src, reply.data)) { + var myWindow = window.open('/edit/file/?path=' + src.full_path, '_blank');//, src.full_path, "width=900, height=700"); + } + else { + var path = src.full_path; + var win = window.open('/download/file/?path=' + path, '_blank'); + //win.focus(); + } + } + else { + // force download file + var path = src.full_path; + var win = window.open('/download/file/?path=' + path, '_blank'); + //win.focus(); + } + }); } FM.getTabLetter = function(box) { @@ -551,7 +602,6 @@ FM.generate_listing = function(reply, box) { FM.toggleCheck = function(uid) { var ref = $('#check' + uid); if (ref.length > 0) { - //ref.attr('checked', true); $(ref).hasClass('checkbox-selected') ? $(ref).addClass('checkbox-selected') : $(ref).removeClass('checkbox-selected'); } } @@ -605,7 +655,7 @@ FM.checkBulkStatus = function(bulkStatuses, acc) { } if (status == true) { - $('#popup .results').html('Done'); + $('#popup .results').html(App.Constants.FM_DONE); $('.controls p').replaceWith('
close
'); } else { @@ -665,7 +715,7 @@ FM.bulkCopy = function() { }); var tpl = Tpl.get('popup_bulk', 'FM'); - tpl.set(':ACTION', 'YOU ARE COPYING'); + tpl.set(':ACTION', App.Constants.FM_YOU_ARE_COPYING); tpl.set(':TEXT', cfr_html); FM.popupOpen(tpl.finalize()); @@ -740,7 +790,7 @@ FM.bulkRemove = function() { }); var tpl = Tpl.get('popup_bulk', 'FM'); - tpl.set(':ACTION', 'YOU ARE REMOVING'); + tpl.set(':ACTION', App.Constants.FM_YOU_ARE_REMOVING); tpl.set(':TEXT', cfr_html); FM.popupOpen(tpl.finalize()); @@ -750,10 +800,7 @@ FM.bulkRemove = function() { var ref = $(o); var src = $(ref).find('.source').val(); src = $.parseJSON(src); - - /*if (!FM.isItemPseudo(o)) { - cfr_html += 'cancel
\ -delete
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_DELETE+'
\cancel
\ -copy
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_COPY+'
\cancel
\ -rename
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_RENAME+'
\cancel
\ -rename
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_Rename+'
\cancel
\ -Pack
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_PACK+'
\cancel
\ -Extract
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_EXTRACT+'
\cancel
\ -create
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_CREATE+'
\cancel
\ -create
\ +'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_CREATE+'
\ok
\ +'+App.Constants.FM_OK+'
\