]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Backup.js
ui: backup window: switch to proxmox input panel
[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 (!initialDefaults) {
50 me.setLoading(false);
51 }
52
53 if (v === null || v === undefined || v === '') {
54 return;
55 }
56
57 let store = f.getStore();
58 let rec = store.findRecord('storage', v, 0, false, true, true);
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 }
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) {
87 initialDefaults = true;
88 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
89 },
90 });
91 },
92 },
93 });
94
95 me.formPanel = Ext.create('Proxmox.panel.InputPanel', {
96 bodyPadding: 10,
97 border: false,
98 items: [
99 storagesel,
100 modeSelector,
101 compressionSelector,
102 mailtoField,
103 ],
104 });
105
106 var submitBtn = Ext.create('Ext.Button', {
107 text: gettext('Backup'),
108 handler: function() {
109 var storage = storagesel.getValue();
110 let values = me.formPanel.getValues();
111 var params = {
112 storage: storage,
113 vmid: me.vmid,
114 mode: values.mode,
115 remove: 0,
116 };
117
118 if (values.mailto) {
119 params.mailto = values.mailto;
120 }
121
122 if (values.compress) {
123 params.compress = values.compress;
124 }
125
126 Proxmox.Utils.API2Request({
127 url: '/nodes/' + me.nodename + '/vzdump',
128 params: params,
129 method: 'POST',
130 failure: function(response, opts) {
131 Ext.Msg.alert('Error', response.htmlStatus);
132 },
133 success: function(response, options) {
134 // close later so we reload the grid
135 // after the task has completed
136 me.hide();
137
138 var upid = response.result.data;
139
140 var win = Ext.create('Proxmox.window.TaskViewer', {
141 upid: upid,
142 listeners: {
143 close: function() {
144 me.close();
145 },
146 },
147 });
148 win.show();
149 },
150 });
151 },
152 });
153
154 var helpBtn = Ext.create('Proxmox.button.Help', {
155 onlineHelp: 'chapter_vzdump',
156 listenToGlobalEvent: false,
157 hidden: false,
158 });
159
160 var title = gettext('Backup') + " " +
161 (me.vmtype === 'lxc' ? "CT" : "VM") +
162 " " + me.vmid;
163
164 Ext.apply(me, {
165 title: title,
166 modal: true,
167 layout: 'auto',
168 border: false,
169 items: [me.formPanel],
170 buttons: [helpBtn, '->', submitBtn],
171 listeners: {
172 afterrender: function() {
173 /// cleared within the storage selector's change listener
174 me.setLoading(gettext('Please wait...'));
175 storagesel.setValue(me.storage);
176 },
177 },
178 });
179
180 me.callParent();
181 },
182 });