]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Backup.js
ui: backup window: also set initialDefaults variable in failure case
[pve-manager.git] / www / manager6 / window / Backup.js
1 Ext.define('PVE.window.Backup', {
2 extend: 'Ext.window.Window',
3
4 resizable: false,
5
6 initComponent: function() {
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
21 let compressionSelector = Ext.create('PVE.form.CompressionSelector', {
22 name: 'compress',
23 value: 'zstd',
24 fieldLabel: gettext('Compression'),
25 });
26
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
41 var storagesel = Ext.create('PVE.form.StorageSelector', {
42 nodename: me.nodename,
43 name: 'storage',
44 fieldLabel: gettext('Storage'),
45 storageContent: 'backup',
46 allowBlank: false,
47 listeners: {
48 change: function(f, v) {
49 if (v === null || v === undefined || v === '') {
50 return;
51 }
52
53 let store = f.getStore();
54 let rec = store.findRecord('storage', v, 0, false, true, true);
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 }
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 initialDefaults = true;
84 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
85 },
86 });
87 },
88 },
89 });
90 storagesel.setValue(me.storage);
91
92 me.formPanel = Ext.create('Ext.form.Panel', {
93 bodyPadding: 10,
94 border: false,
95 fieldDefaults: {
96 labelWidth: 100,
97 anchor: '100%',
98 },
99 items: [
100 storagesel,
101 modeSelector,
102 compressionSelector,
103 mailtoField,
104 ],
105 });
106
107 var form = me.formPanel.getForm();
108
109 var submitBtn = Ext.create('Ext.Button', {
110 text: gettext('Backup'),
111 handler: function() {
112 var storage = storagesel.getValue();
113 var values = form.getValues();
114 var params = {
115 storage: storage,
116 vmid: me.vmid,
117 mode: values.mode,
118 remove: 0,
119 };
120
121 if (values.mailto) {
122 params.mailto = values.mailto;
123 }
124
125 if (values.compress) {
126 params.compress = values.compress;
127 }
128
129 Proxmox.Utils.API2Request({
130 url: '/nodes/' + me.nodename + '/vzdump',
131 params: params,
132 method: 'POST',
133 failure: function(response, opts) {
134 Ext.Msg.alert('Error', response.htmlStatus);
135 },
136 success: function(response, options) {
137 // close later so we reload the grid
138 // after the task has completed
139 me.hide();
140
141 var upid = response.result.data;
142
143 var win = Ext.create('Proxmox.window.TaskViewer', {
144 upid: upid,
145 listeners: {
146 close: function() {
147 me.close();
148 },
149 },
150 });
151 win.show();
152 },
153 });
154 },
155 });
156
157 var helpBtn = Ext.create('Proxmox.button.Help', {
158 onlineHelp: 'chapter_vzdump',
159 listenToGlobalEvent: false,
160 hidden: false,
161 });
162
163 var title = gettext('Backup') + " " +
164 (me.vmtype === 'lxc' ? "CT" : "VM") +
165 " " + me.vmid;
166
167 Ext.apply(me, {
168 title: title,
169 width: 350,
170 modal: true,
171 layout: 'auto',
172 border: false,
173 items: [me.formPanel],
174 buttons: [helpBtn, '->', submitBtn],
175 });
176
177 me.callParent();
178 },
179 });