diff --git a/bin/v-add-fs-archive b/bin/v-add-fs-archive index fa4b7aa3..20052b0f 100755 --- a/bin/v-add-fs-archive +++ b/bin/v-add-fs-archive @@ -6,11 +6,11 @@ user=$1 archive=$2 -src=$3 +src0=$3 # Checking arguments -if [ -z "$src" ]; then - echo "Usage: USER ARCHIVE SOURCE" +if [ -z "$src0" ]; then + echo "Usage: USER ARCHIVE FILE [FILE_2] [FILE_3] [FILE ...]" exit 1 fi @@ -21,36 +21,56 @@ if [ ! -e "$VESTA/data/users/$user" ]; then fi # 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 echo "Error: user home directory doesn't exist" exit 12 fi # Checking archive -if [ -e "$archive.tar.gz" ]; then - echo "Error: archive already exist $archive.tar.gz" +if [ -e "$archive" ]; then + echo "Error: archive already exist $archive" exit 1 fi # Checking source path -rpath=$(readlink -f "$src") -if [ -z "$(echo $rpath |egrep "^/tmp|^$homedir")" ]; then - echo "Error: invalid source path $src" - exit 1 -fi +IFS=$'\n' +i=1 +for src in $*; do + if [ "$i" -gt 2 ]; then + 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 -d=$(dirname "$src") +i=1 +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 -f=$(echo "$src" |sed -e "s|$d/||") + # Creating tar.gz archive + 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 -sudo -u $user tar -czf "$archive.tar.gz" -C $d $f >/dev/null 2>&1 -if [ "$?" -ne 0 ]; then - echo "Error: archive $archive.tar.gz was not created" - exit 3 +# Checking gzip +if [[ "$archive" =~ \.gz$ ]]; then + sudo -u $user gzip "${archive/.gz/}" >/dev/null 2>&1 + if [ "$?" -ne 0 ]; then + echo "Error: archive $archive was not gziped" + exit 3 + fi fi exit diff --git a/web/file_manager/fm_api.php b/web/file_manager/fm_api.php index 0bb0effd..ac5faa3a 100644 --- a/web/file_manager/fm_api.php +++ b/web/file_manager/fm_api.php @@ -110,7 +110,7 @@ switch ($_REQUEST['action']) { break; case 'pack_item': - $items = $_REQUEST['items']; + $items = $_REQUEST['items']; $dst_item = $_REQUEST['dst_item']; print json_encode($fm->packItem($items, $dst_item)); break; diff --git a/web/file_manager/fm_core.php b/web/file_manager/fm_core.php index f2b65908..877c54e0 100644 --- a/web/file_manager/fm_core.php +++ b/web/file_manager/fm_core.php @@ -158,9 +158,7 @@ class FileManager { $items = implode(' ', $items_arr); $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); $error = self::check_return_code($return_var, $output); diff --git a/web/js/file_manager.js b/web/js/file_manager.js index b467a0b1..70a887a1 100644 --- a/web/js/file_manager.js +++ b/web/js/file_manager.js @@ -1141,7 +1141,6 @@ FM.unpackItem = function() { App.Constants.FM_NO_FILE_SELECTED ); } - var src = selected.find('.source').val(); src = $.parseJSON(src); @@ -1157,12 +1156,12 @@ FM.unpackItem = function() { App.Constants.FM_FILE_TYPE_NOT_SUPPORTED ); } - + var dst = FM['TAB_' + tab + '_CURRENT_PATH']; if (dst == '') { dst = GLOBAL.ROOT_DIR; } - + var tpl = Tpl.get('popup_unpack', 'FM'); tpl.set(':FILENAME', src.name); tpl.set(':DST_DIRNAME', (dst).replace('//', '/')); @@ -1172,36 +1171,32 @@ FM.unpackItem = function() { FM.packItem = function() { var tab = FM.getTabLetter(FM.CURRENT_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) { return FM.displayError( App.Constants.FM_NO_FILE_SELECTED ); } - var src = selected.find('.source').val(); src = $.parseJSON(src); - - if (FM.isItemPseudo(src)) { - return FM.displayError( - App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED - ); - } - - if (FM.isItemPseudo(src)) { + + if (FM.isItemPseudo(src) && selected.length <=1 ) { return FM.displayError( App.Constants.FM_NO_FILE_OR_DIRECTORY_SELECTED ); } - var dst = FM['TAB_' + tab + '_CURRENT_PATH']; if (dst == '') { dst = GLOBAL.ROOT_DIR; } - + 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(':DST_DIRNAME', (dst + '/' + src.name + '.tar.gz').replace('//', '/')); FM.popupOpen(tpl.finalize()); diff --git a/web/js/templates.js b/web/js/templates.js index 1691c10f..95ca1873 100644 --- a/web/js/templates.js +++ b/web/js/templates.js @@ -188,6 +188,21 @@ App.Templates.html = { \ '], + popup_bulk_pack: ['
'+App.Constants.FM_CANCEL+'
\ +'+App.Constants.FM_PACK_BUTTON+'
\ +