mirror of
https://github.com/myvesta/vesta
synced 2025-08-14 02:28:05 -07:00
FM updates
This commit is contained in:
parent
7734c6cf04
commit
6e193e0852
5 changed files with 135 additions and 77 deletions
|
@ -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 {
|
||||
|
|
|
@ -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) {
|
||||
|
@ -415,25 +456,35 @@ FM.openFile = function(dir, box, elm) {
|
|||
|
||||
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('<p class="ok" onClick="FM.bulkPopupClose();">close</p>');
|
||||
}
|
||||
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());
|
||||
|
@ -751,9 +801,6 @@ FM.bulkRemove = function() {
|
|||
var src = $(ref).find('.source').val();
|
||||
src = $.parseJSON(src);
|
||||
|
||||
/*if (!FM.isItemPseudo(o)) {
|
||||
cfr_html += '<div>'+src.name+'</div>';
|
||||
}*/
|
||||
var tab = FM.getTabLetter(FM.CURRENT_TAB);
|
||||
|
||||
var opposite_tab = 'A';
|
||||
|
@ -1610,22 +1657,6 @@ FM.init();
|
|||
$(document).ready(function() {
|
||||
$('.progress-container').hide();
|
||||
|
||||
//return alert('statechange: Back');
|
||||
/*$(document).bind('keydown.up', function() {
|
||||
console.log(1);
|
||||
//try{FM.goUp();}catch(e){console.log(e);}
|
||||
//console.log(FM);
|
||||
FM.goUp();
|
||||
});
|
||||
|
||||
$(document).bind('keydown.down', function() {
|
||||
console.log(1);
|
||||
//try{FM.goUp();}catch(e){console.log(e);}
|
||||
//console.log(FM);
|
||||
FM.goDown();
|
||||
});*/
|
||||
|
||||
|
||||
var ph = $('.window .pwd').outerHeight();
|
||||
var mh = $('.window .menu').outerHeight();
|
||||
var wh = $(window).outerHeight();
|
||||
|
@ -1825,5 +1856,5 @@ $(document).ready(function() {
|
|||
$(window).bind('statechange', function(evt){
|
||||
$(evt).stopPropagation();
|
||||
// History.getState()
|
||||
alert('No way back yet');
|
||||
//alert('No way back yet');
|
||||
})
|
||||
|
|
|
@ -53,3 +53,29 @@ App.Constants.FM_NO_FILE_SELECTED = '<?php echo __('No file select
|
|||
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED = '<?php echo __('No file or folder selected') ?>';
|
||||
App.Constants.FM_FILE_TYPE_NOT_SUPPORTED = '<?php echo __('File type not supported') ?>';
|
||||
|
||||
App.Constants.FM_DIRECTORY_NOT_AVAILABLE = '<?php echo __('Directory not available') ?>';
|
||||
App.Constants.FM_DONE = '<?php echo __('Done') ?>';
|
||||
App.Constants.FM_CLOSE = '<?php echo __('Close') ?>';
|
||||
App.Constants.FM_COPY = '<?php echo __('Copy') ?>';
|
||||
App.Constants.FM_CANCEL = '<?php echo __('Cancel') ?>';
|
||||
App.Constants.FM_RENAME = '<?php echo __('Rename') ?>';
|
||||
App.Constants.FM_DELETE = '<?php echo __('Delete') ?>';
|
||||
App.Constants.FM_EXTRACT = '<?php echo __('Extract') ?>';
|
||||
App.Constants.FM_CREATE = '<?php echo __('Create') ?>';
|
||||
App.Constants.FM_PACK = '<?php echo __('Pack') ?>';
|
||||
App.Constants.FM_OK = '<?php echo __('OK') ?>';
|
||||
App.Constants.FM_YOU_ARE_COPYING = '<?php echo __('YOU ARE COPYING') ?>';
|
||||
App.Constants.FM_YOU_ARE_REMOVING = '<?php echo __('YOU ARE REMOVING') ?>';
|
||||
|
||||
App.Constants.FM_CONFIRM_COPY = '<?php echo __('Are you sure you want to copy') ?>';
|
||||
App.Constants.FM_CONFIRM_DELETE = '<?php echo __('Are you sure you want to delete') ?>';
|
||||
App.Constants.FM_INTO_KEYWORD = '<?php echo __('into') ?>';
|
||||
App.Constants.FM_EXISTING_FILES_WILL_BE_DELETED = '<?php echo __('existing files will be deleted') ?>';
|
||||
App.Constants.FM_ORIGINAL_NAME = '<?php echo __('Original name') ?>';
|
||||
App.Constants.FM_FILE = '<?php echo __('File') ?>';
|
||||
App.Constants.FM_ALREADY_EXISTS = '<?php echo __('already exists') ?>';
|
||||
App.Constants.FM_EXTRACT = '<?php echo __('extract archive') ?>';
|
||||
App.Constants.FM_CREATE_FILE = '<?php echo __('Create file') ?>';
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -38,47 +38,47 @@ App.Templates.html = {
|
|||
<div class="message">~!:ACTION~!: <br />~!:TEXT~!</div>\
|
||||
<div class="results"></div>\
|
||||
<div class="controls">\
|
||||
<!-- p class="ok" onClick="FM.popupClose();">close</p -->\
|
||||
<!-- p class="ok" onClick="FM.popupClose();">'+App.Constants.FM_CLOSE+'</p -->\
|
||||
<p><img src="/images/in_progress.gif"></p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
popup_delete: ['<div class="confirm-box delete popup-box">\
|
||||
<div class="message">Are you sure you want to delete <span class="title">"~!:FILENAME~!"</span>?</div>\
|
||||
<div class="message">'+App.Constants.FM_CONFIRM_DELETE+' <span class="title">"~!:FILENAME~!"</span>?</div>\
|
||||
<div class="controls">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmDelete();">delete</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmDelete();">'+App.Constants.FM_DELETE+'</p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
popup_copy: ['<div class="confirm-box copy popup-box">\
|
||||
<div class="message">Are you sure you want to copy <span class="title">"~!:SRC_FILENAME~!"</span> into:</div>\
|
||||
<div class="message">'+App.Constants.FM_CLOSE+' <span class="title">"~!:SRC_FILENAME~!"</span> '+App.Constants.FM_INTO_KEYWORD+':</div>\
|
||||
<div class="actions">\
|
||||
<input type="text" id="copy_dest" value="~!:DST_FILENAME~!" class="new-title">\
|
||||
</div>\
|
||||
<div class="message">existing files will be replaced</div>\
|
||||
<div class="message">'+App.Constants.FM_EXISTING_FILES_WILL_BE_DELETED+'</div>\
|
||||
<div class="controls">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmCopyItems();">copy</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmCopyItems();">'+App.Constants.FM_COPY+'</p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
popup_rename: ['<div class="confirm-box rename warning">\
|
||||
<div class="message">Original name: <span class="title">"~!:FILENAME~!"</span></div>\
|
||||
<!-- div class="warning">File <span class="title">"reading.txt"</span> already exists</div -->\
|
||||
<div class="message">'+App.Constants.FM_ORIGINAL_NAME+': <span class="title">"~!:FILENAME~!"</span></div>\
|
||||
<!-- div class="warning">'+App.Constants.FM_FILE+' <span class="title">"reading.txt"</span> '+App.Constants.FM_ALREADY_EXISTS+'</div -->\
|
||||
<div class="warning warning-message"></div>\
|
||||
<div class="actions">\
|
||||
<input type="text" id="rename-title" class="new-title" value="~!:NEW_NAME~!" />\
|
||||
</div>\
|
||||
<div class="controls">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmRename();">rename</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmRename();">'+App.Constants.FM_RENAME+'</p>\
|
||||
</div>\
|
||||
<div class="controls replace">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmRename();">rename</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmRename();">'+App.Constants.FM_Rename+'</p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
|
||||
popup_pack: ['<div class="confirm-box pack warning">\
|
||||
<div class="message">Pack <span class="title">"~!:FILENAME~!"</span> into:</div>\
|
||||
<div class="message">'+App.Constants.FM_PACK+' <span class="title">"~!:FILENAME~!"</span> '+App.Constants.FM_INTO_KEYWORD+':</div>\
|
||||
<div class="actions">\
|
||||
<input type="text" id="pack-destination" class="new-title" value="~!:DST_DIRNAME~!">\
|
||||
</div>\
|
||||
|
@ -87,13 +87,13 @@ App.Templates.html = {
|
|||
<label><input type="checkbox" name="overwrite" class="title" />Overwrite exising files</label>\
|
||||
</div -->\
|
||||
<div class="controls">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmPackItem();">Pack</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmPackItem();">'+App.Constants.FM_PACK+'</p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
|
||||
popup_unpack: ['<div class="confirm-box unpack warning">\
|
||||
<div class="message">Extract archive <span class="title">"~!:FILENAME~!"</span> to:</div>\
|
||||
<div class="message">'+App.Constants.FM_EXTRACT+' <span class="title">"~!:FILENAME~!"</span> '+App.Constants.FM_INTO_KEYWORD+':</div>\
|
||||
<div class="actions">\
|
||||
<input type="text" id="unpack-destination" class="new-title" value="~!:DST_DIRNAME~!">\
|
||||
</div>\
|
||||
|
@ -102,22 +102,22 @@ App.Templates.html = {
|
|||
<label><input type="checkbox" name="overwrite" class="title" />Overwrite exising files</label>\
|
||||
</div -->\
|
||||
<div class="controls">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmUnpackItem();">Extract</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmUnpackItem();">'+App.Constants.FM_EXTRACT+'</p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
|
||||
|
||||
popup_create_file: ['<div class="confirm-box rename warning">\
|
||||
<div class="message">Create file</div>\
|
||||
<div class="message">'+App.Constants.FM_CREATE_FILE+'</div>\
|
||||
<!-- div class="warning">File <span class="title">"reading.txt"</span> already exists</div -->\
|
||||
<div class="warning warning-message"></div>\
|
||||
<div class="actions">\
|
||||
<input type="text" id="rename-title" class="new-title" />\
|
||||
</div>\
|
||||
<div class="controls replace">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmCreateFile();">create</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmCreateFile();">'+App.Constants.FM_CREATE+'</p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
popup_create_dir: ['<div class="confirm-box rename warning">\
|
||||
|
@ -128,14 +128,14 @@ App.Templates.html = {
|
|||
<input type="text" id="rename-title" class="new-title" />\
|
||||
</div>\
|
||||
<div class="controls replace">\
|
||||
<p class="cancel" onClick="FM.popupClose();">cancel</p>\
|
||||
<p class="ok" onClick="FM.confirmCreateDir();">create</p>\
|
||||
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
|
||||
<p class="ok" onClick="FM.confirmCreateDir();">'+App.Constants.FM_CREATE+'</p>\
|
||||
</div>\
|
||||
</div>'],
|
||||
popup_no_file_selected: ['<div class="confirm-box no-file-selected">\
|
||||
<div class="message">Please select a file</div>\
|
||||
<div class="controls">\
|
||||
<p class="ok" onClick="FM.confirmCreateDir();">ok</p>\
|
||||
<p class="ok" onClick="FM.confirmCreateDir();">'+App.Constants.FM_OK+'</p>\
|
||||
</div>\
|
||||
</div>']
|
||||
}
|
||||
|
|
|
@ -210,7 +210,7 @@ class UploadHandler
|
|||
protected function get_upload_path($file_name = null, $version = null) {
|
||||
$relocate_directory = $_GET['dir'];
|
||||
if (empty($relocate_directory)) {
|
||||
$relocate_directory = '/home/admin/';
|
||||
$relocate_directory = '/home/admin/'; // fallback dir
|
||||
}
|
||||
if ($relocate_directory[strlen($relocate_directory) -1] != '/') {
|
||||
$relocate_directory .= '/';
|
||||
|
@ -1041,7 +1041,7 @@ class UploadHandler
|
|||
}
|
||||
|
||||
protected function handle_file_upload($uploaded_file, $name, $size, $type, $error,
|
||||
$index = null, $content_range = null) {
|
||||
$index = null, $content_range = null) {
|
||||
$file = new \stdClass();
|
||||
$file->name = $this->get_file_name($uploaded_file, $name, $size, $type, $error,
|
||||
$index, $content_range);
|
||||
|
@ -1076,12 +1076,13 @@ class UploadHandler
|
|||
);
|
||||
}
|
||||
$file_size = $this->get_file_size($file_path, $append_file);
|
||||
//var_dump($file_size);die();
|
||||
|
||||
if ($file_size === $file->size) {
|
||||
$file->url = $this->get_download_url($file->name);
|
||||
if ($this->is_valid_image_file($file_path)) {
|
||||
$this->handle_image_file($file_path, $file);
|
||||
}
|
||||
// uncomment if images also need to be resized
|
||||
//if ($this->is_valid_image_file($file_path)) {
|
||||
// $this->handle_image_file($file_path, $file);
|
||||
//}
|
||||
} else {
|
||||
$file->size = $file_size;
|
||||
if (!$content_range && $this->options['discard_aborted_uploads']) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue