]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/window/Restore.js
use Checkbox from widget toolkit
[pve-manager.git] / www / manager6 / window / Restore.js
CommitLineData
d7683c68
DM
1Ext.define('PVE.window.Restore', {
2 extend: 'Ext.window.Window', // fixme: PVE.window.Edit?
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.volid) {
14 throw "no volume ID specified";
15 }
16
17 if (!me.vmtype) {
18 throw "no vmtype specified";
19 }
20
21 var storagesel = Ext.create('PVE.form.StorageSelector', {
22 nodename: me.nodename,
23 name: 'storage',
24 value: '',
25 fieldLabel: gettext('Storage'),
a00a9ffd 26 storageContent: (me.vmtype === 'lxc') ? 'rootdir' : 'images',
d7683c68
DM
27 allowBlank: true
28 });
29
ed416f20
EK
30 var IDfield;
31 if (me.vmid) {
32 IDfield = Ext.create('Ext.form.field.Display', {
33 name: 'vmid',
34 value: me.vmid,
35 fieldLabel: (me.vmtype === 'lxc') ? 'CT' : 'VM'
36 });
37 } else {
38 IDfield = Ext.create('PVE.form.GuestIDSelector', {
39 name: 'vmid',
40 guestType: me.vmtype,
41 loadNextGuestID: true,
42 validateExists: false
43 });
44 }
45
9cf2e84b
DM
46 var items = [
47 {
48 xtype: 'displayfield',
49 value: me.volidText || me.volid,
50 fieldLabel: gettext('Source')
51 },
52 storagesel,
53 IDfield
54 ];
55
56 if (me.vmtype === 'lxc') {
57 items.push({
896c0d50 58 xtype: 'proxmoxcheckbox',
9cf2e84b
DM
59 name: 'unprivileged',
60 value: '',
61 fieldLabel: gettext('Unprivileged container')
62 });
63 }
64
d7683c68
DM
65 me.formPanel = Ext.create('Ext.form.Panel', {
66 bodyPadding: 10,
67 border: false,
68 fieldDefaults: {
69 labelWidth: 100,
70 anchor: '100%'
71 },
9cf2e84b 72 items: items
d7683c68
DM
73 });
74
75 var form = me.formPanel.getForm();
76
77 var doRestore = function(url, params) {
e7ade592 78 Proxmox.Utils.API2Request({
d7683c68
DM
79 url: url,
80 params: params,
81 method: 'POST',
82 waitMsgTarget: me,
83 failure: function (response, opts) {
84 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
85 },
86 success: function(response, options) {
87 var upid = response.result.data;
88
89 var win = Ext.create('PVE.window.TaskViewer', {
90 upid: upid
91 });
92 win.show();
93 me.close();
94 }
95 });
96 };
97
98 var submitBtn = Ext.create('Ext.Button', {
99 text: gettext('Restore'),
100 handler: function(){
101 var storage = storagesel.getValue();
102 var values = form.getValues();
103
104 var params = {
105 storage: storage,
106 vmid: me.vmid || values.vmid,
107 force: me.vmid ? 1 : 0
108 };
109
110 var url;
16152937 111 var msg;
a00a9ffd
AG
112 if (me.vmtype === 'lxc') {
113 url = '/nodes/' + me.nodename + '/lxc';
d7683c68
DM
114 params.ostemplate = me.volid;
115 params.restore = 1;
9cf2e84b 116 if (values.unprivileged) { params.unprivileged = 1; }
e7ade592 117 msg = Proxmox.Utils.format_task_description('vzrestore', params.vmid);
d7683c68
DM
118 } else if (me.vmtype === 'qemu') {
119 url = '/nodes/' + me.nodename + '/qemu';
120 params.archive = me.volid;
e7ade592 121 msg = Proxmox.Utils.format_task_description('qmrestore', params.vmid);
d7683c68
DM
122 } else {
123 throw 'unknown VM type';
124 }
125
126 if (me.vmid) {
16152937 127 msg += '. ' + gettext('This will permanently erase current VM data.');
d7683c68
DM
128 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
129 if (btn !== 'yes') {
130 return;
131 }
132 doRestore(url, params);
133 });
134 } else {
135 doRestore(url, params);
136 }
137 }
138 });
139
140 form.on('validitychange', function(f, valid) {
141 submitBtn.setDisabled(!valid);
142 });
143
185a77e5
DM
144 var title = gettext('Restore') + ": " + (
145 (me.vmtype === 'lxc') ? 'CT' : 'VM');
146
147 if (me.vmid) {
148 title += " " + me.vmid;
149 }
d7683c68
DM
150
151 Ext.apply(me, {
152 title: title,
153 width: 500,
154 modal: true,
155 layout: 'auto',
156 border: false,
157 items: [ me.formPanel ],
158 buttons: [ submitBtn ]
159 });
160
161 me.callParent();
162 }
163});