]> git.proxmox.com Git - pmg-gui.git/blame - js/SpamQuarantine.js
spam info grid: code cleanups
[pmg-gui.git] / js / SpamQuarantine.js
CommitLineData
d9c3552a
DM
1Ext.define('pmg-spam-archive', {
2 extend: 'Ext.data.Model',
3 fields: [
4 { type: 'number', name: 'spamavg' },
5 { type: 'integer', name: 'count' },
c87d46fb 6 { type: 'date', dateFormat: 'timestamp', name: 'day' },
d9c3552a
DM
7 ],
8 proxy: {
9 type: 'proxmox',
c87d46fb 10 url: "/api2/json/quarantine/spam",
d9c3552a 11 },
c87d46fb 12 idProperty: 'day',
d9c3552a
DM
13});
14
d9c3552a
DM
15Ext.define('pmg-spam-list', {
16 extend: 'Ext.data.Model',
c87d46fb 17 fields: ['id', 'envelope_sender', 'from', 'sender', 'receiver', 'subject',
af5aba0c 18 { type: 'number', name: 'spamlevel' },
d9c3552a 19 { type: 'integer', name: 'bytes' },
c96a22cb
DC
20 { type: 'date', dateFormat: 'timestamp', name: 'time' },
21 {
22 type: 'string',
23 name: 'day',
24 convert: function(v, rec) {
25 return Ext.Date.format(rec.get('time'), 'Y-m-d');
c87d46fb
TL
26 }, depends: ['time'],
27 },
d9c3552a
DM
28 ],
29 proxy: {
30 type: 'proxmox',
c87d46fb 31 url: "/api2/json/quarantine/spam",
d9c3552a 32 },
c87d46fb 33 idProperty: 'id',
d9c3552a
DM
34});
35
e66c888b
SI
36Ext.define('PMG.SpamQuarantineController', {
37 extend: 'PMG.controller.QuarantineController',
38 xtype: 'pmgSpamQuarantineController',
39 alias: 'controller.spamquarantine',
0277bfeb 40
e66c888b
SI
41 updatePreview: function(raw, rec) {
42 let me = this;
43 me.lookupReference('spam').setDisabled(false);
d9c3552a 44
e66c888b
SI
45 me.callParent(arguments);
46 },
0277bfeb 47
e66c888b
SI
48 multiSelect: function(selection) {
49 let me = this;
50 let spam = me.lookupReference('spam');
51 spam.setDisabled(true);
52 spam.setPressed(false);
53 me.lookupReference('spaminfo').setVisible(false);
54 me.callParent(selection);
55 },
207471c0 56
e66c888b
SI
57 toggleSpamInfo: function(btn) {
58 var grid = this.lookupReference('spaminfo');
59 grid.setVisible(!grid.isVisible());
60 },
d9c3552a 61
e66c888b
SI
62 openContextMenu: function(table, record, tr, index, event) {
63 event.stopEvent();
64 let me = this;
65 let list = me.lookup('list');
66 Ext.create('PMG.menu.SpamContextMenu', {
67 callback: action => me.doAction(action, list.getSelection()),
68 }).showAt(event.getXY());
69 },
c96a22cb 70
e66c888b
SI
71 keyPress: function(table, record, item, index, event) {
72 var me = this;
73 var list = me.lookup('list');
74 var key = event.getKey();
75 var action = '';
76 switch (key) {
77 case event.DELETE:
78 case 127:
79 action = 'delete';
80 break;
81 case Ext.event.Event.D:
82 case Ext.event.Event.D + 32:
83 action = 'deliver';
84 break;
85 case Ext.event.Event.W:
86 case Ext.event.Event.W + 32:
87 action = 'whitelist';
88 break;
89 case Ext.event.Event.B:
90 case Ext.event.Event.B + 32:
91 action = 'blacklist';
92 break;
93 }
94
95 if (action !== '') {
96 me.doAction(action, list.getSelection());
97 }
98 },
c96a22cb 99
e66c888b
SI
100 init: function(view) {
101 this.lookup('list').cselect = view.cselect;
102 },
d42f85b8 103
e66c888b
SI
104 control: {
105 'button[reference=raw]': {
106 click: 'toggleRaw',
d42f85b8 107 },
e66c888b
SI
108 'button[reference=spam]': {
109 click: 'toggleSpamInfo',
c96a22cb 110 },
e66c888b 111 'pmgQuarantineList': {
e66c888b
SI
112 itemkeypress: 'keyPress',
113 rowcontextmenu: 'openContextMenu',
d9c3552a 114 },
e66c888b
SI
115 },
116});
c96a22cb 117
e66c888b
SI
118Ext.define('PMG.SpamQuarantine', {
119 extend: 'Ext.container.Container',
120 xtype: 'pmgSpamQuarantine',
8e89b895 121
e66c888b
SI
122 border: false,
123 layout: { type: 'border' },
c627f092 124
e66c888b 125 defaults: { border: false },
0b9c0528 126
e66c888b
SI
127 // from mail link
128 cselect: undefined,
0b9c0528 129
e66c888b
SI
130 viewModel: {
131 parent: null,
132 data: {
133 mailid: '',
207471c0 134 },
e66c888b
SI
135 formulas: {
136 downloadMailURL: get => '/api2/json/quarantine/download?mailid=' + encodeURIComponent(get('mailid')),
c87d46fb 137 },
d9c3552a 138 },
e66c888b 139 controller: 'spamquarantine',
d9c3552a 140
0277bfeb
DM
141 items: [
142 {
56b4528f 143 title: gettext('Spam Quarantine'),
2d1f7824 144 xtype: 'pmgQuarantineList',
62651172 145 selModel: 'checkboxmodel',
2d1f7824
DC
146 emailSelection: true,
147 reference: 'list',
d9c3552a 148 region: 'west',
c96a22cb 149 width: 500,
d9c3552a 150 split: true,
c96a22cb 151 collapsible: false,
2d1f7824
DC
152 store: {
153 model: 'pmg-spam-list',
154 groupField: 'day',
155 groupDir: 'DESC',
156 sorters: [{
157 property: 'time',
c87d46fb
TL
158 direction: 'DESC',
159 }],
2d1f7824
DC
160 },
161
162 columns: [
163 {
164 header: gettext('Sender/Subject'),
165 dataIndex: 'subject',
cd150758 166 renderer: PMG.Utils.render_sender,
c87d46fb 167 flex: 1,
2d1f7824
DC
168 },
169 {
170 header: gettext('Score'),
171 dataIndex: 'spamlevel',
172 align: 'right',
c87d46fb 173 width: 70,
2d1f7824
DC
174 },
175 {
176 header: gettext('Size') + ' (KB)',
2cc13fbc 177 renderer: v => Ext.Number.toFixed(v/1024, 0),
2d1f7824
DC
178 dataIndex: 'bytes',
179 align: 'right',
c87d46fb 180 width: 90,
2d1f7824
DC
181 },
182 {
183 header: gettext('Date'),
184 dataIndex: 'day',
c87d46fb 185 hidden: true,
2d1f7824
DC
186 },
187 {
188 xtype: 'datecolumn',
189 header: gettext('Time'),
190 dataIndex: 'time',
c87d46fb
TL
191 format: 'H:i:s',
192 },
193 ],
0277bfeb
DM
194 },
195 {
c96a22cb 196 title: gettext('Selected Mail'),
ea07c9aa 197 border: false,
d9c3552a 198 region: 'center',
60a9d6fd 199 layout: 'fit',
c96a22cb
DC
200 split: true,
201 reference: 'preview',
202 disabled: true,
2d1f7824
DC
203 dockedItems: [
204 {
205 xtype: 'toolbar',
206 dock: 'top',
207 items: [
208 {
209 xtype: 'button',
210 reference: 'raw',
211 text: gettext('Toggle Raw'),
212 enableToggle: true,
c87d46fb 213 iconCls: 'fa fa-file-code-o',
2d1f7824
DC
214 },
215 {
216 xtype: 'button',
217 reference: 'spam',
218 text: gettext('Toggle Spam Info'),
219 enableToggle: true,
c87d46fb 220 iconCls: 'fa fa-bullhorn',
2d1f7824
DC
221 },
222 '->',
7ad0de10
DC
223 {
224 xtype: 'button',
225 reference: 'download',
226 text: gettext('Download'),
07a9b445
TL
227 setDownload: function(id) {
228 this.el.dom.download = id + ".eml";
229 },
230 bind: {
231 href: '{downloadMailURL}',
232 download: '{mailid}',
233 },
c87d46fb 234 iconCls: 'fa fa-download',
7ad0de10
DC
235 },
236 '-',
2d1f7824
DC
237 {
238 reference: 'whitelist',
239 text: gettext('Whitelist'),
240 iconCls: 'fa fa-check',
c87d46fb 241 handler: 'btnHandler',
2d1f7824
DC
242 },
243 {
244 reference: 'blacklist',
245 text: gettext('Blacklist'),
246 iconCls: 'fa fa-times',
c87d46fb 247 handler: 'btnHandler',
2d1f7824
DC
248 },
249 {
250 reference: 'deliver',
251 text: gettext('Deliver'),
365f84c1 252 iconCls: 'fa fa-paper-plane-o info-blue',
c87d46fb 253 handler: 'btnHandler',
2d1f7824
DC
254 },
255 {
256 reference: 'delete',
257 text: gettext('Delete'),
365f84c1 258 iconCls: 'fa fa-trash-o critical',
c87d46fb
TL
259 handler: 'btnHandler',
260 },
261 ],
2d1f7824
DC
262 },
263 {
264 xtype: 'pmgSpamInfoGrid',
f34abaca 265 border: false,
c87d46fb 266 reference: 'spaminfo',
ac6c1fb8
DC
267 },
268 {
269 xtype: 'pmgMailInfo',
270 hidden: true,
271 reference: 'mailinfo',
272 },
c87d46fb
TL
273 ],
274 },
275 ],
0277bfeb 276});