]> git.proxmox.com Git - pmg-gui.git/blame - js/QuarantineList.js
implement multiselection of spamquarantine mails
[pmg-gui.git] / js / QuarantineList.js
CommitLineData
ff735274 1/*global Proxmox*/
75fcb6fd
DC
2Ext.define('PMG.QuarantineList', {
3 extend: 'Ext.grid.GridPanel',
4 xtype: 'pmgQuarantineList',
5
6 emptyText: gettext('No E-Mail address selected'),
7 viewConfig: {
8 deferEmptyText: false
9 },
10
11 config: {
12 emailSelection: false,
64fb657f 13 notFoundText: gettext('No data in database')
75fcb6fd
DC
14 },
15
c70a57fb
DC
16 statics: {
17 from: 0,
18 to: 0
19 },
75fcb6fd 20
d42f85b8
DC
21 selModel: {
22 selType: 'checkboxmodel'
23 },
24
75fcb6fd
DC
25 controller: {
26 xclass: 'Ext.app.ViewController',
27
28 init: function(view) {
29 var me = this;
99bba12c 30 if (PMG.view === 'quarantineview') {
75fcb6fd
DC
31 view.emailSelection = false;
32 me.setEmptyText();
33 }
34 var emailCombobox = me.lookupReference('email');
35 emailCombobox.setVisible(view.emailSelection);
36 emailCombobox.setDisabled(!view.emailSelection);
37
c70a57fb
DC
38 var from;
39 if (PMG.QuarantineList.from != 0) {
40 from = new Date(PMG.QuarantineList.from * 1000);
41 } else {
42 from = new Date();
43 }
44
45 var to;
46 if (PMG.QuarantineList.to != 0) {
47 to = new Date(PMG.QuarantineList.to * 1000);
48 } else {
49 to = new Date();
50 }
51
75fcb6fd 52 // we to this to trigger the change event of those fields
c70a57fb
DC
53 me.lookupReference('from').setValue(from);
54 me.lookupReference('to').setValue(to);
75fcb6fd 55
2f8fe1a3 56 Proxmox.Utils.monStoreErrors(view.getView(), view.getStore());
207471c0
DC
57 me.load(function() {
58 if (view.cselect) {
59 view.setSelection(view.getStore().getById(view.cselect));
60 }
61 });
75fcb6fd
DC
62 },
63 // extjs has no method to dynamically change the emptytext on
64 // grids, so we have to do it this way
65 setEmptyText: function(emptyText) {
66 var me = this;
67 var view = me.getView();
68 var tableview = view.getView();
69 tableview.emptyText = '<div class="x-grid-empty">'+ (emptyText || view.notFoundText) + '</div>';
70 },
71
207471c0 72 load: function(callback) {
75fcb6fd
DC
73 var me = this;
74 var view = me.getView();
75 if (view.emailSelection) {
76 if (!me.lookupReference('email').getSelection()) {
77 // if the combobox has no selection we do not reload
78 return;
79 }
ff0ee46d 80 me.setEmptyText();
75fcb6fd 81 }
207471c0 82 view.getStore().load(callback);
75fcb6fd
DC
83 },
84
85 setFrom: function(from) {
86 var me = this.getView();
87 var params = me.getStore().getProxy().getExtraParams();
88 params.starttime = from;
c70a57fb 89 PMG.QuarantineList.from = from;
75fcb6fd
DC
90 me.getStore().getProxy().setExtraParams(params);
91 },
92
93 setTo: function(to) {
c70a57fb 94 var end_of_to = to + 24*60*60; // we want the end of the day
75fcb6fd
DC
95 var me = this.getView();
96 var params = me.getStore().getProxy().getExtraParams();
c70a57fb
DC
97 params.endtime = end_of_to;
98 PMG.QuarantineList.to = to; // we save the start of the day here
75fcb6fd
DC
99 me.getStore().getProxy().setExtraParams(params);
100 },
101
102 setUser: function(user) {
103 var me = this.getView();
104 var params = me.getStore().getProxy().getExtraParams();
105 params.pmail = user;
106 me.getStore().getProxy().setExtraParams(params);
107 me.user = user;
108 },
109
110 changeTime: function(field, value) {
111 var me = this;
112 var list = me.getView();
113
114 if (!value) {
115 return;
116 }
117
118 var val = value.getTime()/1000;
119 var combobox = me.lookupReference('email');
120 var params = combobox.getStore().getProxy().getExtraParams();
121
122 var to = me.lookupReference('to');
123 var from = me.lookupReference('from');
124
125 if (field.name === 'from') {
126 me.setFrom(val);
127 params.starttime = val;
128 to.setMinValue(value);
129
130 } else if (field.name === 'to') {
c70a57fb 131 me.setTo(val);
75fcb6fd
DC
132 params.endtime = val + 24*60*60;
133 from.setMaxValue(value);
134 } else {
135 return;
136 }
137
138 // the combobox does not know anything about the extraparams
139 // so we disable queryCaching until we expand (and query) again
140 combobox.queryCaching = false;
141 combobox.getStore().getProxy().setExtraParams(params);
142
143 me.load();
144 },
145
146 resetEmail: function() {
147 var me = this;
148 var view = me.getView();
149 if (view.emailSelection) {
150 me.setUser(undefined);
151 }
152 },
153
154 changeEmail: function(tb, value) {
155 var me = this;
156 me.setUser(value);
157 me.load();
158 },
159
160 setQueryCaching: function() {
161 this.lookupReference('email').queryCaching = true;
162 },
163
164 control: {
165 '#':{
771bd0b9 166 beforedestroy: 'resetEmail'
75fcb6fd
DC
167 },
168 'combobox[reference=email]': {
169 change: {
170 fn: 'changeEmail',
171 buffer: 500
172 },
173 expand: 'setQueryCaching'
174 },
175 datefield: {
176 change: {
177 fn: 'changeTime'
178 }
179 }
180
181 }
182 },
183
184 features: [
185 {
186 ftype: 'grouping',
187 groupHeaderTpl: '{columnName}: {name} ({children.length})'
188 }
189 ],
190
191 tbar: {
192 layout: {
193 type: 'vbox',
194 align: 'stretch'
195 },
196 defaults: {
197 margin: 2
198 },
199 items: [
200 {
201 fieldLabel: gettext('From'),
202 reference: 'from',
203 xtype: 'datefield',
204 format: 'Y-m-d',
205 name: 'from'
206 },
207 {
208 fieldLabel: gettext('To'),
209 reference: 'to',
210 xtype: 'datefield',
211 format: 'Y-m-d',
212 name: 'to'
213 },
214 {
215 xtype: 'combobox',
216 hidden: true,
217 displayField: 'mail',
218 valueField: 'mail',
94153e9a
DC
219 listConfig: {
220 emptyText:
221 '<div class="x-grid-empty">' +
64fb657f 222 gettext('No data in database') +
94153e9a
DC
223 '</div>'
224 },
75fcb6fd
DC
225 store: {
226 proxy: {
227 type: 'proxmox',
228 url: '/api2/json/quarantine/spamusers'
96fba078
DC
229 },
230 fields: [
231 {
232 name: 'mail',
233 renderer: Ext.htmlEncode
234 }
235 ]
75fcb6fd
DC
236 },
237 queryParam: false,
238 queryCaching: false,
239 editable: false,
240 reference: 'email',
241 name: 'email',
242 fieldLabel: 'E-Mail'
243 }
244 ]
245 }
246});