+/*global Proxmox*/
Ext.define('pmg-mail-tracker', {
extend: 'Ext.data.Model',
fields: [
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'
});
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: [
{
height: 400,
scrollable: true,
- layout: 'auto',
+ layout: {
+ type: 'auto'
+ },
modal: true,
bodyPadding: 5,
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'
});
},
- 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'
+ }
}
},
{
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'
},
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;