]> git.proxmox.com Git - pmg-gui.git/blame - js/BackupRestore.js
refactor RestoreWindow for PBS
[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
7bcc34db
SI
58 let initurl = "/nodes/" + Proxmox.NodeName;
59 if (me.filename) {
60 me.url = initurl + "/backup/" + encodeURIComponent(me.filename);
61 } else {
62 throw "neither filename nor snapshot given";
63 }
db13d7e3
DC
64
65 me.callParent();
c87d46fb 66 },
db13d7e3
DC
67});
68
7f261b55
DM
69Ext.define('PMG.BackupRestore', {
70 extend: 'Ext.grid.GridPanel',
71 xtype: 'pmgBackupRestore',
72
73 title: gettext('Backup') + '/' + gettext('Restore'),
74
75 controller: {
76 xclass: 'Ext.app.ViewController',
77
78 createBackup: function() {
28eb60c0 79 let view = this.getView();
7f261b55
DM
80 Proxmox.Utils.API2Request({
81 url: "/nodes/" + Proxmox.NodeName + "/backup",
82 method: 'POST',
28eb60c0 83 waitMsgTarget: view,
c87d46fb 84 failure: function(response, opts) {
7f261b55
DM
85 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
86 },
87 success: function(response, opts) {
28eb60c0 88 let upid = response.result.data;
7f261b55 89
28eb60c0 90 let win = Ext.create('Proxmox.window.TaskViewer', {
c87d46fb 91 upid: upid,
28eb60c0 92 autoShow: true,
7f261b55 93 });
28eb60c0 94 view.mon(win, 'close', () => view.store.load());
c87d46fb 95 },
7f261b55
DM
96 });
97 },
98
7cd5155c 99 onRestore: function() {
28eb60c0
TL
100 let view = this.getView();
101 let rec = view.getSelection()[0];
7cd5155c 102
467b217d
DC
103 if (!(rec && rec.data && rec.data.filename)) {
104 return;
105 }
7cd5155c 106
db13d7e3 107 Ext.create('PMG.RestoreWindow', {
c87d46fb 108 filename: rec.data.filename,
db13d7e3 109 }).show();
7cd5155c
DM
110 },
111
7f261b55 112 onAfterRemove: function(btn, res) {
28eb60c0
TL
113 let view = this.getView();
114 view.store.load();
c87d46fb 115 },
7f261b55
DM
116 },
117
118 tbar: [
119 {
120 text: gettext('Backup'),
c87d46fb 121 handler: 'createBackup',
7f261b55 122 },
dd79f43a 123 '-',
7cd5155c
DM
124 {
125 xtype: 'proxmoxButton',
126 text: gettext('Restore'),
127 handler: 'onRestore',
c87d46fb 128 disabled: true,
7cd5155c 129 },
7f261b55
DM
130 {
131 xtype: 'proxmoxStdRemoveButton',
132 baseurl: '/nodes/' + Proxmox.NodeName + '/backup',
133 reference: 'removeBtn',
134 callback: 'onAfterRemove',
c87d46fb
TL
135 waitMsgTarget: true,
136 },
7f261b55
DM
137 ],
138
139 store: {
140 autoLoad: true,
0b33a628
DM
141 model: 'pmg-backup-list',
142 sorters: [
143 {
144 property: 'timestamp',
c87d46fb
TL
145 direction: 'DESC',
146 },
147 ],
7f261b55
DM
148 },
149
150 columns: [
151 {
152 header: gettext('Filename'),
153 width: 300,
154 sortable: true,
bedf67ee 155 renderer: Ext.htmlEncode,
c87d46fb 156 dataIndex: 'filename',
7f261b55 157 },
0b33a628
DM
158 {
159 xtype: 'datecolumn',
160 header: gettext('Time'),
161 width: 150,
162 format: 'Y-m-d H:i',
163 sortable: true,
c87d46fb 164 dataIndex: 'timestamp',
0b33a628 165 },
7f261b55
DM
166 {
167 header: gettext('Size'),
168 width: 100,
169 sortable: true,
75a55308 170 renderer: Proxmox.Utils.format_size,
c87d46fb 171 dataIndex: 'size',
bedf67ee
DC
172 },
173 {
174 header: gettext('Download'),
175 renderer: function(filename) {
176 return "<a class='download' href='" +
177 "/api2/json/nodes/" + Proxmox.NodeName + "/backup/" + encodeURIComponent(filename) +
178 "'><i class='fa fa-fw fa-download'</i></a>";
179 },
c87d46fb
TL
180 dataIndex: 'filename',
181 },
182 ],
7f261b55 183});