]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/Backup.js
ui: backup window: avoid issuing API call with null/empty parameter
[pve-manager.git] / www / manager6 / window / Backup.js
CommitLineData
56c8ef92
DM
1Ext.define('PVE.window.Backup', {
2 extend: 'Ext.window.Window',
3
4 resizable: false,
5
8058410f 6 initComponent: function() {
56c8ef92
DM
7 var me = this;
8
9 if (!me.nodename) {
10 throw "no node name specified";
11 }
12
13 if (!me.vmid) {
14 throw "no VM ID specified";
15 }
16
17 if (!me.vmtype) {
18 throw "no VM type specified";
19 }
20
62ce8928
TL
21 let compressionSelector = Ext.create('PVE.form.CompressionSelector', {
22 name: 'compress',
23 value: 'zstd',
24 fieldLabel: gettext('Compression'),
25 });
26
fddb0412
FE
27 let modeSelector = Ext.create('PVE.form.BackupModeSelector', {
28 fieldLabel: gettext('Mode'),
29 value: 'snapshot',
30 name: 'mode',
31 });
32
33 let mailtoField = Ext.create('Ext.form.field.Text', {
34 fieldLabel: gettext('Send email to'),
35 name: 'mailto',
36 emptyText: Proxmox.Utils.noneText,
37 });
38
39 let initialDefaults = false;
40
56c8ef92
DM
41 var storagesel = Ext.create('PVE.form.StorageSelector', {
42 nodename: me.nodename,
43 name: 'storage',
56c8ef92
DM
44 fieldLabel: gettext('Storage'),
45 storageContent: 'backup',
62ce8928
TL
46 allowBlank: false,
47 listeners: {
48 change: function(f, v) {
6d52223b
FE
49 if (v === null || v === undefined || v === '') {
50 return;
51 }
52
62ce8928 53 let store = f.getStore();
8267aa63 54 let rec = store.findRecord('storage', v, 0, false, true, true);
62ce8928
TL
55
56 if (rec && rec.data && rec.data.type === 'pbs') {
57 compressionSelector.setValue('zstd');
58 compressionSelector.setDisabled(true);
59 } else if (!compressionSelector.getEditable()) {
60 compressionSelector.setDisabled(false);
61 }
fddb0412
FE
62
63 Proxmox.Utils.API2Request({
64 url: `/nodes/${me.nodename}/vzdump/defaults`,
65 method: 'GET',
66 params: {
67 storage: v,
68 },
69 waitMsgTarget: me,
70 success: function(response, opts) {
71 const data = response.result.data;
72
73 if (!initialDefaults && data.mailto !== undefined) {
74 mailtoField.setValue(data.mailto);
75 }
76 if (!initialDefaults && data.mode !== undefined) {
77 modeSelector.setValue(data.mode);
78 }
79
80 initialDefaults = true;
81 },
82 failure: function(response, opts) {
83 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
84 },
85 });
f6710aac 86 },
62ce8928 87 },
56c8ef92 88 });
9fd52dd2 89 storagesel.setValue(me.storage);
56c8ef92
DM
90
91 me.formPanel = Ext.create('Ext.form.Panel', {
92 bodyPadding: 10,
93 border: false,
94 fieldDefaults: {
95 labelWidth: 100,
f6710aac 96 anchor: '100%',
56c8ef92
DM
97 },
98 items: [
99 storagesel,
fddb0412 100 modeSelector,
62ce8928 101 compressionSelector,
fddb0412 102 mailtoField,
aa396ea6 103 ],
56c8ef92
DM
104 });
105
106 var form = me.formPanel.getForm();
107
108 var submitBtn = Ext.create('Ext.Button', {
109 text: gettext('Backup'),
8058410f 110 handler: function() {
56c8ef92
DM
111 var storage = storagesel.getValue();
112 var values = form.getValues();
113 var params = {
114 storage: storage,
115 vmid: me.vmid,
116 mode: values.mode,
aa396ea6 117 remove: 0,
56c8ef92 118 };
8b8a4583 119
8058410f 120 if (values.mailto) {
8b8a4583
DC
121 params.mailto = values.mailto;
122 }
123
56c8ef92
DM
124 if (values.compress) {
125 params.compress = values.compress;
126 }
127
e7ade592 128 Proxmox.Utils.API2Request({
56c8ef92
DM
129 url: '/nodes/' + me.nodename + '/vzdump',
130 params: params,
131 method: 'POST',
8058410f 132 failure: function(response, opts) {
f6710aac 133 Ext.Msg.alert('Error', response.htmlStatus);
56c8ef92
DM
134 },
135 success: function(response, options) {
e83e60bf
EK
136 // close later so we reload the grid
137 // after the task has completed
138 me.hide();
139
56c8ef92 140 var upid = response.result.data;
2a4971d8 141
8cbc11a7 142 var win = Ext.create('Proxmox.window.TaskViewer', {
e83e60bf
EK
143 upid: upid,
144 listeners: {
145 close: function() {
146 me.close();
f6710aac
TL
147 },
148 },
56c8ef92
DM
149 });
150 win.show();
f6710aac 151 },
56c8ef92 152 });
f6710aac 153 },
56c8ef92
DM
154 });
155
672a6270 156 var helpBtn = Ext.create('Proxmox.button.Help', {
0de33b54
EK
157 onlineHelp: 'chapter_vzdump',
158 listenToGlobalEvent: false,
f6710aac 159 hidden: false,
0de33b54
EK
160 });
161
2a4971d8 162 var title = gettext('Backup') + " " +
53e3ea84 163 (me.vmtype === 'lxc' ? "CT" : "VM") +
56c8ef92
DM
164 " " + me.vmid;
165
166 Ext.apply(me, {
167 title: title,
168 width: 350,
169 modal: true,
170 layout: 'auto',
171 border: false,
8058410f
TL
172 items: [me.formPanel],
173 buttons: [helpBtn, '->', submitBtn],
56c8ef92
DM
174 });
175
176 me.callParent();
f6710aac 177 },
56c8ef92 178});