]> git.proxmox.com Git - pmg-gui.git/blame - js/ObjectGroup.js
fix bug #1707: use correct units for deferred mail queue (minutes)
[pmg-gui.git] / js / ObjectGroup.js
CommitLineData
ff735274 1/*global Proxmox*/
3eba771a 2Ext.define('PMG.ObjectGroup', {
56b0691b 3 extend: 'Ext.grid.GridPanel',
049a531b 4 alias: 'widget.pmgObjectGroup',
56b0691b
DM
5
6 baseurl: undefined,
049a531b 7
56b0691b
DM
8 otype_list: [],
9
049a531b
DM
10 hideGroupInfo: false,
11 showDirection: false, // only important for SMTP Whitelist
56b0691b 12
cc1c5008
DM
13 ogdata: undefined,
14
84185bf4
DM
15 emptyText: gettext('Please select an object.'),
16
56b0691b
DM
17 setBaseUrl: function(baseurl) {
18 var me = this;
19
20 me.baseurl = baseurl;
21
84185bf4 22 if (me.baseurl === undefined) {
69bc007c 23 me.store.proxy.setUrl(undefined);
84185bf4 24 me.store.setData([]);
7d4f02a3 25 me.setButtonState(me.store, [], false);
84185bf4 26 } else {
69bc007c
DM
27 var url = '/api2/json' + me.baseurl + '/objects';
28 me.store.proxy.setUrl(url);
7d4f02a3 29 me.store.load();
84185bf4 30 }
56b0691b
DM
31 },
32
cc1c5008 33 setObjectInfo: function(ogdata) {
56b0691b
DM
34 var me = this;
35
cc1c5008
DM
36 me.ogdata = ogdata;
37
84185bf4
DM
38 if (me.ogdata === undefined) {
39
40 me.down('#oginfo').update(me.emptyText);
41
42 } else {
56b0691b 43
84185bf4
DM
44 var html = '<b>' + Ext.String.htmlEncode(me.ogdata.name) + '</b>';
45 html += "<br><br>";
46 html += Ext.String.htmlEncode(Ext.String.trim(me.ogdata.info));
47
48 me.down('#oginfo').update(html);
49 me.down('#ogdata').setHidden(false);
50 }
56b0691b 51 },
049a531b 52
7d4f02a3
DC
53 setButtonState: function(store, records, success) {
54 var me = this;
55 if (!success || !me.baseurl) {
56 me.down('#addMenuButton').setDisabled(true);
57 return;
58 }
59 me.down('#addMenuButton').setDisabled(false);
60 },
61
56b0691b
DM
62 initComponent : function() {
63 var me = this;
64
65 me.store = new Ext.data.Store({
66 model: 'pmg-object-list',
69bc007c
DM
67 proxy: {
68 type: 'proxmox'
69 },
56b0691b 70 sorters: [
049a531b 71 {
749af060 72 property : 'receivertest'
049a531b 73 },
56b0691b
DM
74 {
75 property : 'otype',
76 direction: 'ASC'
77 }
78 ]
79 });
80
049a531b
DM
81 me.columns = [{
82 header: gettext('Type'),
83 dataIndex: 'otype',
84 renderer: PMG.Utils.format_otype,
85 width: 200
86 }];
87
88 if (me.showDirection) {
89 me.columns.push({
90 header: gettext('Direction'),
91 dataIndex: 'receivertest',
92 renderer: function(value) {
93 return value ? PMG.Utils.receiverText : PMG.Utils.senderText;
94 }
95 });
96 }
97
98 me.columns.push({
99 header: gettext('Value'),
100 dataIndex: 'descr',
101 renderer: Ext.String.htmlEncode,
102 flex: 1
7a3b5e2d 103 });
049a531b 104
56b0691b
DM
105 var reload = function() {
106 me.store.load();
107 };
108
109 me.selModel = Ext.create('Ext.selection.RowModel', {});
110
b357057e 111 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
56b0691b 112 selModel: me.selModel,
b357057e
DM
113 getUrl: function(rec) {
114 return me.baseurl + '/objects/' + rec.data.id;
56b0691b 115 },
b357057e
DM
116 callback: reload,
117 getRecordName: function(rec) {
118 return PMG.Utils.format_otype(rec.data.otype) +
119 ': ' + rec.data.descr;
120 },
121 waitMsgTarget: me
56b0691b
DM
122 });
123
049a531b
DM
124 var full_subject = function(subject, receivertest) {
125 if (me.showDirection) {
126 var direction = receivertest ?
127 PMG.Utils.receiverText : PMG.Utils.senderText;
128
129 return subject + ' (' + direction + ')';
130 } else {
131 return subject;
132 }
133 };
134
56b0691b
DM
135 var run_editor = function() {
136 var rec = me.selModel.getSelection()[0];
137 if (!rec) {
138 return;
139 }
140
141 var editor = PMG.Utils.object_editors[rec.data.otype];
8ddd9c44 142 if (!editor || editor.uneditable) {
56b0691b
DM
143 return;
144 }
145
146 var config = Ext.apply({ method: 'PUT' }, editor);
049a531b 147 config.subject = full_subject(editor.subject, rec.data.receivertest);
56b0691b
DM
148 config.url = me.baseurl + '/' + editor.subdir + '/' + rec.data.id;
149
5f3ec152 150 var win = Ext.createWidget(config);
56b0691b
DM
151
152 win.load();
153 win.on('destroy', reload);
154 win.show();
155 };
156
157 var menu_items = [];
158
159 Ext.Array.each(me.otype_list, function(otype) {
160
161 var editor = PMG.Utils.object_editors[otype];
162
163 var config = Ext.apply({ method: 'POST' }, editor);
049a531b 164 config.subject = full_subject(editor.subject, editor.receivertest);
56b0691b
DM
165
166 menu_items.push({
167 text: config.subject,
ea4f2a79 168 iconCls: config.iconCls || 'fa fa-question-circle',
56b0691b
DM
169 handler: function() {
170 if (me.baseurl == undefined) {
171 return;
172 }
173 config.url = me.baseurl + '/' + editor.subdir;
5f3ec152 174 var win = Ext.create(config);
56b0691b
DM
175 win.on('destroy', reload);
176 win.show();
177 }
178 });
179 });
180
181 me.dockedItems = [];
049a531b 182
56b0691b
DM
183 me.dockedItems.push({
184 xtype: 'toolbar',
185 dock: 'top',
186 items: [
187 {
188 text: gettext('Add'),
189 disabled: true,
190 itemId: 'addMenuButton',
793ac2e4 191 menu: {
56b0691b 192 items: menu_items
793ac2e4 193 }
56b0691b
DM
194 },
195 {
196 xtype: 'proxmoxButton',
197 text: gettext('Edit'),
198 disabled: true,
199 selModel: me.selModel,
8ddd9c44
DC
200 enableFn: function(rec) {
201 var editor = PMG.Utils.object_editors[rec.data.otype];
202 return (editor && !editor.uneditable);
203 },
56b0691b
DM
204 handler: run_editor
205 },
ccbf186f 206 remove_btn
56b0691b
DM
207 ]
208 });
049a531b 209
56b0691b
DM
210 me.dockedItems.push({
211 dock: 'top',
212 border: 1,
213 layout: 'anchor',
049a531b 214 hidden: me.hideGroupInfo ? true : false,
56b0691b
DM
215 itemId: 'ogdata',
216 items: [
217 {
218 xtype: 'component',
219 anchor: '100%',
220 itemId: 'oginfo',
de3a7ef5 221 style: { 'white-space': 'pre' },
56b0691b 222 padding: 10,
84185bf4 223 html: me.emptyText,
cc1c5008
DM
224 listeners: {
225 dblclick: {
226 fn: function(e, t) {
227 if (me.ogdata === undefined) { return; }
228 me.fireEvent('dblclickOGInfo', me, e, t, me.ogdata);
229 },
230 element: 'el',
749af060 231 scope: this
cc1c5008
DM
232 }
233 }
56b0691b
DM
234 }
235 ]
236 });
049a531b 237
69bc007c
DM
238 Proxmox.Utils.monStoreErrors(me, me.store, true);
239
56b0691b 240 Ext.apply(me, {
01e0e5e5 241 run_editor: run_editor,
56b0691b
DM
242 listeners: {
243 itemdblclick: run_editor,
244 activate: reload
245 }
246 });
247
248 me.callParent();
049a531b 249
7d4f02a3
DC
250 me.mon(me.store, 'load', me.setButtonState, me);
251
049a531b
DM
252 if (me.baseurl) {
253 me.setBaseUrl(me.baseurl); // configure store, load()
254 }
56b0691b
DM
255 }
256});