]> git.proxmox.com Git - pmg-gui.git/blob - js/SpamQuarantine.js
improve spam list table layout
[pmg-gui.git] / js / SpamQuarantine.js
1 Ext.define('pmg-spam-archive', {
2 extend: 'Ext.data.Model',
3 fields: [
4 { type: 'number', name: 'spamavg' },
5 { type: 'integer', name: 'count' },
6 { type: 'date', dateFormat: 'timestamp', name: 'day' }
7 ],
8 proxy: {
9 type: 'proxmox',
10 url: "/api2/json/quarantine/spam"
11 },
12 idProperty: 'day'
13 });
14
15 Ext.define('PMG.SpamArchive', {
16 extend: 'Ext.grid.GridPanel',
17 xtype: 'pmgSpamArchive',
18
19 controller: {
20
21 xclass: 'Ext.app.ViewController',
22
23 init: function(view) {
24 view.store.load({
25 callback: function() {
26 view.getSelectionModel().select(0);
27 }
28 });
29 }
30 },
31
32 store: {
33 model: 'pmg-spam-archive'
34 },
35
36 columns: [
37 {
38 xtype: 'datecolumn',
39 header: gettext('Date'),
40 format: 'Y-m-d',
41 dataIndex: 'day',
42 flex: 1
43 },
44 {
45 header: gettext('Count'),
46 dataIndex: 'count',
47 flex: 1
48 },
49 {
50 header: gettext('Spam level'),
51 dataIndex: 'spamavg',
52 flex: 1
53 }
54 ]
55 });
56
57 Ext.define('pmg-spam-list', {
58 extend: 'Ext.data.Model',
59 fields: [ 'id', 'envelope_sender', 'from', 'sender', 'receiver', 'subject',
60 { type: 'number', name: 'spamlevel' },
61 { type: 'integer', name: 'bytes' },
62 { type: 'date', dateFormat: 'timestamp', name: 'time' }
63 ],
64 proxy: {
65 type: 'proxmox',
66 },
67 idProperty: 'id'
68 });
69
70 Ext.define('PMG.SpamList', {
71 extend: 'Ext.grid.GridPanel',
72 xtype: 'pmgSpamList',
73
74 setDay: function(day) {
75 var me = this;
76
77 me.setTitle(Ext.Date.format(day, "F j Y"));
78 me.store.load({
79 url: "/api2/json/quarantine/spam/" + (day.getTime() / 1000)
80 });
81 },
82
83 store: {
84 model: 'pmg-spam-list',
85 },
86
87 tbar: [
88 {
89 text: gettext('Whitelist')
90 },
91 {
92 text: gettext('Blacklist')
93 },
94 {
95 text: gettext('Deliver')
96 },
97 {
98 text: gettext('Delete')
99 }
100 ],
101
102 columns: [
103 {
104 header: gettext('Sender/Subject'),
105 dataIndex: 'subject',
106 renderer: function(value, metaData, rec) {
107 var subject = Ext.htmlEncode(value);
108 var from = Ext.htmlEncode(rec.data.from);
109 var sender = Ext.htmlEncode(rec.data.sender);
110 if (sender) {
111 from = Ext.String.format(gettext("{0} on behalf of {1}"),
112 sender, from);
113 }
114 return '<small>' + from + '</small><br>' + subject;
115 },
116 flex: 1
117 },
118 {
119 header: gettext('Level'),
120 dataIndex: 'spamlevel'
121 },
122 {
123 header: gettext('Size (KB)'),
124 renderer: function(v) { return Ext.Number.toFixed(v/1024, 0); },
125 dataIndex: 'bytes'
126 },
127 {
128 xtype: 'datecolumn',
129 header: gettext('Arrival Time'),
130 dataIndex: 'time',
131 format: 'H:m:s'
132 }
133 ]
134 });
135
136 Ext.define('PMG.SpamQuarantine', {
137 extend: 'Ext.container.Container',
138 xtype: 'pmgSpamQuarantine',
139
140 border: false,
141 layout: 'border',
142
143 defaults: { border: false },
144
145 controller: {
146
147 xclass: 'Ext.app.ViewController',
148
149 init: function(view) {
150 },
151
152 onSelectDay: function() {
153 var view = this.getView();
154
155 var grid = this.lookupReference('archive');
156 var rec = grid.selModel.getSelection()[0];
157
158 if (!rec || !rec.data || !rec.data.day) return;
159
160 var spamlist = this.lookupReference('spamlist');
161 spamlist.setDay(rec.data.day);
162 },
163
164 onSelectMail: function() {
165 var spamlist = this.lookupReference('spamlist');
166 var rec = spamlist.selModel.getSelection()[0];
167
168 var preview = this.lookupReference('preview');
169
170 if (!rec || !rec.data || !rec.data.id) {
171 preview.update('');
172 return;
173 }
174
175 var url = '/api2/htmlmail/quarantine/content?id=' + rec.data.id;
176 preview.update("<iframe frameborder=0 width=100% height=100% src='" + url +"'></iframe>");
177 },
178 },
179
180 items: [
181 {
182 xtype: 'pmgSpamArchive',
183 reference: 'archive',
184 region: 'west',
185 width: 320,
186 split: true,
187
188 listeners: {
189 selectionChange: 'onSelectDay'
190 }
191 },
192 {
193 xtype: 'panel',
194 region: 'center',
195 layout: { type: 'vbox', align: 'stretch' },
196 items: [
197 {
198 xtype: 'pmgSpamList',
199 reference: 'spamlist',
200 height: 300,
201 listeners: {
202 selectionChange: 'onSelectMail'
203 }
204 },
205 {
206 split: true,
207 flex: 1,
208 reference: 'preview',
209 }
210 ]
211 }
212 ]
213 });