]> git.proxmox.com Git - pmg-gui.git/blame - js/ObjectGroup.js
check if the call was successful
[pmg-gui.git] / js / ObjectGroup.js
CommitLineData
3eba771a 1Ext.define('PMG.ObjectGroup', {
56b0691b 2 extend: 'Ext.grid.GridPanel',
049a531b 3 alias: 'widget.pmgObjectGroup',
56b0691b
DM
4
5 baseurl: undefined,
049a531b 6
56b0691b
DM
7 otype_list: [],
8
049a531b
DM
9 hideGroupInfo: false,
10 showDirection: false, // only important for SMTP Whitelist
56b0691b 11
cc1c5008
DM
12 ogdata: undefined,
13
84185bf4
DM
14 emptyText: gettext('Please select an object.'),
15
56b0691b
DM
16 setBaseUrl: function(baseurl) {
17 var me = this;
18
19 me.baseurl = baseurl;
20
84185bf4
DM
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 });
56b0691b 30
84185bf4
DM
31 me.store.load(function() {
32 me.down('#addMenuButton').setDisabled(false);
33 });
34 }
56b0691b
DM
35 },
36
cc1c5008 37 setObjectInfo: function(ogdata) {
56b0691b
DM
38 var me = this;
39
cc1c5008
DM
40 me.ogdata = ogdata;
41
84185bf4
DM
42 if (me.ogdata === undefined) {
43
44 me.down('#oginfo').update(me.emptyText);
45
46 } else {
56b0691b 47
84185bf4
DM
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 }
56b0691b 55 },
049a531b 56
56b0691b
DM
57 initComponent : function() {
58 var me = this;
59
60 me.store = new Ext.data.Store({
61 model: 'pmg-object-list',
62 sorters: [
049a531b 63 {
749af060 64 property : 'receivertest'
049a531b 65 },
56b0691b
DM
66 {
67 property : 'otype',
68 direction: 'ASC'
69 }
70 ]
71 });
72
049a531b
DM
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
7a3b5e2d 95 });
049a531b 96
56b0691b
DM
97 var reload = function() {
98 me.store.load();
99 };
100
101 me.selModel = Ext.create('Ext.selection.RowModel', {});
102
b357057e 103 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
56b0691b 104 selModel: me.selModel,
b357057e
DM
105 getUrl: function(rec) {
106 return me.baseurl + '/objects/' + rec.data.id;
56b0691b 107 },
b357057e
DM
108 callback: reload,
109 getRecordName: function(rec) {
110 return PMG.Utils.format_otype(rec.data.otype) +
111 ': ' + rec.data.descr;
112 },
113 waitMsgTarget: me
56b0691b
DM
114 });
115
049a531b
DM
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
56b0691b
DM
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);
049a531b 139 config.subject = full_subject(editor.subject, rec.data.receivertest);
56b0691b
DM
140 config.url = me.baseurl + '/' + editor.subdir + '/' + rec.data.id;
141
5f3ec152 142 var win = Ext.createWidget(config);
56b0691b
DM
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);
049a531b 156 config.subject = full_subject(editor.subject, editor.receivertest);
56b0691b
DM
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;
5f3ec152 165 var win = Ext.create(config);
56b0691b
DM
166 win.on('destroy', reload);
167 win.show();
168 }
169 });
170 });
171
172 me.dockedItems = [];
049a531b 173
56b0691b
DM
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: new Ext.menu.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 });
049a531b 196
56b0691b
DM
197 me.dockedItems.push({
198 dock: 'top',
199 border: 1,
200 layout: 'anchor',
049a531b 201 hidden: me.hideGroupInfo ? true : false,
56b0691b
DM
202 itemId: 'ogdata',
203 items: [
204 {
205 xtype: 'component',
206 anchor: '100%',
207 itemId: 'oginfo',
de3a7ef5 208 style: { 'white-space': 'pre' },
56b0691b 209 padding: 10,
84185bf4 210 html: me.emptyText,
cc1c5008
DM
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',
749af060 218 scope: this
cc1c5008
DM
219 }
220 }
56b0691b
DM
221 }
222 ]
223 });
049a531b 224
56b0691b
DM
225 Ext.apply(me, {
226 listeners: {
227 itemdblclick: run_editor,
228 activate: reload
229 }
230 });
231
232 me.callParent();
049a531b
DM
233
234 if (me.baseurl) {
235 me.setBaseUrl(me.baseurl); // configure store, load()
236 }
56b0691b
DM
237 }
238});