]> git.proxmox.com Git - pmg-gui.git/blob - js/BackupRestore.js
b66a80ebc3ca374b244f8205e12707bf6c30ca27
[pmg-gui.git] / js / BackupRestore.js
1 Ext.define('pmg-backup-list', {
2 extend: 'Ext.data.Model',
3 fields: [
4 'filename',
5 { type: 'integer', name: 'size' },
6 { type: 'date', dateFormat: 'timestamp', name: 'timestamp' },
7
8 ],
9 proxy: {
10 type: 'proxmox',
11 url: "/api2/json/nodes/" + Proxmox.NodeName + "/backup",
12 },
13 idProperty: 'filename',
14 });
15
16 Ext.define('PMG.RestoreWindow', {
17 extend: 'Proxmox.window.Edit',
18 xtype: 'pmgRestoreWindow',
19 onlineHelp: 'chapter_pmgbackup',
20
21 showProgress: true,
22 title: gettext('Restore'),
23 isCreate: true,
24 method: 'POST',
25 submitText: gettext('Restore'),
26 fieldDefaults: {
27 labelWidth: 150,
28 },
29 items: [
30 {
31 xtype: 'proxmoxcheckbox',
32 name: 'config',
33 fieldLabel: gettext('System Configuration'),
34 },
35 {
36 xtype: 'proxmoxcheckbox',
37 name: 'database',
38 value: 1,
39 uncheckedValue: 0,
40 fieldLabel: gettext('Rule Database'),
41 listeners: {
42 change: function(field, value) {
43 field.nextSibling('field[name=statistic]').setDisabled(!value);
44 },
45 },
46 },
47 {
48 xtype: 'proxmoxcheckbox',
49 name: 'statistic',
50 fieldLabel: gettext('Statistic'),
51 },
52 ],
53
54 initComponent: function() {
55 let me = this;
56
57 if (!me.filename) {
58 throw "no filename given";
59 }
60
61 me.url = `/nodes/${Proxmox.NodeName}/backup/${encodeURIComponent(me.filename)}`;
62
63 me.callParent();
64 },
65 });
66
67 Ext.define('PMG.BackupRestore', {
68 extend: 'Ext.grid.GridPanel',
69 xtype: 'pmgBackupRestore',
70
71 title: gettext('Backup') + '/' + gettext('Restore'),
72
73 controller: {
74 xclass: 'Ext.app.ViewController',
75
76 createBackup: function() {
77 let view = this.getView();
78 Proxmox.Utils.API2Request({
79 url: "/nodes/" + Proxmox.NodeName + "/backup",
80 method: 'POST',
81 waitMsgTarget: view,
82 failure: function(response, opts) {
83 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
84 },
85 success: function(response, opts) {
86 let upid = response.result.data;
87
88 let win = Ext.create('Proxmox.window.TaskViewer', {
89 upid: upid,
90 autoShow: true,
91 });
92 view.mon(win, 'close', () => view.store.load());
93 },
94 });
95 },
96
97 onRestore: function() {
98 let view = this.getView();
99 let rec = view.getSelection()[0];
100
101 if (!(rec && rec.data && rec.data.filename)) {
102 return;
103 }
104
105 Ext.create('PMG.RestoreWindow', {
106 filename: rec.data.filename,
107 }).show();
108 },
109
110 onAfterRemove: function(btn, res) {
111 let view = this.getView();
112 view.store.load();
113 },
114 },
115
116 tbar: [
117 {
118 text: gettext('Backup'),
119 handler: 'createBackup',
120 },
121 '-',
122 {
123 xtype: 'proxmoxButton',
124 text: gettext('Restore'),
125 handler: 'onRestore',
126 disabled: true,
127 },
128 {
129 xtype: 'proxmoxStdRemoveButton',
130 baseurl: '/nodes/' + Proxmox.NodeName + '/backup',
131 reference: 'removeBtn',
132 callback: 'onAfterRemove',
133 waitMsgTarget: true,
134 },
135 ],
136
137 store: {
138 autoLoad: true,
139 model: 'pmg-backup-list',
140 sorters: [
141 {
142 property: 'timestamp',
143 direction: 'DESC',
144 },
145 ],
146 },
147
148 columns: [
149 {
150 header: gettext('Filename'),
151 width: 300,
152 sortable: true,
153 renderer: Ext.htmlEncode,
154 dataIndex: 'filename',
155 },
156 {
157 xtype: 'datecolumn',
158 header: gettext('Time'),
159 width: 150,
160 format: 'Y-m-d H:i',
161 sortable: true,
162 dataIndex: 'timestamp',
163 },
164 {
165 header: gettext('Size'),
166 width: 100,
167 sortable: true,
168 renderer: Proxmox.Utils.format_size,
169 dataIndex: 'size',
170 },
171 {
172 header: gettext('Download'),
173 renderer: function(filename) {
174 return "<a class='download' href='" +
175 "/api2/json/nodes/" + Proxmox.NodeName + "/backup/" + encodeURIComponent(filename) +
176 "'><i class='fa fa-fw fa-download'</i></a>";
177 },
178 dataIndex: 'filename',
179 },
180 ],
181 });