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