]>
Commit | Line | Data |
---|---|---|
ff735274 | 1 | /*global Proxmox*/ |
75fcb6fd DC |
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, | |
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 { | |
e6eb9495 | 42 | from = new Date(Date.now() - 7*24*60*60*1000); |
c70a57fb DC |
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(); | |
5fb0f71e | 75 | var store = view.getStore(); |
75fcb6fd DC |
76 | if (view.emailSelection) { |
77 | if (!me.lookupReference('email').getSelection()) { | |
78 | // if the combobox has no selection we do not reload | |
79 | return; | |
80 | } | |
ff0ee46d | 81 | me.setEmptyText(); |
75fcb6fd | 82 | } |
5fb0f71e DC |
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 | }); | |
75fcb6fd DC |
94 | }, |
95 | ||
96 | setFrom: function(from) { | |
97 | var me = this.getView(); | |
98 | var params = me.getStore().getProxy().getExtraParams(); | |
99 | params.starttime = from; | |
c70a57fb | 100 | PMG.QuarantineList.from = from; |
75fcb6fd DC |
101 | me.getStore().getProxy().setExtraParams(params); |
102 | }, | |
103 | ||
104 | setTo: function(to) { | |
c70a57fb | 105 | var end_of_to = to + 24*60*60; // we want the end of the day |
75fcb6fd DC |
106 | var me = this.getView(); |
107 | var params = me.getStore().getProxy().getExtraParams(); | |
c70a57fb DC |
108 | params.endtime = end_of_to; |
109 | PMG.QuarantineList.to = to; // we save the start of the day here | |
75fcb6fd DC |
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') { | |
c70a57fb | 142 | me.setTo(val); |
75fcb6fd DC |
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 | ||
5fb0f71e DC |
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 | ||
75fcb6fd DC |
190 | control: { |
191 | '#':{ | |
5fb0f71e DC |
192 | beforedestroy: 'resetEmail', |
193 | selectionchange: 'savePosition' | |
75fcb6fd DC |
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', | |
94153e9a DC |
246 | listConfig: { |
247 | emptyText: | |
248 | '<div class="x-grid-empty">' + | |
64fb657f | 249 | gettext('No data in database') + |
94153e9a DC |
250 | '</div>' |
251 | }, | |
75fcb6fd DC |
252 | store: { |
253 | proxy: { | |
254 | type: 'proxmox', | |
255 | url: '/api2/json/quarantine/spamusers' | |
96fba078 DC |
256 | }, |
257 | fields: [ | |
258 | { | |
259 | name: 'mail', | |
260 | renderer: Ext.htmlEncode | |
261 | } | |
262 | ] | |
75fcb6fd DC |
263 | }, |
264 | queryParam: false, | |
265 | queryCaching: false, | |
266 | editable: false, | |
267 | reference: 'email', | |
268 | name: 'email', | |
269 | fieldLabel: 'E-Mail' | |
270 | } | |
271 | ] | |
272 | } | |
273 | }); |