]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/BackupView.js
ui: add checkbox for vmid filter for backupview
[pve-manager.git] / www / manager6 / grid / BackupView.js
1 Ext.define('PVE.grid.BackupView', {
2 extend: 'Ext.grid.GridPanel',
3
4 alias: ['widget.pveBackupView'],
5
6 onlineHelp: 'chapter_vzdump',
7
8 stateful: true,
9 stateId: 'grid-guest-backup',
10
11 initComponent : function() {
12 var me = this;
13
14 var nodename = me.pveSelNode.data.node;
15 if (!nodename) {
16 throw "no node name specified";
17 }
18
19 var vmid = me.pveSelNode.data.vmid;
20 if (!vmid) {
21 throw "no VM ID specified";
22 }
23
24 var vmtype = me.pveSelNode.data.type;
25 if (!vmtype) {
26 throw "no VM type specified";
27 }
28
29 var vmtypeFilter;
30 if (vmtype === 'lxc' || vmtype === 'openvz') {
31 vmtypeFilter = function(item) {
32 return PVE.Utils.volume_is_lxc_backup(item.data.volid, item.data.format);
33 };
34 } else if (vmtype === 'qemu') {
35 vmtypeFilter = function(item) {
36 return PVE.Utils.volume_is_qemu_backup(item.data.volid, item.data.format);
37 };
38 } else {
39 throw "unsupported VM type '" + vmtype + "'";
40 }
41
42 var searchFilter = {
43 property: 'volid',
44 value: '',
45 anyMatch: true,
46 caseSensitive: false
47 };
48
49 var vmidFilter = {
50 property: 'vmid',
51 value: vmid,
52 };
53
54 me.store = Ext.create('Ext.data.Store', {
55 model: 'pve-storage-content',
56 sorters: {
57 property: 'volid',
58 order: 'DESC'
59 },
60 filters: [
61 vmtypeFilter,
62 searchFilter,
63 vmidFilter,
64 ]
65 });
66
67 let updateFilter = function() {
68 me.store.filter([
69 vmtypeFilter,
70 searchFilter,
71 vmidFilter,
72 ]);
73 };
74
75 var reload = Ext.Function.createBuffered(function() {
76 if (me.store) {
77 me.store.load();
78 }
79 }, 100);
80
81 var setStorage = function(storage) {
82 var url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
83 url += '?content=backup';
84
85 me.store.setProxy({
86 type: 'proxmox',
87 url: url
88 });
89
90 reload();
91 };
92
93 var storagesel = Ext.create('PVE.form.StorageSelector', {
94 nodename: nodename,
95 fieldLabel: gettext('Storage'),
96 labelAlign: 'right',
97 storageContent: 'backup',
98 allowBlank: false,
99 listeners: {
100 change: function(f, value) {
101 setStorage(value);
102 }
103 }
104 });
105
106 var storagefilter = Ext.create('Ext.form.field.Text', {
107 fieldLabel: gettext('Search'),
108 labelWidth: 50,
109 labelAlign: 'right',
110 enableKeyEvents: true,
111 value: searchFilter.value,
112 listeners: {
113 buffer: 500,
114 keyup: function(field) {
115 me.store.clearFilter(true);
116 searchFilter.value = field.getValue();
117 updateFilter();
118 }
119 }
120 });
121
122 var vmidfilterCB = Ext.create('Ext.form.field.Checkbox', {
123 fieldLabel: gettext('Filter ID'),
124 labelAlign: 'right',
125 value: '1',
126 listeners: {
127 change: function(cb, value) {
128 vmidFilter.value = !!value ? vmid : '';
129 updateFilter();
130 },
131 },
132 });
133
134 var sm = Ext.create('Ext.selection.RowModel', {});
135
136 var backup_btn = Ext.create('Ext.button.Button', {
137 text: gettext('Backup now'),
138 handler: function() {
139 var win = Ext.create('PVE.window.Backup', {
140 nodename: nodename,
141 vmid: vmid,
142 vmtype: vmtype,
143 storage: storagesel.getValue(),
144 listeners : {
145 close: function() {
146 reload();
147 }
148 }
149 });
150 win.show();
151 }
152 });
153
154 var restore_btn = Ext.create('Proxmox.button.Button', {
155 text: gettext('Restore'),
156 disabled: true,
157 selModel: sm,
158 enableFn: function(rec) {
159 return !!rec;
160 },
161 handler: function(b, e, rec) {
162 var volid = rec.data.volid;
163
164 var win = Ext.create('PVE.window.Restore', {
165 nodename: nodename,
166 vmid: vmid,
167 volid: rec.data.volid,
168 volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
169 vmtype: vmtype
170 });
171 win.show();
172 win.on('destroy', reload);
173 }
174 });
175
176 var delete_btn = Ext.create('Proxmox.button.StdRemoveButton', {
177 selModel: sm,
178 dangerous: true,
179 delay: 5,
180 confirmMsg: function(rec) {
181 var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
182 "'" + rec.data.volid + "'");
183 msg += " " + gettext('This will permanently erase all data.');
184
185 return msg;
186 },
187 getUrl: function(rec) {
188 var storage = storagesel.getValue();
189 return '/nodes/' + nodename + '/storage/' + storage + '/content/' + rec.data.volid;
190 },
191 callback: function() {
192 reload();
193 }
194 });
195
196 var config_btn = Ext.create('Proxmox.button.Button', {
197 text: gettext('Show Configuration'),
198 disabled: true,
199 selModel: sm,
200 enableFn: function(rec) {
201 return !!rec;
202 },
203 handler: function(b, e, rec) {
204 var storage = storagesel.getValue();
205 if (!storage) {
206 return;
207 }
208
209 var win = Ext.create('PVE.window.BackupConfig', {
210 volume: rec.data.volid,
211 pveSelNode: me.pveSelNode
212 });
213
214 win.show();
215 }
216 });
217
218 Ext.apply(me, {
219 selModel: sm,
220 tbar: {
221 overflowHandler: 'scroller',
222 items: [ backup_btn, restore_btn, delete_btn,config_btn, '->', storagesel, vmidfilterCB, storagefilter ],
223 },
224 columns: [
225 {
226 header: gettext('Name'),
227 flex: 1,
228 sortable: true,
229 renderer: PVE.Utils.render_storage_content,
230 dataIndex: 'volid'
231 },
232 {
233 header: gettext('Date'),
234 width: 150,
235 dataIndex: 'vdate'
236 },
237 {
238 header: gettext('Format'),
239 width: 100,
240 dataIndex: 'format'
241 },
242 {
243 header: gettext('Size'),
244 width: 100,
245 renderer: Proxmox.Utils.format_size,
246 dataIndex: 'size'
247 },
248 {
249 header: gettext('VMID'),
250 dataIndex: 'vmid',
251 hidden: true,
252 },
253 ]
254 });
255
256 me.callParent();
257 }
258 });