]>
Commit | Line | Data |
---|---|---|
ccf06524 DM |
1 | Ext.define('pmg-mailq', { |
2 | extend: 'Ext.data.Model', | |
3 | fields: [ | |
4 | 'queue_id', 'queue_name', | |
5 | { type: 'date', dateFormat: 'timestamp', name: 'arrival_time'}, | |
6 | { type: 'integer', name: 'message_size'}, | |
7 | 'sender', 'receiver', 'reason' | |
8 | ], | |
9 | idProperty: 'queue_id' | |
10 | }); | |
11 | ||
12 | Ext.define('PMG.Postfix.MailQueue', { | |
13 | extend: 'Ext.grid.GridPanel', | |
14 | alias: 'widget.pmgPostfixMailQueue', | |
15 | ||
cd3d4213 | 16 | nodename: undefined, |
10f771b5 | 17 | |
ccf06524 DM |
18 | filter: undefined, |
19 | ||
10f771b5 DM |
20 | queuename: 'deferred', |
21 | ||
34d0b6cc DM |
22 | store: { |
23 | xclass: 'Ext.data.BufferedStore', | |
24 | model: 'pmg-mailq', | |
25 | remoteFilter: true, | |
26 | pageSize: 2000 | |
27 | }, | |
ccf06524 DM |
28 | |
29 | controller: { | |
30 | ||
31 | xclass: 'Ext.app.ViewController', | |
32 | ||
33 | init: function(view) { | |
34 | if (view.nodename) view.setNodename(view.nodename); | |
df71aecf DM |
35 | |
36 | view.delayFilterTask = new Ext.util.DelayedTask(function() { | |
37 | var filter = view.lookupReference('filter').getValue(); | |
70b0bec4 DM |
38 | |
39 | view.filter = filter; | |
40 | view.updateProxy(); | |
df71aecf DM |
41 | }); |
42 | }, | |
43 | ||
44 | onChangeFilter: function(f, v) { | |
45 | var view = this.getView(); | |
46 | view.delayFilterTask.delay(500); | |
47 | }, | |
48 | ||
b8b05af7 | 49 | onFlush: function(button, event, rec) { |
53f18f14 DM |
50 | var view = this.getView(); |
51 | ||
53f18f14 DM |
52 | Proxmox.Utils.API2Request({ |
53 | url: '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' + | |
54 | view.queuename + '/' + rec.data.queue_id, | |
55 | method: 'POST', | |
56 | waitMsgTarget: view, | |
57 | failure: function (response, opts) { | |
58 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
59 | } | |
60 | }); | |
61 | ||
62 | }, | |
63 | ||
b8b05af7 DM |
64 | onRemove: function(button, event, rec) { |
65 | var view = this.getView(); | |
66 | ||
67 | Proxmox.Utils.API2Request({ | |
68 | url: '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' + | |
69 | view.queuename + '/' + rec.data.queue_id, | |
70 | method: 'DELETE', | |
71 | waitMsgTarget: view, | |
72 | success: function(response, opts) { | |
59542a9f | 73 | view.selModel.deselectAll(); |
b8b05af7 DM |
74 | view.store.load(); |
75 | }, | |
76 | failure: function (response, opts) { | |
77 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
78 | } | |
79 | }); | |
80 | }, | |
81 | ||
cd3d4213 DM |
82 | onHeaders: function(button, event, rec) { |
83 | var view = this.getView(); | |
84 | ||
85 | var url = '/api2/extjs/nodes/' + view.nodename + '/postfix/queue/' + | |
86 | view.queuename + '/' + rec.data.queue_id; | |
87 | ||
88 | var win = Ext.create('PMG.ViewMailHeaders', { | |
89 | title: view.title + ' : ' + rec.data.queue_id, | |
90 | url: url, | |
91 | }); | |
92 | win.show(); | |
93 | }, | |
94 | ||
df71aecf | 95 | control: { |
55589b49 DM |
96 | '#': { |
97 | activate: function() { | |
98 | this.view.updateProxy(); // reload | |
cd3d4213 DM |
99 | }, |
100 | itemdblclick: function(grid, rec, item, index, event) { | |
101 | this.onHeaders(grid, event, rec); | |
55589b49 DM |
102 | } |
103 | }, | |
df71aecf DM |
104 | 'field[reference=filter]': { |
105 | change: 'onChangeFilter' | |
106 | } | |
ccf06524 DM |
107 | } |
108 | }, | |
109 | ||
df71aecf | 110 | tbar: [ |
cd3d4213 DM |
111 | { |
112 | xtype: 'proxmoxButton', | |
113 | disabled: true, | |
114 | text: gettext('Headers'), | |
115 | handler: 'onHeaders' | |
116 | }, | |
53f18f14 DM |
117 | { |
118 | xtype: 'proxmoxButton', | |
119 | disabled: true, | |
120 | text: gettext('Flush'), | |
121 | handler: 'onFlush' | |
122 | }, | |
b8b05af7 DM |
123 | { |
124 | xtype: 'proxmoxStdRemoveButton', | |
125 | handler: 'onRemove' | |
126 | }, | |
df71aecf DM |
127 | { |
128 | xtype: 'label', | |
129 | html: gettext('Filter') + ':' | |
130 | }, | |
131 | { | |
132 | xtype: 'textfield', | |
133 | width: 300, | |
134 | reference: 'filter' | |
135 | } | |
136 | ], | |
137 | ||
ccf06524 DM |
138 | columns: [ |
139 | { | |
140 | header: gettext('Time'), | |
141 | width: 150, | |
142 | renderer: Ext.util.Format.dateRenderer("Y-m-d H:i:s"), | |
143 | dataIndex: 'arrival_time' | |
144 | }, | |
145 | { | |
146 | header: 'KByte', | |
147 | width: 80, | |
148 | dataIndex: 'message_size' | |
149 | }, | |
150 | { | |
151 | header: gettext('Sender'), | |
152 | width: 200, | |
153 | dataIndex: 'sender' | |
154 | }, | |
155 | { | |
156 | header: gettext('Receiver'), | |
157 | width: 200, | |
158 | dataIndex: 'receiver' | |
159 | }, | |
160 | { | |
161 | header: gettext('Reason'), | |
162 | flex: 1, | |
163 | dataIndex: 'reason' | |
164 | } | |
165 | ], | |
166 | ||
df71aecf DM |
167 | pendingLoad: false, |
168 | ||
169 | updateProxy: function() { | |
ccf06524 DM |
170 | var me = this; |
171 | ||
df71aecf | 172 | if (me.pendingLoad) return; |
ccf06524 | 173 | |
df71aecf | 174 | var proxy = { |
ccf06524 | 175 | type: 'proxmox', |
34d0b6cc DM |
176 | startParam: 'start', |
177 | limitParam: 'limit', | |
10f771b5 | 178 | url: "/api2/json/nodes/" + me.nodename + "/postfix/queue/" + me.queuename |
df71aecf DM |
179 | }; |
180 | ||
181 | var filter = me.filter; | |
182 | var nodename = me.nodename; | |
10f771b5 | 183 | var queuename = me.queuename; |
df71aecf DM |
184 | |
185 | if (filter) { proxy.extraParams = { filter: filter }; } | |
186 | ||
187 | ||
188 | me.store.setProxy(proxy); | |
189 | ||
190 | me.pendingLoad = true; | |
191 | ||
192 | me.store.load(function() { | |
193 | me.pendingLoad = false; | |
10f771b5 | 194 | if (me.nodename !== nodename || me.filter !== filter || me.queuename !== queuename) { |
df71aecf DM |
195 | setTimeout(function() { |
196 | me.updateProxy(); | |
197 | }, 100); | |
198 | } | |
ccf06524 | 199 | }); |
df71aecf DM |
200 | }, |
201 | ||
202 | setFilter: function(filter) { | |
70b0bec4 | 203 | this.lookupReference('filter').setValue(filter); |
df71aecf DM |
204 | }, |
205 | ||
206 | setNodename: function(nodename) { | |
207 | var me = this; | |
208 | ||
209 | me.nodename = nodename; | |
210 | ||
10f771b5 DM |
211 | me.updateProxy(); |
212 | }, | |
213 | ||
214 | setQueueName: function(queuename) { | |
215 | var me = this; | |
216 | ||
217 | me.queuename = queuename; | |
218 | ||
df71aecf | 219 | me.updateProxy(); |
ccf06524 DM |
220 | } |
221 | ||
222 | }); |