Signed-off-by: Tim Marx <t.m...@proxmox.com>
---
 www/manager6/dc/Backup.js | 77 +++++++++++++++++++++++++++++++++++++++++++----
 1 file changed, 71 insertions(+), 6 deletions(-)

diff --git a/www/manager6/dc/Backup.js b/www/manager6/dc/Backup.js
index c056a647..34052746 100644
--- a/www/manager6/dc/Backup.js
+++ b/www/manager6/dc/Backup.js
@@ -31,7 +31,8 @@ Ext.define('PVE.dc.BackupEdit', {
            comboItems: [
                ['include', gettext('Include selected VMs')],
                ['all', gettext('All')],
-               ['exclude', gettext('Exclude selected VMs')]
+               ['exclude', gettext('Exclude selected VMs')],
+               ['pool', gettext('Pool')]
            ],
            fieldLabel: gettext('Selection mode'),
            name: 'selMode',
@@ -111,6 +112,33 @@ Ext.define('PVE.dc.BackupEdit', {
            ]
        });
 
+       var selectPoolMembers = function(poolid) {
+           if (!poolid) {
+               return;
+           }
+           sm.deselectAll(true);
+           store.filter([
+               {
+                   id: 'poolFilter',
+                   property: 'pool',
+                   value: poolid
+               }
+           ]);
+           sm.selectAll(true);
+       };
+
+       var selPool = Ext.create('PVE.form.PoolSelector', {
+           fieldLabel: gettext('Pool'),
+           hidden: true,
+           allowBlank: true,
+           name: 'pool',
+           listeners: {
+               change: function( selpool, newValue, oldValue) {
+                   selectPoolMembers(newValue);
+               }
+           }
+       });
+
        var nodesel = Ext.create('PVE.form.NodeSelector', {
            name: 'node',
            fieldLabel: gettext('Node'),
@@ -129,6 +157,10 @@ Ext.define('PVE.dc.BackupEdit', {
                    if (mode === 'all') {
                        sm.selectAll(true);
                    }
+
+                   if (mode === 'pool') {
+                       selectPoolMembers(selPool.value);
+                   }
                }
            }
        });
@@ -153,7 +185,8 @@ Ext.define('PVE.dc.BackupEdit', {
                value: '00:00',
                allowBlank: false
            },
-           selModeField
+           selModeField,
+           selPool
        ];
 
        var column2 = [
@@ -217,13 +250,19 @@ Ext.define('PVE.dc.BackupEdit', {
                    values.all = 1;
                    values.exclude = values.vmid;
                    delete values.vmid;
+               } else if (selMode === 'pool') {
+                   delete values.vmid;
+               }
+
+               if (selMode !== 'pool') {
+                   delete values.pool;
                }
                return values;
            }
        });
 
        var update_vmid_selection = function(list, mode) {
-           if (mode !== 'all') {
+           if (mode !== 'all' && mode !== 'pool') {
                sm.deselectAll(true);
                if (list) {
                    Ext.Array.each(list.split(','), function(vmid) {
@@ -242,15 +281,32 @@ Ext.define('PVE.dc.BackupEdit', {
        });
 
        selModeField.on('change', function(f, value, oldValue) {
+           if (oldValue === 'pool') {
+               store.removeFilter('poolFilter');
+           }
+
+           if (oldValue === 'all') {
+               sm.deselectAll(true);
+               vmidField.setValue('');
+           }
+
            if (value === 'all') {
                sm.selectAll(true);
                vmgrid.setDisabled(true);
            } else {
                vmgrid.setDisabled(false);
            }
-           if (oldValue === 'all') {
-               sm.deselectAll(true);
+
+           if (value === 'pool') {
+               vmgrid.setDisabled(true);
                vmidField.setValue('');
+               selPool.setVisible(true);
+               selPool.allowBlank = false;
+               selectPoolMembers(selPool.value);
+
+           } else {
+               selPool.setVisible(false);
+               selPool.allowBlank = true;
            }
            var list = vmidField.getValue();
            update_vmid_selection(list, value);
@@ -269,6 +325,8 @@ Ext.define('PVE.dc.BackupEdit', {
                    var mode = selModeField.getValue();
                    if (mode === 'all') {
                        sm.selectAll(true);
+                   } else if (mode === 'pool'){
+                       selectPoolMembers(selPool.value);
                    } else {
                        update_vmid_selection(list, mode);
                    }
@@ -302,6 +360,9 @@ Ext.define('PVE.dc.BackupEdit', {
                            data.vmid = '';
                            data.selMode = 'all';
                        }
+                   } else if (data.pool) {
+                       data.selMode = 'pool';
+                       data.selPool = data.pool;
                    } else {
                        data.selMode = 'include';
                    }
@@ -490,6 +551,10 @@ Ext.define('PVE.dc.BackupView', {
                            return record.data.vmid;
                        }
 
+                       if (record.data.pool) {
+                           return record.data.pool;
+                       }
+
                        return "-";
                    }
                }
@@ -509,7 +574,7 @@ Ext.define('PVE.dc.BackupView', {
        fields: [
            'id', 'starttime', 'dow',
            'storage', 'node', 'vmid', 'exclude',
-           'mailto',
+           'mailto', 'pool',
            { name: 'enabled', type: 'boolean' },
            { name: 'all', type: 'boolean' },
            { name: 'snapshot', type: 'boolean' },
-- 
2.11.0

_______________________________________________
pve-devel mailing list
pve-devel@pve.proxmox.com
https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to