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