Serghey Rodin 9 лет назад
Родитель
Сommit
317c90b38a
5 измененных файлов с 66 добавлено и 38 удалено
  1. 40 20
      bin/v-add-fs-archive
  2. 1 1
      web/file_manager/fm_api.php
  3. 0 2
      web/file_manager/fm_core.php
  4. 10 15
      web/js/file_manager.js
  5. 15 0
      web/js/templates.js

+ 40 - 20
bin/v-add-fs-archive

@@ -6,11 +6,11 @@
 
 
 user=$1
 user=$1
 archive=$2
 archive=$2
-src=$3
+src0=$3
 
 
 # Checking arguments
 # 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
     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
-    echo "Error: archive already exist $archive.tar.gz"
+if [ -e "$archive" ]; then
+    echo "Error: archive already exist $archive"
     exit 1
     exit 1
 fi
 fi
 
 
 # Checking source path
 # 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
 fi
 
 
 exit
 exit

+ 1 - 1
web/file_manager/fm_api.php

@@ -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;

+ 0 - 2
web/file_manager/fm_core.php

@@ -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);

+ 10 - 15
web/js/file_manager.js

@@ -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)) {
-        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(
         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());

+ 15 - 0
web/js/templates.js

@@ -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">\