]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/MailTracker.js
MailTracker.js: set start of next day for end-time
[pmg-gui.git] / js / MailTracker.js
index c5151998368a60da95c2632eac691c85662b4894..76fe949e5d1971996a247124c1d6010e48125eb9 100644 (file)
@@ -1,3 +1,4 @@
+/*global Proxmox*/
 Ext.define('pmg-mail-tracker', {
     extend: 'Ext.data.Model',
     fields: [
@@ -8,7 +9,9 @@ Ext.define('pmg-mail-tracker', {
     proxy: {
        type: 'proxmox'
     },
-    idProperty: 'id'
+    // do not use field 'id', because "id/to" is the unique Id
+    // this way we display an entry for each receiver
+    idProperty: 'none'
 });
 
 
@@ -95,17 +98,28 @@ Ext.define('PMG.MailTrackerFilter', {
                    value: (function() {
                        var now = new Date();
                        return new Date(now.getTime() - 3600000);
-                   })(),
+                   }()),
                    xtype: 'promxoxDateTimeField'
                },
                {
                    fieldLabel: gettext('End'),
                    reference: 'endtime',
                    listeners: { change: 'onFilterChange' },
+                   value: (function() {
+                       var now = new Date();
+                       var tomorrow = new Date();
+                       tomorrow.setDate(now.getDate()+1);
+                       tomorrow.setHours(0);
+                       tomorrow.setMinutes(0);
+                       tomorrow.setSeconds(0);
+                       return tomorrow;
+                   }()),
                    xtype: 'promxoxDateTimeField'
                },
                {
-                   layout: 'hbox',
+                   layout: {
+                       type: 'hbox'
+                   },
                    border: false,
                    items: [
                        {
@@ -144,7 +158,9 @@ Ext.define('PMG.MaiLogWindow', {
     height: 400,
     scrollable: true,
 
-    layout: 'auto',
+    layout: {
+       type: 'auto'
+    },
     modal: true,
     bodyPadding: 5,
 
@@ -202,10 +218,24 @@ Ext.define('PMG.MailTracker', {
     border: false,
 
     emptyText: gettext('No data in database.'),
+    disableSelection: true,
+
     viewConfig: {
-       deferEmptyText: false
+       deferEmptyText: false,
+       enableTextSelection: true,
+       getRowClass: function(record, index) {
+           var status = record.data.rstatus || record.data.dstatus;
+           return PMG.Utils.mail_status_map[status];
+       }
     },
 
+    plugins: [
+       {
+           ptype: 'rowexpander',
+           rowBodyTpl: '<p class="logs">{logs}</p>'
+       }
+    ],
+
     store: {
        autoDestroy: true,
        model: 'pmg-mail-tracker'
@@ -235,22 +265,36 @@ Ext.define('PMG.MailTracker', {
            });
        },
 
-       showDetails: function() {
+       showDetails: function(rowNode, record) {
            var view = this.getView();
-           var sm = view.getSelectionModel();
-           var rec = sm.getSelection()[0];
-           if (!rec) {
-               return;
-           }
 
            var params = view.store.proxy.getExtraParams();
 
-           var win = Ext.create('PMG.MaiLogWindow', {
-               starttime: params.starttime,
-               endtime: params.endtime,
-               logid: rec.data.id
+           Proxmox.Utils.API2Request({
+               method: 'GET',
+               params: { starttime: params.starttime, endtime: params.endtime },
+               url: '/nodes/' + Proxmox.NodeName + '/tracker/' + record.data.id,
+               waitMsgTarget: view,
+               failure: function(response, opts) {
+                   record.set('logs',gettext('Error') + " " + response.htmlStatus);
+               },
+               success: function(response, opts) {
+                   var data = response.result.data;
+                   var logs = "";
+
+                   Ext.Array.each(data.logs, function(line) {
+                       logs += Ext.htmlEncode(line) + "<br>";
+                   });
+
+                   record.set('logs', logs);
+               }
            });
-           win.show();
+       },
+
+       control: {
+           'gridview': {
+               expandbody: 'showDetails'
+           }
        }
     },
 
@@ -282,30 +326,37 @@ Ext.define('PMG.MailTracker', {
        {
            header: gettext('From'),
            flex: 1,
-           dataIndex: 'from'
+           dataIndex: 'from',
+           renderer: Ext.htmlEncode
        },
        {
            header: gettext('To'),
            flex: 1,
-           dataIndex: 'to'
+           dataIndex: 'to',
+           renderer: Ext.htmlEncode
        },
        {
            header: gettext('Status'),
            width: 150,
            renderer: function(v, metaData, rec) {
+               var returntext = 'unknown';
+               var icon = 'question-circle';
                var rstatus = rec.data.rstatus;
                if (v !== undefined && v !== '') {
-                   vtext = PMG.Utils.mail_status_map[v] || v;
+                   var vtext = PMG.Utils.mail_status_map[v] || v;
+                   icon = v;
                    if (rstatus !== undefined && rstatus !== '') {
-                       rtext = PMG.Utils.mail_status_map[rstatus] || rstatus;
-                       return vtext + '/' + rtext;
-                   }
-                   if (rec.data.qid !== undefined) {
-                       return 'queued/' + vtext;
+                       var rtext = PMG.Utils.mail_status_map[rstatus] || rstatus;
+                       returntext = vtext + '/' + rtext;
+                       icon = rstatus;
+                   } else if (rec.data.qid !== undefined) {
+                       returntext = 'queued/' + vtext;
+                   } else {
+                       returntext = vtext;
                    }
-                   return vtext;
                }
-               return 'unknown';
+
+               return PMG.Utils.format_status_icon(icon) + returntext;
            },
            dataIndex: 'dstatus'
        },
@@ -318,20 +369,18 @@ Ext.define('PMG.MailTracker', {
            header: 'MSGID',
            width: 300,
            hidden: true,
-           dataIndex: 'msgid'
+           dataIndex: 'msgid',
+           renderer: Ext.htmlEncode
        },
        {
            header: gettext('Client'),
            width: 200,
            hidden: true,
-           dataIndex: 'client'
+           dataIndex: 'client',
+           renderer: Ext.htmlEncode
        }
     ],
 
-    listeners: {
-       itemdblclick: 'showDetails',
-    },
-
     initComponent: function() {
        var me = this;