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