]> git.proxmox.com Git - pmg-gui.git/blame - js/PostfixMailQueue.js
add missing htmlEncode
[pmg-gui.git] / js / PostfixMailQueue.js
CommitLineData
ccf06524
DM
1Ext.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
12Ext.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});