]> git.proxmox.com Git - pmg-gui.git/commitdiff
Transport.js: add editor for transport map
authorDietmar Maurer <dietmar@proxmox.com>
Sun, 26 Feb 2017 10:39:32 +0000 (11:39 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Sun, 26 Feb 2017 10:39:32 +0000 (11:39 +0100)
js/MailProxyConfiguration.js
js/Makefile
js/Transport.js [new file with mode: 0644]

index 7a52f8346f923863d303ad9caaa9e931a3443ea6..fe582485fd7bf21ca8934d6124c2d2501026d6bf 100644 (file)
@@ -23,7 +23,7 @@ Ext.define('PMG.MailProxyConfiguration', {
        },
        {
             title: gettext('Transports'),
-           html: "Transports"
+           xtype: 'pmgTransport'
        },
        {
             title: gettext('Networks'),
index d062ec8c969e8ed18f21fa9a7fec80a7324dde80..8d3bf6a883e5ee9e84b19860404f40abc98f7da2 100644 (file)
@@ -7,8 +7,9 @@ JSSRC=                                                  \
        MailProxyRelaying.js                            \
        MailProxyPorts.js                               \
        MailProxyOptions.js                             \
-       MailProxyConfiguration.js                       \
+       Transport.js                                    \
        RelayDomains.js                                 \
+       MailProxyConfiguration.js                       \
        ConfigPanel.js                                  \
        Workspace.js
 
diff --git a/js/Transport.js b/js/Transport.js
new file mode 100644 (file)
index 0000000..8256fd7
--- /dev/null
@@ -0,0 +1,197 @@
+Ext.define('pmg-transport', {
+    extend: 'Ext.data.Model',
+    fields: [ 'domain', 'host', { name: 'port', type: 'integer' },
+             { name: 'use_mx', type: 'boolean' }, 'comment' ],
+    proxy: {
+        type: 'proxmox',
+       url: "/api2/json/config/transport"
+    },
+    idProperty: 'domain'
+});
+
+Ext.define('PMG.Transport', {
+    extend: 'Ext.grid.GridPanel',
+    alias: ['widget.pmgTransport'],
+
+    initComponent : function() {
+       var me = this;
+
+       var store = new Ext.data.Store({
+           model: 'pmg-transport',
+           sorters: {
+               property: 'domain',
+               order: 'DESC'
+           }
+       });
+
+        var reload = function() {
+            store.load();
+        };
+
+       me.selModel = Ext.create('Ext.selection.RowModel', {});
+
+       var remove_btn = Ext.createWidget('proxmoxButton', {
+           text: gettext('Remove'),
+           disabled: true,
+           selModel: me.selModel,
+           confirmMsg: function (rec) {
+               return Ext.String.format(
+                   gettext('Are you sure you want to remove entry {0}'),
+                   "'" + rec.data.domain + "'");
+           },
+           handler: function(btn, event, rec) {
+               Proxmox.Utils.API2Request({
+                   url: '/config/transport/' + rec.data.domain,
+                   method: 'DELETE',
+                   waitMsgTarget: me,
+                   callback: function() {
+                       reload();
+                   },
+                   failure: function (response, opts) {
+                       Ext.Msg.alert(gettext('Error'), response.htmlStatus);
+                   }
+               });
+           }
+       });
+
+       var common_properties = [
+           {
+               xtype: 'textfield',
+               name: 'host',
+               fieldLabel: gettext("Host")
+           },
+           {
+               xtype: 'proxmoxintegerfield',
+               name: 'port',
+               value: 25,
+               minValue: 1,
+               maxValue: 65535,
+               fieldLabel: gettext("Port")
+           },
+           {
+               xtype: 'proxmoxcheckbox',
+               name: 'use_mx',
+               checked: true,
+               uncheckedValue: 0,
+               fieldLabel: gettext("Use MX")
+           },
+           {
+               xtype: 'textfield',
+               name: 'comment',
+               fieldLabel: gettext("Comment")
+           }
+       ];
+
+       var edit_properties = common_properties.slice();
+       edit_properties.unshift({
+           xtype: 'displayfield',
+           name: 'domain',
+           fieldLabel: gettext("Relay Domain")
+       });
+
+       var create_properties = common_properties.slice();
+       create_properties.unshift({
+           xtype: 'proxmoxtextfield',
+           name: 'domain',
+           fieldLabel: gettext("Relay Domain")
+       });
+
+       var run_editor = function() {
+           var rec = me.selModel.getSelection()[0];
+           if (!rec) {
+               return;
+           }
+
+           var config = {
+               url: "/api2/extjs/config/transport/" + rec.data.domain,
+               method: 'PUT',
+               subject: gettext("Transport"),
+               items: edit_properties
+           };
+
+           var win = Ext.createWidget('proxmoxWindowEdit', config);
+
+           win.load();
+           win.on('destroy', reload);
+           win.show();
+       };
+
+       var tbar = [
+            {
+               xtype: 'proxmoxButton',
+               text: gettext('Edit'),
+               disabled: true,
+               selModel: me.selModel,
+               handler: run_editor
+            },
+            {
+               text: gettext('Create'),
+               handler: function() {
+                   var config = {
+                       method: 'POST',
+                       url: "/api2/extjs/config/transport",
+                       create: true,
+                       subject: gettext("Transport"),
+                       items: create_properties
+                   };
+
+                   var win = Ext.createWidget('proxmoxWindowEdit', config);
+
+                   win.on('destroy', reload);
+                   win.show();
+               }
+            },
+           remove_btn
+        ];
+
+       Proxmox.Utils.monStoreErrors(me, store);
+
+       Ext.apply(me, {
+           store: store,
+           tbar: tbar,
+           viewConfig: {
+               trackOver: false
+           },
+           columns: [
+               {
+                   header: gettext('Relay Domain'),
+                   width: 200,
+                   sortable: true,
+                   dataIndex: 'domain'
+               },
+               {
+                   header: gettext('Host'),
+                   width: 200,
+                   sortable: true,
+                   dataIndex: 'host'
+               },
+               {
+                   header: gettext('Port'),
+                   width: 80,
+                   sortable: false,
+                   dataIndex: 'port'
+               },
+               {
+                   header: gettext('Use MX'),
+                   width: 80,
+                   renderer: Proxmox.Utils.format_boolean,
+                   sortable: false,
+                   dataIndex: 'use_mx'
+               },
+               {
+                   header: gettext('Comment'),
+                   sortable: false,
+                   renderer: Ext.String.htmlEncode,
+                   dataIndex: 'comment',
+                   flex: 1
+               }
+           ],
+           listeners: {
+               itemdblclick: run_editor,
+               activate: reload
+           }
+       });
+
+       me.callParent();
+    }
+});