]>
git.proxmox.com Git - pmg-gui.git/blob - js/SpamQuarantine.js
1 Ext
.define('pmg-spam-archive', {
2 extend
: 'Ext.data.Model',
4 { type
: 'number', name
: 'spamavg' },
5 { type
: 'integer', name
: 'count' },
6 { type
: 'date', dateFormat
: 'timestamp', name
: 'day' }
10 url
: "/api2/json/quarantine/spam"
15 Ext
.define('pmg-spam-list', {
16 extend
: 'Ext.data.Model',
17 fields
: [ 'id', 'envelope_sender', 'from', 'sender', 'receiver', 'subject',
18 { type
: 'number', name
: 'spamlevel' },
19 { type
: 'integer', name
: 'bytes' },
20 { type
: 'date', dateFormat
: 'timestamp', name
: 'time' },
24 convert: function(v
, rec
) {
25 return Ext
.Date
.format(rec
.get('time'), 'Y-m-d');
31 url
: "/api2/json/quarantine/spam",
36 Ext
.define('PMG.SpamList', {
37 extend
: 'Ext.grid.GridPanel',
40 title
: gettext('Spam List'),
42 emptyText
: gettext('No E-Mail address selected'),
47 setUser: function(user
) {
49 var params
= me
.getStore().getProxy().getExtraParams();
51 me
.getStore().getProxy().setExtraParams(params
);
55 setFrom: function(from) {
57 var params
= me
.getStore().getProxy().getExtraParams();
58 params
.starttime
= from;
59 me
.getStore().getProxy().setExtraParams(params
);
64 var params
= me
.getStore().getProxy().getExtraParams();
66 me
.getStore().getProxy().setExtraParams(params
);
71 if (me
.user
|| PMG
.view
=== 'quarantine') {
72 // extjs has no method to dynamically change the emptytext on
73 // grids, so we have to do it this way
74 var view
= me
.getView();
75 view
.emptyText
= '<div class="x-grid-empty">'+ gettext('No Spam E-Mails found') + '</div>';
82 model
: 'pmg-spam-list',
94 groupHeaderTpl
: '{columnName}: {name} ({children.length})'
100 header
: gettext('Sender/Subject'),
101 dataIndex
: 'subject',
102 renderer: function(value
, metaData
, rec
) {
103 var subject
= Ext
.htmlEncode(value
);
104 var from = Ext
.htmlEncode(rec
.data
.from);
105 var sender
= Ext
.htmlEncode(rec
.data
.sender
);
107 from = Ext
.String
.format(gettext("{0} on behalf of {1}"),
110 return '<small>' + from + '</small><br>' + subject
;
115 header
: gettext('Score'),
116 dataIndex
: 'spamlevel',
121 header
: gettext('Size') + ' (KB)',
122 renderer: function(v
) { return Ext
.Number
.toFixed(v
/1024, 0); },
128 header
: gettext('Date'),
134 header
: gettext('Time'),
141 Ext
.define('PMG.SpamQuarantine', {
142 extend
: 'Ext.container.Container',
143 xtype
: 'pmgSpamQuarantine',
148 defaults
: { border
: false },
152 xclass
: 'Ext.app.ViewController',
154 init: function(view
) {
156 var spamlist
= me
.lookupReference('spamlist');
157 if (PMG
.view
=== 'quarantine') {
158 spamlist
.down('combobox[name=email]').setVisible(false);
162 // we to this to trigger the change event of those fields
163 var today
= new Date();
164 spamlist
.down('datefield[name=from]').setValue(today
);
165 spamlist
.down('datefield[name=to]').setValue(today
);
168 changeEmail: function(tb
, value
) {
169 var spamlist
= this.lookupReference('spamlist');
170 spamlist
.setUser(value
);
174 resetEmail: function() {
175 if (PMG
.view
!== 'quarantine') {
176 var spamlist
= this.lookupReference('spamlist');
177 spamlist
.setUser(undefined);
181 onSelectMail: function() {
183 var spamlist
= this.lookupReference('spamlist');
184 var rec
= spamlist
.selModel
.getSelection()[0];
186 var preview
= this.lookupReference('preview');
188 if (!rec
|| !rec
.data
|| !rec
.data
.id
) {
190 me
.lookupReference('preview').setDisabled(true);
194 me
.lookupReference('preview').setDisabled(false);
196 var raw
= me
.raw
|| false;
198 var url
= '/api2/htmlmail/quarantine/content?id=' + rec
.data
.id
+ ((raw
)?'&raw=1':'');
199 preview
.update("<iframe frameborder=0 width=100% height=100% sandbox='allow-same-origin' src='" + url
+"'></iframe>");
202 rawMail: function(button
) {
204 me
.lookupReference('html').setVisible(true);
205 button
.setVisible(false);
210 htmlMail: function(button
) {
212 me
.lookupReference('raw').setVisible(true);
213 button
.setVisible(false);
218 changeTime: function(field
, value
) {
223 var val
= value
.getTime()/1000;
224 var spamlist
= me
.lookupReference('spamlist');
225 var combobox
= me
.lookupReference('email');
226 var params
= combobox
.getStore().getProxy().getExtraParams();
228 var to
= me
.lookupReference('to');
229 var from = me
.lookupReference('from');
231 if (field
.name
=== 'from') {
232 spamlist
.setFrom(val
);
233 params
.starttime
= val
;
234 to
.setMinValue(value
);
236 } else if (field
.name
=== 'to') {
237 spamlist
.setTo(val
+ 24*60*60);
238 params
.endtime
= val
+ 24*60*60;
239 from.setMaxValue(value
);
244 // the combobox does not know anything about the extraparams
245 // so we disable queryCaching until we expand (and query) again
246 combobox
.queryCaching
= false;
247 combobox
.getStore().getProxy().setExtraParams(params
);
249 // we are reloading when we already have an email selected,
250 // or are in the user quarantine view
251 if (combobox
.getValue() || PMG
.view
=== 'quarantine') {
256 setQueryCaching: function() {
257 this.lookupReference('email').queryCaching
= true;
260 btnHandler: function(button
, e
) {
261 var spamlist
= this.lookupReference('spamlist');
262 var selected
= spamlist
.getSelection();
263 if (!selected
.length
) {
266 Proxmox
.Utils
.API2Request({
267 url
: '/quarantine/content/',
269 action
: button
.reference
,
270 id
: selected
[0].data
.id
273 failure: function(response
, opts
) {
274 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
276 success: function(response
, opts
) {
279 title
: gettext('Info'),
280 message
: "Action '" + button
.reference
+ ' ' +
281 selected
[0].data
.id
+ "' successful",
283 icon
: Ext
.MessageBox
.INFO
291 beforedestroy
: 'resetEmail'
293 'button[reference=raw]': {
296 'button[reference=html]': {
299 'combobox[name=email]': {
304 expand
: 'setQueryCaching'
310 selectionChange
: 'onSelectMail'
327 fieldLabel
: gettext('From'),
334 fieldLabel
: gettext('To'),
342 displayField
: 'mail',
347 url
: '/api2/json/quarantine/spamusers'
355 fieldLabel
: 'E-Mail',
358 xtype
: 'pmgSpamList',
359 reference
: 'spamlist',
366 title
: gettext('Selected Mail'),
370 reference
: 'preview',
375 text
: gettext('Show Raw'),
376 iconCls
: 'fa fa-file-code-o'
381 text
: gettext('Show HTML'),
382 iconCls
: 'fa fa-file-text-o'
384 reference
: 'whitelist',
385 text
: gettext('Whitelist'),
386 iconCls
: 'fa fa-check',
387 handler
: 'btnHandler'
389 reference
: 'blacklist',
390 text
: gettext('Blacklist'),
391 iconCls
: 'fa fa-times',
392 handler
: 'btnHandler'
394 reference
: 'deliver',
395 text
: gettext('Deliver'),
396 iconCls
: 'fa fa-paper-plane-o',
397 handler
: 'btnHandler'
400 text
: gettext('Delete'),
401 iconCls
: 'fa fa-trash-o',
402 handler
: 'btnHandler'