]> git.proxmox.com Git - pmg-gui.git/blame - js/BackupRestore.js
fix #4238: spam info grid: enable sorting & add colors for spam score
[pmg-gui.git] / js / BackupRestore.js
CommitLineData
7f261b55
DM
1Ext.define('pmg-backup-list', {
2 extend: 'Ext.data.Model',
3 fields: [
4 'filename',
0b33a628 5 { type: 'integer', name: 'size' },
c87d46fb 6 { type: 'date', dateFormat: 'timestamp', name: 'timestamp' },
0b33a628 7
7f261b55
DM
8 ],
9 proxy: {
10 type: 'proxmox',
c87d46fb 11 url: "/api2/json/nodes/" + Proxmox.NodeName + "/backup",
7f261b55 12 },
c87d46fb 13 idProperty: 'filename',
7f261b55
DM
14});
15
db13d7e3
DC
16Ext.define('PMG.RestoreWindow', {
17 extend: 'Proxmox.window.Edit',
18 xtype: 'pmgRestoreWindow',
573a6e8b 19 onlineHelp: 'chapter_pmgbackup',
db13d7e3
DC
20
21 showProgress: true,
22 title: gettext('Restore'),
23 isCreate: true,
24 method: 'POST',
25 submitText: gettext('Restore'),
26 fieldDefaults: {
c87d46fb 27 labelWidth: 150,
db13d7e3 28 },
db13d7e3
DC
29
30 initComponent: function() {
28eb60c0 31 let me = this;
db13d7e3 32
7bcc34db
SI
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 ];
db13d7e3 57
ad925481 58 let restorePath;
7bcc34db 59 if (me.filename) {
ad925481 60 restorePath = `backup/${encodeURIComponent(me.filename)}`;
d944805a 61 } else if (me.backup_time) {
ad925481 62 restorePath = `pbs/${me.remote}/snapshot/${me.backup_id}/${me.backup_time}`;
7bcc34db
SI
63 } else {
64 throw "neither filename nor snapshot given";
65 }
ad925481 66 me.url = `/nodes/${Proxmox.NodeName}/${restorePath}`;
db13d7e3
DC
67
68 me.callParent();
c87d46fb 69 },
db13d7e3
DC
70});
71
4afe714b
SI
72Ext.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
7f261b55
DM
98Ext.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() {
28eb60c0 108 let view = this.getView();
4afe714b 109 Ext.create('PMG.BackupWindow', {
7f261b55 110 url: "/nodes/" + Proxmox.NodeName + "/backup",
4afe714b
SI
111 taskDone: () => view.store.load(),
112 }).show();
7f261b55
DM
113 },
114
7cd5155c 115 onRestore: function() {
28eb60c0
TL
116 let view = this.getView();
117 let rec = view.getSelection()[0];
7cd5155c 118
467b217d
DC
119 if (!(rec && rec.data && rec.data.filename)) {
120 return;
121 }
7cd5155c 122
db13d7e3 123 Ext.create('PMG.RestoreWindow', {
c87d46fb 124 filename: rec.data.filename,
db13d7e3 125 }).show();
7cd5155c
DM
126 },
127
7f261b55 128 onAfterRemove: function(btn, res) {
28eb60c0
TL
129 let view = this.getView();
130 view.store.load();
c87d46fb 131 },
7f261b55
DM
132 },
133
134 tbar: [
135 {
22988ae4 136 text: gettext('Backup Now'),
c87d46fb 137 handler: 'createBackup',
7f261b55 138 },
dd79f43a 139 '-',
7cd5155c
DM
140 {
141 xtype: 'proxmoxButton',
142 text: gettext('Restore'),
143 handler: 'onRestore',
c87d46fb 144 disabled: true,
7cd5155c 145 },
7f261b55
DM
146 {
147 xtype: 'proxmoxStdRemoveButton',
148 baseurl: '/nodes/' + Proxmox.NodeName + '/backup',
149 reference: 'removeBtn',
150 callback: 'onAfterRemove',
c87d46fb
TL
151 waitMsgTarget: true,
152 },
7f261b55
DM
153 ],
154
155 store: {
156 autoLoad: true,
0b33a628
DM
157 model: 'pmg-backup-list',
158 sorters: [
159 {
160 property: 'timestamp',
c87d46fb
TL
161 direction: 'DESC',
162 },
163 ],
7f261b55
DM
164 },
165
166 columns: [
167 {
168 header: gettext('Filename'),
169 width: 300,
170 sortable: true,
bedf67ee 171 renderer: Ext.htmlEncode,
c87d46fb 172 dataIndex: 'filename',
7f261b55 173 },
0b33a628
DM
174 {
175 xtype: 'datecolumn',
176 header: gettext('Time'),
177 width: 150,
178 format: 'Y-m-d H:i',
179 sortable: true,
c87d46fb 180 dataIndex: 'timestamp',
0b33a628 181 },
7f261b55
DM
182 {
183 header: gettext('Size'),
184 width: 100,
185 sortable: true,
75a55308 186 renderer: Proxmox.Utils.format_size,
c87d46fb 187 dataIndex: 'size',
bedf67ee
DC
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 },
c87d46fb
TL
196 dataIndex: 'filename',
197 },
198 ],
7f261b55 199});