FileManager create archvies

This commit is contained in:
Serghey Rodin 2016-08-10 14:36:54 +03:00
parent 4adbef4517
commit 317c90b38a
5 changed files with 66 additions and 38 deletions

View file

@ -6,11 +6,11 @@
user=$1 user=$1
archive=$2 archive=$2
src=$3 src0=$3
# Checking arguments # Checking arguments
if [ -z "$src" ]; then if [ -z "$src0" ]; then
echo "Usage: USER ARCHIVE SOURCE" echo "Usage: USER ARCHIVE FILE [FILE_2] [FILE_3] [FILE ...]"
exit 1 exit 1
fi fi
@ -21,36 +21,56 @@ if [ ! -e "$VESTA/data/users/$user" ]; then
fi fi
# Checking user homedir # Checking user homedir
homedir=$(grep "^$user:" /etc/passwd | cut -f 6 -d :) homedir=$(grep "^$user:" /etc/passwd |cut -f 6 -d :)
if [ -z $homedir ]; then if [ -z $homedir ]; then
echo "Error: user home directory doesn't exist" echo "Error: user home directory doesn't exist"
exit 12 exit 12
fi fi
# Checking archive # Checking archive
if [ -e "$archive.tar.gz" ]; then if [ -e "$archive" ]; then
echo "Error: archive already exist $archive.tar.gz" echo "Error: archive already exist $archive"
exit 1 exit 1
fi fi
# Checking source path # Checking source path
rpath=$(readlink -f "$src") IFS=$'\n'
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then i=1
echo "Error: invalid source path $src" for src in $*; do
exit 1 if [ "$i" -gt 2 ]; then
fi rpath=$(readlink -f "$src")
if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then
echo "Error: invalid source path $src"
exit 1
fi
fi
((i++))
done
# Parsing current directory i=1
d=$(dirname "$src") for src in $*; do
if [ "$i" -gt 2 ]; then
# Deleting leading home path
src=$(echo "$src"| sed -e "s|/home/$user/||")
# Removing leading file path # Creating tar.gz archive
f=$(echo "$src" |sed -e "s|$d/||") sudo -u $user tar -rf "${archive/.gz/}" -C /home/$user $src >\
/dev/null 2>&1
if [ "$?" -ne 0 ]; then
echo "Error: archive $archive was not created"
exit 3
fi
fi
((i++))
done
# Creating tar.gz archive # Checking gzip
sudo -u $user tar -czf "$archive.tar.gz" -C $d $f >/dev/null 2>&1 if [[ "$archive" =~ \.gz$ ]]; then
if [ "$?" -ne 0 ]; then sudo -u $user gzip "${archive/.gz/}" >/dev/null 2>&1
echo "Error: archive $archive.tar.gz was not created" if [ "$?" -ne 0 ]; then
exit 3 echo "Error: archive $archive was not gziped"
exit 3
fi
fi fi
exit exit

View file

