]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/SenderStatistics.js
attachement grid: set configs used on all use-sites as defaults
[pmg-gui.git] / js / SenderStatistics.js
index ee1a9aae4bdccdd8c3cf4fe222075a0704680416..830f5fb2d723bfa2a82580c084322c88f431dbef 100644 (file)
-Ext.define('PMG.SenderStatistics', {
+Ext.define('PMG.SenderDetails', {
     extend: 'Ext.grid.GridPanel',
-    xtype: 'pmgSenderStatistics',
+    xtype: 'pmgSenderDetails',
+
+    dockedItems: [
+       {
+           dock: 'top',
+           xtype: 'panel',
+           itemId: 'info',
+           bodyPadding: 10,
+           html: gettext('Please select a sender.'),
+       },
+    ],
+
+    disableSelection: true,
+
+    plugins: 'gridfilters',
+
+    setUrl: function(url, extraparam, title) {
+       var me = this;
+
+       me.store.setUrl(url, extraparam);
+       me.store.setRemoteFilter(url !== undefined);
+       Proxmox.Utils.setErrorMask(me, false);
+       me.store.reload();
+
+       var infopanel = me.getComponent('info');
+       if (title) {
+           infopanel.update(title);
+       } else {
+           infopanel.update(gettext('Please select a sender.'));
+       }
+    },
+
+    store: {
+       type: 'pmgStatStore',
+       autoReload: false,
+       remoteSort: true,
+       remoteFilter: false, // enabled dynamically
+       fields: [
+           'receiver', 'virusinfo',
+           { type: 'integer', name: 'bytes' },
+           { type: 'boolean', name: 'blocked' },
+           { type: 'integer', name: 'spamlevel' },
+            { type: 'date', dateFormat: 'timestamp', name: 'time' },
+       ],
+       proxy: {
+           type: 'pmgfilterproxy',
+           filterId: 'x-gridfilter-receiver',
+           sortParam: 'orderby',
+       },
+       sorters: [
+           {
+               property: 'time',
+               direction: 'ASC',
+           },
+       ],
+    },
+
+    columns: [
+       {
+           text: gettext('Receiver'),
+           renderer: Ext.htmlEncode,
+           flex: 1,
+           filter: { type: 'string' },
+           dataIndex: 'receiver',
+       },
+       {
+           header: gettext('Size') + ' (KB)',
+           renderer: function(v) { return Ext.Number.toFixed(v/1024, 0); },
+           dataIndex: 'bytes',
+       },
+       {
+           xtype: 'datecolumn',
+           header: gettext('Date'),
+           format: 'Y-m-d',
+           dataIndex: 'time',
+       },
+       {
+           xtype: 'datecolumn',
+           header: gettext('Time'),
+           format: 'H:i:s',
+           dataIndex: 'time',
+       },
+    ],
+
+    initComponent: function() {
+       var me = this;
+       me.callParent();
 
-    title: gettext('Statistics') + ': ' + gettext('Sender'),
+       Proxmox.Utils.monStoreErrors(me, me.store, true);
+    },
+});
 
-    tbar: [ { xtype: 'pmgStatTimeSelector' } ],
+Ext.define('PMG.SenderList', {
+    extend: 'Ext.grid.GridPanel',
+    alias: 'widget.pmgSenderList',
 
-    layout: 'fit',
+    title: gettext('Statistics') + ': ' + gettext('Sender') +
+       ' (' + gettext('Outgoing') +')',
 
+    multiColumnSort: true,
     plugins: 'gridfilters',
 
+    emptyText: gettext('No data in database'),
+    viewConfig: {
+       deferEmptyText: false,
+    },
+
+    tbar: [{ xtype: 'pmgStatTimeSelector' }],
+
     store: {
        type: 'pmgStatStore',
        staturl: '/api2/json/statistics/sender',
@@ -19,61 +118,114 @@ Ext.define('PMG.SenderStatistics', {
            'sender',
            { type: 'integer', name: 'count' },
            { type: 'integer', name: 'bytes' },
-           { type: 'integer', name: 'viruscount' }
+           { type: 'integer', name: 'viruscount' },
        ],
        proxy: {
-           type: 'proxmox',
+           type: 'pmgfilterproxy',
            sortParam: 'orderby',
-           getParams: function(operation) {
-               var me = this, i;
-               if (!operation.isReadOperation) {
-                   return {};
-               }
-               var params = Ext.data.RestProxy.prototype.getParams.apply(me, arguments);
-
-               var filters = operation.getFilters() || [];
-               for (i = 0; i < filters.length; i++) {
-                   filter = filters[i];
-                   if (filter.config.id === 'x-gridfilter-sender') {
-                       var v = filter.getValue();
-                       if (v !== undefined && v !== '') {
-                           params.filter = v;
-                       }
-                   }
-               }
-               return params;
-           }
+           filterId: 'x-gridfilter-sender',
        },
        sorters: [
            {
                property: 'count',
-               direction: 'DESC'
-           }
-       ]
+               direction: 'DESC',
+           },
+           {
+               property: 'bytes',
+               direction: 'DESC',
+           },
+           {
+               property: 'sender',
+               direction: 'ASC',
+           },
+       ],
     },
 
     columns: [
        {
            text: gettext('Sender'),
            flex: 1,
+           renderer: Ext.htmlEncode,
            dataIndex: 'sender',
            filter: {
                type: 'string',
                itemDefaults: {
-                    // any Ext.form.field.Text configs accepted
-               }
-            }
+                   // any Ext.form.field.Text configs accepted
+               },
+           },
        },
        {
            text: gettext('Count'),
-           dataIndex: 'count'
+           columns: [
+               {
+                   text: gettext('Mail'),
+                   dataIndex: 'count',
+               },
+               {
+                   header: gettext('Virus'),
+                   dataIndex: 'viruscount',
+               },
+           ],
        },
        {
            text: gettext('Size') + ' (KB)',
            dataIndex: 'bytes',
            renderer: function(v) {
                return Ext.Number.toFixed(v/1024, 0);
+           },
+       },
+    ],
+
+    initComponent: function() {
+       var me = this;
+       me.callParent();
+
+       Proxmox.Utils.monStoreErrors(me, me.store, true);
+    },
+});
+
+Ext.define('PMG.SenderStatistics', {
+    extend: 'Ext.panel.Panel',
+    xtype: 'pmgSenderStatistics',
+
+    layout: 'border',
+    border: false,
+    defaults: {
+       border: false,
+    },
+
+    controller: {
+       xclass: 'Ext.app.ViewController',
+
+       selectionChange: function(grid, selected, eOpts) {
+           var details = this.lookupReference('details');
+           if (selected.length > 0) {
+               var sender = selected[0].data.sender;
+               var extraparam = { address: sender, type: 'sender' };
+               var url = "/api2/json/statistics/detail";
+               details.setUrl(url, extraparam, '<b>' + gettext('Sender') + ':</b> ' + Ext.htmlEncode(sender));
+           } else {
+               details.setUrl();
            }
-       }
-    ]
+       },
+    },
+
+    items: [
+       {
+           xtype: 'pmgSenderList',
+           multiColumnSort: true,
+           region: 'center',
+           layout: 'fit',
+           flex: 1,
+
+           listeners: { selectionchange: 'selectionChange' },
+       },
+       {
+           xtype: 'pmgSenderDetails',
+           region: 'east',
+           reference: 'details',
+           split: true,
+           flex: 1,
+       },
+    ],
 });