1 Ext
.define('PVE.grid.BackupView', {
2 extend
: 'Ext.grid.GridPanel',
4 alias
: ['widget.pveBackupView'],
6 onlineHelp
: 'chapter_vzdump',
9 stateId
: 'grid-guest-backup',
11 initComponent : function() {
14 var nodename
= me
.pveSelNode
.data
.node
;
16 throw "no node name specified";
19 var vmid
= me
.pveSelNode
.data
.vmid
;
21 throw "no VM ID specified";
24 var vmtype
= me
.pveSelNode
.data
.type
;
26 throw "no VM type specified";
30 if (vmtype
=== 'lxc' || vmtype
=== 'openvz') {
31 vmtypeFilter = function(item
) {
32 return PVE
.Utils
.volume_is_lxc_backup(item
.data
.volid
, item
.data
.format
);
34 } else if (vmtype
=== 'qemu') {
35 vmtypeFilter = function(item
) {
36 return PVE
.Utils
.volume_is_qemu_backup(item
.data
.volid
, item
.data
.format
);
39 throw "unsupported VM type '" + vmtype
+ "'";
55 me
.store
= Ext
.create('Ext.data.Store', {
56 model
: 'pve-storage-content',
68 let updateFilter = function() {
76 var reload
= Ext
.Function
.createBuffered(function() {
82 var setStorage = function(storage
) {
83 var url
= '/api2/json/nodes/' + nodename
+ '/storage/' + storage
+ '/content';
84 url
+= '?content=backup';
94 var storagesel
= Ext
.create('PVE.form.StorageSelector', {
96 fieldLabel
: gettext('Storage'),
98 storageContent
: 'backup',
101 change: function(f
, value
) {
102 let storage
= f
.getStore().findRecord('storage', value
, 0, false, true, true);
104 let isPBS
= storage
.data
.type
=== 'pbs';
105 me
.getColumns().forEach((column
) => {
106 let id
= column
.dataIndex
;
107 if (id
=== 'verification' || id
=== 'encrypted') {
108 column
.setHidden(!isPBS
);
117 var storagefilter
= Ext
.create('Ext.form.field.Text', {
118 fieldLabel
: gettext('Search'),
121 enableKeyEvents
: true,
122 value
: searchFilter
.value
,
125 keyup: function(field
) {
126 me
.store
.clearFilter(true);
127 searchFilter
.value
= field
.getValue();
133 var vmidfilterCB
= Ext
.create('Ext.form.field.Checkbox', {
134 boxLabel
: gettext('Filter VMID'),
137 change: function(cb
, value
) {
138 vmidFilter
.value
= value
? vmid
: '';
139 vmidFilter
.exactMatch
= !!value
;
145 var sm
= Ext
.create('Ext.selection.RowModel', {});
147 var backup_btn
= Ext
.create('Ext.button.Button', {
148 text
: gettext('Backup now'),
149 handler: function() {
150 var win
= Ext
.create('PVE.window.Backup', {
154 storage
: storagesel
.getValue(),
165 var restore_btn
= Ext
.create('Proxmox.button.Button', {
166 text
: gettext('Restore'),
169 enableFn: function(rec
) {
172 handler: function(b
, e
, rec
) {
173 let win
= Ext
.create('PVE.window.Restore', {
176 volid
: rec
.data
.volid
,
177 volidText
: PVE
.Utils
.render_storage_content(rec
.data
.volid
, {}, rec
),
181 win
.on('destroy', reload
);
185 var delete_btn
= Ext
.create('Proxmox.button.StdRemoveButton', {
189 confirmMsg: function(rec
) {
190 var msg
= Ext
.String
.format(gettext('Are you sure you want to remove entry {0}'),
191 "'" + rec
.data
.volid
+ "'");
192 msg
+= " " + gettext('This will permanently erase all data.');
196 getUrl: function(rec
) {
197 var storage
= storagesel
.getValue();
198 return '/nodes/' + nodename
+ '/storage/' + storage
+ '/content/' + rec
.data
.volid
;
200 callback: function() {
205 var config_btn
= Ext
.create('Proxmox.button.Button', {
206 text
: gettext('Show Configuration'),
209 enableFn: function(rec
) {
212 handler: function(b
, e
, rec
) {
213 var storage
= storagesel
.getValue();
218 var win
= Ext
.create('PVE.window.BackupConfig', {
219 volume
: rec
.data
.volid
,
220 pveSelNode
: me
.pveSelNode
,
230 overflowHandler
: 'scroller',
239 xtype
: 'proxmoxButton',
240 text
: gettext('Edit Notes'),
242 enableFn: function() {
243 let storageVal
= storagesel
.getValue();
244 let storage
= storagesel
246 .findRecord('storage', storageVal
, 0, false, true, true);
248 return storage
.data
.type
!== 'pbs';
252 handler: function() {
253 let volid
= sm
.getSelection()[0].data
.volid
;
254 var storage
= storagesel
.getValue();
255 Ext
.create('Proxmox.window.Edit', {
260 title
: gettext('Notes'),
261 url
: `/api2/extjs/nodes/${nodename}/storage/${storage}/content/${volid}`,
272 destroy
: () => reload(),
286 header
: gettext('Name'),
289 renderer
: PVE
.Utils
.render_storage_content
,
293 header
: gettext('Notes'),
296 renderer
: Ext
.htmlEncode
,
299 header
: gettext('Date'),
304 header
: gettext('Format'),
309 header
: gettext('Size'),
311 renderer
: Proxmox
.Utils
.format_size
,
315 header
: gettext('VMID'),
320 header
: gettext('Encrypted'),
321 dataIndex
: 'encrypted',
322 renderer
: PVE
.Utils
.render_backup_encryption
,
325 header
: gettext('Verify State'),
326 dataIndex
: 'verification',
327 renderer
: PVE
.Utils
.render_backup_verification
,