@ -110,7 +110,7 @@ switch ($_REQUEST['action']) {
break; break;
case 'pack_item': case 'pack_item':
$items = $_REQUEST['items']; $items = $_REQUEST['items'];
$dst_item = $_REQUEST['dst_item']; $dst_item = $_REQUEST['dst_item'];
print json_encode($fm->packItem($items, $dst_item)); print json_encode($fm->packItem($items, $dst_item));
break; break;

View file

@ -158,9 +158,7 @@ class FileManager {
$items = implode(' ', $items_arr); $items = implode(' ', $items_arr);
$dst_item = $this->formatFullPath($dst_item); $dst_item = $this->formatFullPath($dst_item);
$dst_item = str_replace('.tar.gz', '', $dst_item);
// echo VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$items}";
exec (VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$items}", $output, $return_var); exec (VESTA_CMD . "v-add-fs-archive {$this->user} {$dst_item} {$items}", $output, $return_var);
$error = self::check_return_code($return_var, $output); $error = self::check_return_code($return_var, $output);

View file

@ -1141,7 +1141,6 @@ FM.unpackItem = function() {
App.Constants.FM_NO_FILE_SELECTED App.Constants.FM_NO_FILE_SELECTED
); );
} }
var src = selected.find('.source').val(); var src = selected.find('.source').val();
src = $.parseJSON(src); src = $.parseJSON(src);
@ -1157,12 +1156,12 @@ FM.unpackItem = function() {
App.Constants.FM_FILE_TYPE_NOT_SUPPORTED App.Constants.FM_FILE_TYPE_NOT_SUPPORTED
); );
} }
var dst = FM['TAB_' + tab + '_CURRENT_PATH']; var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
if (dst == '') { if (dst == '') {
dst = GLOBAL.ROOT_DIR; dst = GLOBAL.ROOT_DIR;
} }
var tpl = Tpl.get('popup_unpack', 'FM'); var tpl = Tpl.get('popup_unpack', 'FM');
tpl.set(':FILENAME', src.name); tpl.set(':FILENAME', src.name);
tpl.set(':DST_DIRNAME', (dst).replace('//', '/')); tpl.set(':DST_DIRNAME', (dst).replace('//', '/'));
@ -1172,36 +1171,32 @@ FM.unpackItem = function() {
FM.packItem = function() { FM.packItem = function() {
var tab = FM.getTabLetter(FM.CURRENT_TAB); var tab = FM.getTabLetter(FM.CURRENT_TAB);
var box = FM['TAB_' + tab]; var box = FM['TAB_' + tab];
var selected = $(FM['TAB_' + tab] ).find('.dir.active'); var selected = $(FM['TAB_' + tab] ).find('.dir.selected');
if (selected.length == 0) { if (selected.length == 0) {
return FM.displayError( return FM.displayError(
App.Constants.FM_NO_FILE_SELECTED App.Constants.FM_NO_FILE_SELECTED
); );
} }
var src = selected.find('.source').val(); var src = selected.find('.source').val();
src = $.parseJSON(src); src = $.parseJSON(src);
if (FM.isItemPseudo(src)) { if (FM.isItemPseudo(src) && selected.length <=1 ) {
return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
);
}
if (FM.isItemPseudo(src)) {
return FM.displayError( return FM.displayError(
App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED
); );
} }
var dst = FM['TAB_' + tab + '_CURRENT_PATH']; var dst = FM['TAB_' + tab + '_CURRENT_PATH'];
if (dst == '') { if (dst == '') {
dst = GLOBAL.ROOT_DIR; dst = GLOBAL.ROOT_DIR;
} }
var tpl = Tpl.get('popup_pack', 'FM'); var tpl = Tpl.get('popup_pack', 'FM');
if(selected.length > 1){
tpl = Tpl.get('popup_bulk_pack', 'FM');
}
tpl.set(':NUMBER_OF_ITEMS', selected.length);
tpl.set(':FILENAME', src.name); tpl.set(':FILENAME', src.name);
tpl.set(':DST_DIRNAME', (dst + '/' + src.name + '.tar.gz').replace('//', '/')); tpl.set(':DST_DIRNAME', (dst + '/' + src.name + '.tar.gz').replace('//', '/'));
FM.popupOpen(tpl.finalize()); FM.popupOpen(tpl.finalize());

View file

@ -188,6 +188,21 @@ App.Templates.html = {
</div>\ </div>\
</div>'], </div>'],
popup_bulk_pack: ['<div class="confirm-box pack warning">\
<div class="message">'+App.Constants.FM_PACK+' (~!:NUMBER_OF_ITEMS~!)</div>\
<div class="actions">\
<input type="text" id="pack-destination" class="new-title" value="~!:DST_DIRNAME~!">\
</div>\
<div class="warning warning-message"></div>\
<!-- div class="actions">\
<label><input type="checkbox" name="overwrite" class="title" />Overwrite exising files</label>\
</div -->\
<div class="controls">\
<p class="cancel" onClick="FM.popupClose();">'+App.Constants.FM_CANCEL+'</p>\
<p class="ok" onClick="FM.confirmPackItem();">'+App.Constants.FM_PACK_BUTTON+'</p>\
</div>\
</div>'],
popup_unpack: ['<div class="confirm-box unpack warning">\ popup_unpack: ['<div class="confirm-box unpack warning">\
<div class="message">'+App.Constants.FM_EXTRACT+' <span class="title">"~!:FILENAME~!"</span> '+App.Constants.FM_INTO_KEYWORD+':</div>\ <div class="message">'+App.Constants.FM_EXTRACT+' <span class="title">"~!:FILENAME~!"</span> '+App.Constants.FM_INTO_KEYWORD+':</div>\
<div class="actions">\ <div class="actions">\