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