]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/Backup.js
ui: backup window: switch to two-column layout
[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) {
5ad3fbfa
FE
49 if (!initialDefaults) {
50 me.setLoading(false);
51 }
52
6d52223b
FE
53 if (v === null || v === undefined || v === '') {
54 return;
55 }
56
62ce8928 57 let store = f.getStore();
8267aa63 58 let rec = store.findRecord('storage', v, 0, false, true, true);
62ce8928
TL
59
60 if (rec && rec.data && rec.data.type === 'pbs') {
61 compressionSelector.setValue('zstd');
62 compressionSelector.setDisabled(true);
63 } else if (!compressionSelector.getEditable()) {
64 compressionSelector.setDisabled(false);
65 }
fddb0412
FE
66
67 Proxmox.Utils.API2Request({
68 url: `/nodes/${me.nodename}/vzdump/defaults`,
69 method: 'GET',
70 params: {
71 storage: v,
72 },
73 waitMsgTarget: me,
74 success: function(response, opts) {
75 const data = response.result.data;
76
77 if (!initialDefaults && data.mailto !== undefined) {
78 mailtoField.setValue(data.mailto);
79 }
80 if (!initialDefaults && data.mode !== undefined) {
81 modeSelector.setValue(data.mode);
82 }
83
84 initialDefaults = true;
85 },
86 failure: function(response, opts) {
b0d716e4 87 initialDefaults = true;
fddb0412
FE
88 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
89 },
90 });
f6710aac 91 },
62ce8928 92 },
56c8ef92
DM
93 });
94
bef57f5c 95 me.formPanel = Ext.create('Proxmox.panel.InputPanel', {
56c8ef92
DM
96 bodyPadding: 10,
97 border: false,
0b240dbf 98 column1: [
56c8ef92 99 storagesel,
fddb0412 100 modeSelector,
0b240dbf
FE
101 ],
102 column2: [
62ce8928 103 compressionSelector,
fddb0412 104 mailtoField,
aa396ea6 105 ],
56c8ef92
DM
106 });
107
56c8ef92
DM
108 var submitBtn = Ext.create('Ext.Button', {
109 text: gettext('Backup'),
8058410f 110 handler: function() {
56c8ef92 111 var storage = storagesel.getValue();
bef57f5c 112 let values = me.formPanel.getValues();
56c8ef92
DM
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,
56c8ef92
DM
168 modal: true,
169 layout: 'auto',
170 border: false,
8058410f
TL
171 items: [me.formPanel],
172 buttons: [helpBtn, '->', submitBtn],
5ad3fbfa
FE
173 listeners: {
174 afterrender: function() {
175 /// cleared within the storage selector's change listener
176 me.setLoading(gettext('Please wait...'));
177 storagesel.setValue(me.storage);
178 },
179 },
56c8ef92
DM
180 });
181
182 me.callParent();
f6710aac 183 },
56c8ef92 184});