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