]> git.proxmox.com Git - pmg-gui.git/blame - js/SenderStatistics.js
improve gettext usage
[pmg-gui.git] / js / SenderStatistics.js
CommitLineData
ff735274 1/*global Proxmox*/
de0ebd99
DC
2/*jslint confusion: true*/
3/* filter is a function and object */
0dd929ec 4Ext.define('PMG.SenderDetails', {
6d979e4e 5 extend: 'Ext.grid.GridPanel',
0dd929ec 6 xtype: 'pmgSenderDetails',
ff8a07c6 7
0dd929ec
DM
8 dockedItems: [
9 {
10 dock: 'top',
11 xtype: 'panel',
12 itemId: 'info',
13 bodyPadding: 10,
14 html: gettext('Please select a sender.')
15 }
16 ],
ff8a07c6 17
0dd929ec 18 disableSelection: true,
ff8a07c6 19
8e346db3
DM
20 plugins: 'gridfilters',
21
0dd929ec
DM
22 setUrl: function(url, title) {
23 var me = this;
97eeb9a8 24
0dd929ec 25 me.store.setUrl(url);
eaf3ebec 26 me.store.setRemoteFilter(url !== undefined);
5486028e
DM
27 Proxmox.Utils.setErrorMask(me, false);
28 me.store.reload();
0dd929ec
DM
29
30 var infopanel = me.getComponent('info');
31 if (title) {
32 infopanel.update(title);
33 } else {
34 infopanel.update(gettext('Please select a sender.'));
35 }
36 },
ff8a07c6 37
0dd929ec
DM
38 store: {
39 type: 'pmgStatStore',
c1a5d150 40 autoReload: false,
0dd929ec 41 remoteSort: true,
eaf3ebec 42 remoteFilter: false, // enabled dynamically
0dd929ec 43 fields: [
cc28836a 44 'receiver', 'virusinfo',
0dd929ec
DM
45 { type: 'integer', name: 'bytes' },
46 { type: 'boolean', name: 'blocked' },
47 { type: 'integer', name: 'spamlevel' },
48 { type: 'date', dateFormat: 'timestamp', name: 'time' }
49 ],
50 proxy: {
8e346db3
DM
51 type: 'pmgfilterproxy',
52 filterId: 'x-gridfilter-receiver',
0dd929ec
DM
53 sortParam: 'orderby'
54 },
55 sorters: [
56 {
57 property: 'time',
58 direction: 'ASC'
59 }
60 ]
61 },
62
63 columns: [
64 {
65 text: gettext('Receiver'),
66 renderer: Ext.htmlEncode,
67 flex: 1,
8e346db3 68 filter: { type: 'string' },
0dd929ec
DM
69 dataIndex: 'receiver'
70 },
71 {
72 header: gettext('Size') + ' (KB)',
73 renderer: function(v) { return Ext.Number.toFixed(v/1024, 0); },
74 dataIndex: 'bytes'
75 },
76 {
77 xtype: 'datecolumn',
78 header: gettext('Date'),
79 format: 'Y-m-d',
80 dataIndex: 'time'
81 },
82 {
83 xtype: 'datecolumn',
84 header: gettext('Time'),
bd69f90e 85 format: 'H:i:s',
0dd929ec 86 dataIndex: 'time'
771bd0b9 87 }
a61d685f
DM
88 ],
89
90 initComponent: function() {
91 var me = this;
92 me.callParent();
93
5486028e 94 Proxmox.Utils.monStoreErrors(me, me.store, true);
a61d685f 95 }
0dd929ec
DM
96});
97
98Ext.define('PMG.SenderList', {
99 extend: 'Ext.grid.GridPanel',
100 alias: 'widget.pmgSenderList',
101
e9837921
DM
102 title: gettext('Statistics') + ': ' + gettext('Sender') +
103 ' (' + gettext('Outgoing') +')',
0dd929ec
DM
104
105 multiColumnSort: true,
6d979e4e 106 plugins: 'gridfilters',
ff8a07c6 107
64fb657f 108 emptyText: gettext('No data in database'),
0dd929ec
DM
109 viewConfig: {
110 deferEmptyText: false
111 },
112
113 tbar: [ { xtype: 'pmgStatTimeSelector' } ],
114
6d979e4e
DM
115 store: {
116 type: 'pmgStatStore',
117 staturl: '/api2/json/statistics/sender',
118 remoteSort: true,
119 remoteFilter: true,
120 fields: [
121 'sender',
122 { type: 'integer', name: 'count' },
123 { type: 'integer', name: 'bytes' },
124 { type: 'integer', name: 'viruscount' }
125 ],
126 proxy: {
f4fedcee 127 type: 'pmgfilterproxy',
6d979e4e 128 sortParam: 'orderby',
f4fedcee 129 filterId: 'x-gridfilter-sender'
6d979e4e
DM
130 },
131 sorters: [
132 {
133 property: 'count',
134 direction: 'DESC'
97eeb9a8
DM
135 },
136 {
137 property: 'bytes',
138 direction: 'DESC'
139 },
140 {
141 property: 'sender',
142 direction: 'ASC'
6d979e4e
DM
143 }
144 ]
145 },
ff8a07c6 146
6d979e4e
DM
147 columns: [
148 {
149 text: gettext('Sender'),
150 flex: 1,
0dd929ec 151 renderer: Ext.htmlEncode,
6d979e4e
DM
152 dataIndex: 'sender',
153 filter: {
154 type: 'string',
155 itemDefaults: {
0dd929ec 156 // any Ext.form.field.Text configs accepted
6d979e4e 157 }
0dd929ec 158 }
6d979e4e
DM
159 },
160 {
161 text: gettext('Count'),
16e23ef4
DM
162 columns: [
163 {
164 text: gettext('Mail'),
165 dataIndex: 'count'
166 },
167 {
168 header: gettext('Virus'),
169 dataIndex: 'viruscount'
170 }
171 ]
6d979e4e
DM
172 },
173 {
174 text: gettext('Size') + ' (KB)',
175 dataIndex: 'bytes',
176 renderer: function(v) {
177 return Ext.Number.toFixed(v/1024, 0);
178 }
179 }
0dd929ec
DM
180 ],
181
182 initComponent: function() {
183 var me = this;
184 me.callParent();
185
5486028e 186 Proxmox.Utils.monStoreErrors(me, me.store, true);
0dd929ec
DM
187 }
188});
189
190Ext.define('PMG.SenderStatistics', {
191 extend: 'Ext.panel.Panel',
192 xtype: 'pmgSenderStatistics',
193
194 layout: 'border',
195 border: false,
196 defaults: {
771bd0b9 197 border: false
0dd929ec
DM
198 },
199
200 controller: {
201 xclass: 'Ext.app.ViewController',
202
203 selectionChange: function(grid, selected, eOpts) {
204 var details = this.lookupReference('details');
205 if (selected.length > 0) {
206 var sender = selected[0].data.sender;
207 var url = "/api2/json/statistics/sender/" +
208 encodeURIComponent(sender);
209 details.setUrl(url, '<b>' + gettext('Sender') + ':</b> ' + Ext.htmlEncode(sender));
210 } else {
211 details.setUrl();
212 }
213 }
214 },
215
216 items: [
217 {
218 xtype: 'pmgSenderList',
219 multiColumnSort: true,
220 region: 'center',
221 layout: 'fit',
222 flex: 1,
223
771bd0b9 224 listeners: { selectionchange: 'selectionChange' }
0dd929ec
DM
225 },
226 {
227 xtype: 'pmgSenderDetails',
228 region: 'east',
229 reference: 'details',
230 split: true,
231 flex: 1
232 }
6d979e4e
DM
233 ]
234});