]> git.proxmox.com Git - pmg-gui.git/blob - js/QuarantineList.js
quarantine: do not deselect when list changes
[pmg-gui.git] / js / QuarantineList.js
1 /*global Proxmox*/
2 Ext.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,
13 notFoundText: gettext('No data in database')
14 },
15
16 statics: {
17 from: 0,
18 to: 0
19 },
20
21 selModel: {
22 selType: 'checkboxmodel'
23 },
24
25 controller: {
26 xclass: 'Ext.app.ViewController',
27
28 init: function(view) {
29 var me = this;
30 if (PMG.view === 'quarantineview') {
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
38 var from;
39 if (PMG.QuarantineList.from != 0) {
40 from = new Date(PMG.QuarantineList.from * 1000);
41 } else {
42 from = new Date(Date.now() - 7*24*60*60*1000);
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
52 // we to this to trigger the change event of those fields
53 me.lookupReference('from').setValue(from);
54 me.lookupReference('to').setValue(to);
55
56 Proxmox.Utils.monStoreErrors(view.getView(), view.getStore());
57 me.load(function() {
58 if (view.cselect) {
59 view.setSelection(view.getStore().getById(view.cselect));
60 }
61 });
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
72 load: function(callback) {
73 var me = this;
74 var view = me.getView();
75 var store = view.getStore();
76 if (view.emailSelection) {
77 if (!me.lookupReference('email').getSelection()) {
78 // if the combobox has no selection we do not reload
79 return;
80 }
81 me.setEmptyText();
82 }
83 store.load(function() {
84 if (me.savedPosition !== undefined) {
85 if (store.getCount() - 1 < me.savedPosition) {
86 me.savedPosition = store.getCount() - 1;
87 }
88 view.setSelection(store.getAt(me.savedPosition));
89 }
90 if (Ext.isFunction(callback)) {
91 callback();
92 }
93 });
94 },
95
96 setFrom: function(from) {
97 var me = this.getView();
98 var params = me.getStore().getProxy().getExtraParams();
99 params.starttime = from;
100 PMG.QuarantineList.from = from;
101 me.getStore().getProxy().setExtraParams(params);
102 },
103
104 setTo: function(to) {
105 var end_of_to = to + 24*60*60; // we want the end of the day
106 var me = this.getView();
107 var params = me.getStore().getProxy().getExtraParams();
108 params.endtime = end_of_to;
109 PMG.QuarantineList.to = to; // we save the start of the day here
110 me.getStore().getProxy().setExtraParams(params);
111 },
112
113 setUser: function(user) {
114 var me = this.getView();
115 var params = me.getStore().getProxy().getExtraParams();
116 params.pmail = user;
117 me.getStore().getProxy().setExtraParams(params);
118 me.user = user;
119 },
120
121 changeTime: function(field, value) {
122 var me = this;
123 var list = me.getView();
124
125 if (!value) {
126 return;
127 }
128
129 var val = value.getTime()/1000;
130 var combobox = me.lookupReference('email');
131 var params = combobox.getStore().getProxy().getExtraParams();
132
133 var to = me.lookupReference('to');
134 var from = me.lookupReference('from');
135
136 if (field.name === 'from') {
137 me.setFrom(val);
138 params.starttime = val;
139 to.setMinValue(value);
140
141 } else if (field.name === 'to') {
142 me.setTo(val);
143 params.endtime = val + 24*60*60;
144 from.setMaxValue(value);
145 } else {
146 return;
147 }
148
149 // the combobox does not know anything about the extraparams
150 // so we disable queryCaching until we expand (and query) again
151 combobox.queryCaching = false;
152 combobox.getStore().getProxy().setExtraParams(params);
153
154 me.load();
155 },
156
157 resetEmail: function() {
158 var me = this;
159 var view = me.getView();
160 if (view.emailSelection) {
161 me.setUser(undefined);
162 }
163 },
164
165 changeEmail: function(tb, value) {
166 var me = this;
167 me.setUser(value);
168 me.load();
169 },
170
171 setQueryCaching: function() {
172 this.lookupReference('email').queryCaching = true;
173 },
174
175
176 savePosition: function(grid, selected, eopts) {
177 if (!selected.length) {
178 return;
179 }
180
181 var me = this;
182 var view = me.getView();
183
184 var id = view.getStore().indexOf(selected[0]);
185
186 me.savedPosition = id;
187 },
188
189
190 control: {
191 '#':{
192 beforedestroy: 'resetEmail',
193 selectionchange: 'savePosition'
194 },
195 'combobox[reference=email]': {
196 change: {
197 fn: 'changeEmail',
198 buffer: 500
199 },
200 expand: 'setQueryCaching'
201 },
202 datefield: {
203 change: {
204 fn: 'changeTime'
205 }
206 }
207
208 }
209 },
210
211 features: [
212 {
213 ftype: 'grouping',
214 groupHeaderTpl: '{columnName}: {name} ({children.length})'
215 }
216 ],
217
218 tbar: {
219 layout: {
220 type: 'vbox',
221 align: 'stretch'
222 },
223 defaults: {
224 margin: 2
225 },
226 items: [
227 {
228 fieldLabel: gettext('From'),
229 reference: 'from',
230 xtype: 'datefield',
231 format: 'Y-m-d',
232 name: 'from'
233 },
234 {
235 fieldLabel: gettext('To'),
236 reference: 'to',
237 xtype: 'datefield',
238 format: 'Y-m-d',
239 name: 'to'
240 },
241 {
242 xtype: 'combobox',
243 hidden: true,
244 displayField: 'mail',
245 valueField: 'mail',
246 listConfig: {
247 emptyText:
248 '<div class="x-grid-empty">' +
249 gettext('No data in database') +
250 '</div>'
251 },
252 store: {
253 proxy: {
254 type: 'proxmox',
255 url: '/api2/json/quarantine/spamusers'
256 },
257 fields: [
258 {
259 name: 'mail',
260 renderer: Ext.htmlEncode
261 }
262 ]
263 },
264 queryParam: false,
265 queryCaching: false,
266 editable: false,
267 reference: 'email',
268 name: 'email',
269 fieldLabel: 'E-Mail'
270 }
271 ]
272 }
273 });