]> git.proxmox.com Git - pmg-gui.git/blob - js/BackupRestore.js
mainview/quarantine: add theme switcher
[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
30 initComponent: function() {
31 let me = this;
32
33 me.items = [
34 {
35 xtype: 'proxmoxcheckbox',
36 name: 'config',
37 fieldLabel: gettext('System Configuration'),
38 },
39 {
40 xtype: 'proxmoxcheckbox',
41 name: 'database',
42 value: 1,
43 uncheckedValue: 0,
44 fieldLabel: gettext('Rule Database'),
45 listeners: {
46 change: function(field, value) {
47 field.nextSibling('field[name=statistic]').setDisabled(!value);
48 },
49 },
50 },
51 {
52 xtype: 'proxmoxcheckbox',
53 name: 'statistic',
54 fieldLabel: gettext('Statistic'),
55 },
56 ];
57
58 let restorePath;
59 if (me.filename) {
60 restorePath = `backup/${encodeURIComponent(me.filename)}`;
61 } else if (me.backup_time) {
62 restorePath = `pbs/${me.remote}/snapshot/${me.backup_id}/${me.backup_time}`;
63 } else {
64 throw "neither filename nor snapshot given";
65 }
66 me.url = `/nodes/${Proxmox.NodeName}/${restorePath}`;
67
68 me.callParent();
69 },
70 });
71
72 Ext.define('PMG.BackupWindow', {
73 extend: 'Proxmox.window.Edit',
74 xtype: 'pmgBackupWindow',
75 onlineHelp: 'chapter_pmgbackup',
76
77 showProgress: true,
78 title: gettext('Backup'),
79 isCreate: true,
80 method: 'POST',
81 submitText: gettext('Backup'),
82 fieldDefaults: {
83 labelWidth: 150,
84 },
85 showTaskViewer: true,
86 items: [
87 {
88 xtype: 'proxmoxcheckbox',
89 name: 'statistic',
90 value: 1,
91 uncheckedValue: 0,
92 fieldLabel: gettext('Include Statistics'),
93 },
94 ],
95
96 });
97
98 Ext.define('PMG.BackupRestore', {
99 extend: 'Ext.grid.GridPanel',
100 xtype: 'pmgBackupRestore',
101
102 title: gettext('Backup') + '/' + gettext('Restore'),
103
104 controller: {
105 xclass: 'Ext.app.ViewController',
106
107 createBackup: function() {
108 let view = this.getView();
109 Ext.create('PMG.BackupWindow', {
110 url: "/nodes/" + Proxmox.NodeName + "/backup",
111 taskDone: () => view.store.load(),
112 }).show();
113 },
114
115 onRestore: function() {
116 let view = this.getView();
117 let rec = view.getSelection()[0];
118
119 if (!(rec && rec.data && rec.data.filename)) {
120 return;
121 }
122
123 Ext.create('PMG.RestoreWindow', {
124 filename: rec.data.filename,
125 }).show();
126 },
127
128 onAfterRemove: function(btn, res) {
129 let view = this.getView();
130 view.store.load();
131 },
132 },
133
134 tbar: [
135 {
136 text: gettext('Backup Now'),
137 handler: 'createBackup',
138 },
139 '-',
140 {
141 xtype: 'proxmoxButton',
142 text: gettext('Restore'),
143 handler: 'onRestore',
144 disabled: true,
145 },
146 {
147 xtype: 'proxmoxStdRemoveButton',
148 baseurl: '/nodes/' + Proxmox.NodeName + '/backup',
149 reference: 'removeBtn',
150 callback: 'onAfterRemove',
151 waitMsgTarget: true,
152 },
153 ],
154
155 store: {
156 autoLoad: true,
157 model: 'pmg-backup-list',
158 sorters: [
159 {
160 property: 'timestamp',
161 direction: 'DESC',
162 },
163 ],
164 },
165
166 columns: [
167 {
168 header: gettext('Filename'),
169 width: 300,
170 sortable: true,
171 renderer: Ext.htmlEncode,
172 dataIndex: 'filename',
173 },
174 {
175 xtype: 'datecolumn',
176 header: gettext('Time'),
177 width: 150,
178 format: 'Y-m-d H:i',
179 sortable: true,
180 dataIndex: 'timestamp',
181 },
182 {
183 header: gettext('Size'),
184 width: 100,
185 sortable: true,
186 renderer: Proxmox.Utils.render_size,
187 dataIndex: 'size',
188 },
189 {
190 header: gettext('Download'),
191 renderer: function(filename) {
192 return "<a class='download' href='" +
193 "/api2/json/nodes/" + Proxmox.NodeName + "/backup/" + encodeURIComponent(filename) +
194 "'><i class='fa fa-fw fa-download'</i></a>";
195 },
196 dataIndex: 'filename',
197 },
198 ],
199 });