]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/BackupRestore.js
mail-proxy-relaying: add help to Default Relay
[pmg-gui.git] / js / BackupRestore.js
index c04fc35dea8fbcbe39ecaf066b34095ce636c03c..8f1c4f4407052aee40625173c77454fe0ee858af 100644 (file)
@@ -1,15 +1,98 @@
-/*global Proxmox*/
 Ext.define('pmg-backup-list', {
     extend: 'Ext.data.Model',
     fields: [
        'filename',
-       { type: 'integer', name: 'size' }
+       { type: 'integer', name: 'size' },
+       { type: 'date', dateFormat: 'timestamp', name: 'timestamp' },
+
     ],
     proxy: {
         type: 'proxmox',
-       url: "/api2/json/nodes/" + Proxmox.NodeName + "/backup"
+       url: "/api2/json/nodes/" + Proxmox.NodeName + "/backup",
     },
-    idProperty: 'filename'
+    idProperty: 'filename',
+});
+
+Ext.define('PMG.RestoreWindow', {
+    extend: 'Proxmox.window.Edit',
+    xtype: 'pmgRestoreWindow',
+    onlineHelp: 'chapter_pmgbackup',
+
+    showProgress: true,
+    title: gettext('Restore'),
+    isCreate: true,
+    method: 'POST',
+    submitText: gettext('Restore'),
+    fieldDefaults: {
+       labelWidth: 150,
+    },
+
+    initComponent: function() {
+       let me = this;
+
+       me.items = [
+           {
+               xtype: 'proxmoxcheckbox',
+               name: 'config',
+               fieldLabel: gettext('System Configuration'),
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               name: 'database',
+               value: 1,
+               uncheckedValue: 0,
+               fieldLabel: gettext('Rule Database'),
+               listeners: {
+                   change: function(field, value) {
+                       field.nextSibling('field[name=statistic]').setDisabled(!value);
+                   },
+               },
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               name: 'statistic',
+               fieldLabel: gettext('Statistic'),
+           },
+       ];
+
+       let restorePath;
+       if (me.filename) {
+           restorePath = `backup/${encodeURIComponent(me.filename)}`;
+       } else if (me.backup_time) {
+           restorePath = `pbs/${me.remote}/snapshot/${me.backup_id}/${me.backup_time}`;
+       } else {
+           throw "neither filename nor snapshot given";
+       }
+       me.url = `/nodes/${Proxmox.NodeName}/${restorePath}`;
+
+       me.callParent();
+    },
+});
+
+Ext.define('PMG.BackupWindow', {
+    extend: 'Proxmox.window.Edit',
+    xtype: 'pmgBackupWindow',
+    onlineHelp: 'chapter_pmgbackup',
+
+    showProgress: true,
+    title: gettext('Backup'),
+    isCreate: true,
+    method: 'POST',
+    submitText: gettext('Backup'),
+    fieldDefaults: {
+       labelWidth: 150,
+    },
+    showTaskViewer: true,
+    items: [
+       {
+           xtype: 'proxmoxcheckbox',
+           name: 'statistic',
+           value: 1,
+           uncheckedValue: 0,
+           fieldLabel: gettext('Include Statistics'),
+       },
+    ],
+
 });
 
 Ext.define('PMG.BackupRestore', {
@@ -22,76 +105,62 @@ Ext.define('PMG.BackupRestore', {
        xclass: 'Ext.app.ViewController',
 
        createBackup: function() {
-           var me = this.getView();
-           Proxmox.Utils.API2Request({
+           let view = this.getView();
+           Ext.create('PMG.BackupWindow', {
                url: "/nodes/" + Proxmox.NodeName + "/backup",
-               method: 'POST',
-               waitMsgTarget: me,
-               failure: function (response, opts) {
-                   Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-               },
-               success: function(response, opts) {
-                   var upid = response.result.data;
-
-                   var win = Ext.create('Proxmox.window.TaskViewer', {
-                       upid: upid
-                   });
-                   win.show();
-                   me.mon(win, 'close', function() { me.store.load(); });
-               }
-           });
+               taskDone: () => view.store.load(),
+           }).show();
        },
 
-       onAfterRemove: function(btn, res) {
-           var me = this.getView();
-           me.store.load();
+       onRestore: function() {
+           let view = this.getView();
+           let rec = view.getSelection()[0];
+
+           if (!(rec && rec.data && rec.data.filename)) {
+               return;
+           }
+
+           Ext.create('PMG.RestoreWindow', {
+               filename: rec.data.filename,
+           }).show();
        },
 
-       onFactoryDefaults: function() {
-           var me = this.getView();
-
-           Ext.Msg.confirm(
-               gettext('Confirm'),
-               gettext('Reset rule database to factory defaults?'),
-               function(button) {
-                   if (button !== 'yes') {
-                       return;
-                   }
-                   var url = '/config/ruledb';
-                   Proxmox.Utils.API2Request({
-                       url: '/config/ruledb',
-                       method: 'POST',
-                       waitMsgTarget: me,
-                       failure: function (response, opts) {
-                           Ext.Msg.alert(gettext('Error'), response.htmlStatus);
-                       }
-                   });
-               }
-           );
-       }
+       onAfterRemove: function(btn, res) {
+           let view = this.getView();
+           view.store.load();
+       },
     },
 
     tbar: [
        {
-           text: gettext('Backup'),
-           handler: 'createBackup'
+           text: gettext('Backup Now'),
+           handler: 'createBackup',
+       },
+       '-',
+       {
+           xtype: 'proxmoxButton',
+           text: gettext('Restore'),
+           handler: 'onRestore',
+           disabled: true,
        },
        {
            xtype: 'proxmoxStdRemoveButton',
            baseurl: '/nodes/' + Proxmox.NodeName + '/backup',
            reference: 'removeBtn',
            callback: 'onAfterRemove',
-           waitMsgTarget: true
+           waitMsgTarget: true,
        },
-       {
-           text: gettext('Factory Defaults'),
-           handler: 'onFactoryDefaults'
-       }
     ],
 
     store: {
        autoLoad: true,
-       model: 'pmg-backup-list'
+       model: 'pmg-backup-list',
+       sorters: [
+           {
+               property: 'timestamp',
+               direction: 'DESC',
+           },
+       ],
     },
 
     columns: [
@@ -99,18 +168,32 @@ Ext.define('PMG.BackupRestore', {
            header: gettext('Filename'),
            width: 300,
            sortable: true,
-           renderer: function(filename) {
-               return "<a href='" +
-                   "/api2/json/nodes/" + Proxmox.NodeName + "/backup/" + encodeURIComponent(filename) +
-               "'>" + Ext.htmlEncode(filename) + "</a>";
-           },
-           dataIndex: 'filename'
+           renderer: Ext.htmlEncode,
+           dataIndex: 'filename',
+       },
+       {
+           xtype: 'datecolumn',
+           header: gettext('Time'),
+           width: 150,
+           format: 'Y-m-d H:i',
+           sortable: true,
+           dataIndex: 'timestamp',
        },
        {
            header: gettext('Size'),
            width: 100,
            sortable: true,
-           dataIndex: 'size'
-       }
-    ]
+           renderer: Proxmox.Utils.render_size,
+           dataIndex: 'size',
+       },
+       {
+           header: gettext('Download'),
+           renderer: function(filename) {
+               return "<a class='download' href='" +
+                   "/api2/json/nodes/" + Proxmox.NodeName + "/backup/" + encodeURIComponent(filename) +
+               "'><i class='fa fa-fw fa-download'</i></a>";
+           },
+           dataIndex: 'filename',
+       },
+    ],
 });