]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/grid/BackupView.js
Rename 'create' to 'isCreate' in pveWindowEdit and subclasses
[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 === 'openvz') {
31 vmtypeFilter = function(item) {
32 return item.data.volid.match(':backup/vzdump-openvz-');
33 };
34 } else if (vmtype === 'lxc') {
35 vmtypeFilter = function(item) {
36 return item.data.volid.match(':backup/vzdump-lxc-');
37 };
38 } else if (vmtype === 'qemu') {
39 vmtypeFilter = function(item) {
40 return item.data.volid.match(':backup/vzdump-qemu-');
41 };
42 } else {
43 throw "unsupported VM type '" + vmtype + "'";
44 }
45
46 var searchFilter = {
47 property: 'volid',
48 // on initial store display only our vmid backups
49 // surround with minus sign to prevent the 2016 VMID bug
50 value: vmtype + '-' + vmid + '-',
51 anyMatch: true,
52 caseSensitive: false
53 };
54
55 me.store = Ext.create('Ext.data.Store', {
56 model: 'pve-storage-content',
57 sorters: {
58 property: 'volid',
59 order: 'DESC'
60 },
61 filters: [
62 vmtypeFilter,
63 searchFilter
64 ]
65 });
66
67 var reload = Ext.Function.createBuffered(function() {
68 if (me.store) {
69 me.store.load();
70 }
71 }, 100);
72
73 var setStorage = function(storage) {
74 var url = '/api2/json/nodes/' + nodename + '/storage/' + storage + '/content';
75 url += '?content=backup';
76
77 me.store.setProxy({
78 type: 'pve',
79 url: url
80 });
81
82 reload();
83 };
84
85 var storagesel = Ext.create('PVE.form.StorageSelector', {
86 nodename: nodename,
87 fieldLabel: gettext('Storage'),
88 labelAlign: 'right',
89 storageContent: 'backup',
90 allowBlank: false,
91 listeners: {
92 change: function(f, value) {
93 setStorage(value);
94 }
95 }
96 });
97
98 var storagefilter = Ext.create('Ext.form.field.Text', {
99 fieldLabel: gettext('Search'),
100 labelWidth: 50,
101 labelAlign: 'right',
102 enableKeyEvents: true,
103 value: searchFilter.value,
104 listeners: {
105 buffer: 500,
106 keyup: function(field) {
107 me.store.clearFilter(true);
108 searchFilter.value = field.getValue();
109 me.store.filter([
110 vmtypeFilter,
111 searchFilter
112 ]);
113 }
114 }
115 });
116
117 var sm = Ext.create('Ext.selection.RowModel', {});
118
119 var backup_btn = Ext.create('Ext.button.Button', {
120 text: gettext('Backup now'),
121 handler: function() {
122 var win = Ext.create('PVE.window.Backup', {
123 nodename: nodename,
124 vmid: vmid,
125 vmtype: vmtype,
126 storage: storagesel.getValue(),
127 listeners : {
128 close: function() {
129 reload();
130 }
131 }
132 });
133 win.show();
134 }
135 });
136
137 var restore_btn = Ext.create('PVE.button.Button', {
138 text: gettext('Restore'),
139 disabled: true,
140 selModel: sm,
141 enableFn: function(rec) {
142 return !!rec;
143 },
144 handler: function(b, e, rec) {
145 var volid = rec.data.volid;
146
147 var win = Ext.create('PVE.window.Restore', {
148 nodename: nodename,
149 vmid: vmid,
150 volid: rec.data.volid,
151 volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
152 vmtype: vmtype
153 });
154 win.show();
155 win.on('destroy', reload);
156 }
157 });
158
159 var delete_btn = Ext.create('PVE.button.Button', {
160 text: gettext('Remove'),
161 disabled: true,
162 selModel: sm,
163 dangerous: true,
164 confirmMsg: function(rec) {
165 var msg = Ext.String.format(gettext('Are you sure you want to remove entry {0}'),
166 "'" + rec.data.volid + "'");
167 msg += " " + gettext('This will permanently erase all data.');
168
169 return msg;
170 },
171 enableFn: function(rec) {
172 return !!rec;
173 },
174 handler: function(b, e, rec){
175 var storage = storagesel.getValue();
176 if (!storage) {
177 return;
178 }
179
180 var volid = rec.data.volid;
181 PVE.Utils.API2Request({
182 url: "/nodes/" + nodename + "/storage/" + storage + "/content/" + volid,
183 method: 'DELETE',
184 waitMsgTarget: me,
185 failure: function(response, opts) {
186 Ext.Msg.alert('Error', response.htmlStatus);
187 },
188 success: function(response, options) {
189 reload();
190 }
191 });
192 }
193 });
194
195 var config_btn = Ext.create('PVE.button.Button', {
196 text: gettext('Show Configuration'),
197 disabled: true,
198 selModel: sm,
199 enableFn: function(rec) {
200 return !!rec;
201 },
202 handler: function(b, e, rec) {
203 var storage = storagesel.getValue();
204 if (!storage) {
205 return;
206 }
207
208 var win = Ext.create('PVE.window.BackupConfig', {
209 volume: rec.data.volid,
210 pveSelNode: me.pveSelNode
211 });
212
213 win.show();
214 }
215 });
216
217 Ext.apply(me, {
218 selModel: sm,
219 tbar: [ backup_btn, restore_btn, delete_btn,config_btn, '->', storagesel, storagefilter ],
220 columns: [
221 {
222 header: gettext('Name'),
223 flex: 1,
224 sortable: true,
225 renderer: PVE.Utils.render_storage_content,
226 dataIndex: 'volid'
227 },
228 {
229 header: gettext('Format'),
230 width: 100,
231 dataIndex: 'format'
232 },
233 {
234 header: gettext('Size'),
235 width: 100,
236 renderer: PVE.Utils.format_size,
237 dataIndex: 'size'
238 }
239 ]
240 });
241
242 me.callParent();
243 }
244 });