]>
Commit | Line | Data |
---|---|---|
ad834b6f DM |
1 | Ext.define('PMG.RuleInfo', { |
2 | extend: 'Ext.grid.GridPanel', | |
3 | alias: 'widget.pmgRuleInfo', | |
4 | ||
5 | baseurl: undefined, | |
6 | ||
7 | ruledata: undefined, | |
8 | ||
9 | emptyText: gettext('Please select a rule.'), | |
10 | ||
11 | setBaseUrl: function(baseurl) { | |
12 | var me = this; | |
13 | ||
14 | me.baseurl = baseurl; | |
15 | ||
16 | me.reload(); | |
17 | }, | |
18 | ||
19 | reload: function() { | |
20 | var me = this; | |
21 | ||
22 | if (!me.baseurl) { | |
23 | me.setRuleInfo(undefined); | |
24 | return; | |
25 | } | |
26 | ||
27 | Proxmox.Utils.API2Request({ | |
28 | url: me.baseurl + "/config", | |
29 | method: 'GET', | |
30 | waitMsgTarget: me, | |
31 | success: function(response, opts) { | |
32 | me.setRuleInfo(response.result.data); | |
ad834b6f DM |
33 | }, |
34 | failure: function (response, opts) { | |
35 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
36 | } | |
37 | }); | |
38 | }, | |
39 | ||
40 | setRuleInfo: function(ruledata) { | |
41 | var me = this; | |
42 | ||
43 | me.ruledata = ruledata; | |
44 | ||
f71626c2 DM |
45 | me.down('#addFromButton').setDisabled(me.ruledata === undefined); |
46 | me.down('#addToButton').setDisabled(me.ruledata === undefined); | |
47 | me.down('#addWhenButton').setDisabled(me.ruledata === undefined); | |
48 | me.down('#addWhatButton').setDisabled(me.ruledata === undefined); | |
39700611 | 49 | me.down('#addActionButton').setDisabled(me.ruledata === undefined); |
f71626c2 | 50 | |
ad834b6f DM |
51 | if (me.ruledata === undefined) { |
52 | ||
53 | me.store.setData([]); | |
54 | me.down('#ruleinfo').update(me.emtpyText); | |
55 | me.down('#ruledata').setHidden(true); | |
56 | ||
57 | } else { | |
58 | ||
59 | var html = '<b>' + Ext.String.htmlEncode(me.ruledata.name) + '</b>'; | |
60 | html += '<br><br>'; | |
61 | html += 'Priority: ' + me.ruledata.priority + '<br>'; | |
62 | html += 'Direction: ' + PMG.Utils.format_rule_direction(me.ruledata.direction) + '<br>'; | |
63 | html += 'Active: ' + Proxmox.Utils.format_boolean(me.ruledata.active) + '<br>'; | |
64 | ||
65 | var data = []; | |
66 | Ext.Array.each(['from', 'to', 'when', 'what', 'action'], function(oc) { | |
67 | var list = ruledata[oc]; | |
68 | if (list === undefined) { return; } | |
69 | Ext.Array.each(list, function(og) { | |
70 | data.push({ oclass: oc, name: og.name, id: og.id }); | |
71 | }); | |
72 | }); | |
73 | ||
74 | me.store.setData(data); | |
75 | ||
76 | me.down('#ruleinfo').update(html); | |
77 | me.down('#ruledata').setHidden(false); | |
78 | } | |
79 | }, | |
80 | ||
81 | initComponent : function() { | |
82 | var me = this; | |
83 | ||
84 | me.store = new Ext.data.Store({ | |
85 | fields: [ 'oclass', 'name' ] | |
86 | }); | |
87 | ||
88 | me.columns = [ | |
89 | { | |
90 | header: gettext('Type'), | |
91 | dataIndex: 'oclass', | |
92 | }, | |
93 | { | |
94 | header: gettext('name'), | |
95 | dataIndex: 'name', | |
96 | flex: 1 | |
97 | } | |
98 | ]; | |
99 | ||
100 | me.selModel = Ext.create('Ext.selection.RowModel', {}); | |
101 | ||
b357057e | 102 | var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', { |
ad834b6f | 103 | selModel: me.selModel, |
b357057e DM |
104 | getUrl: function(rec) { |
105 | return me.baseurl + '/' + rec.data.oclass + '/'+ rec.data.id; | |
ad834b6f | 106 | }, |
b357057e DM |
107 | callback: function() { me.reload(); }, |
108 | getRecordName: function(rec) { return rec.data.name; }, | |
109 | waitMsgTarget: me | |
ad834b6f DM |
110 | }); |
111 | ||
f71626c2 DM |
112 | var add_object_group = function(url, ogroupId) { |
113 | Proxmox.Utils.API2Request({ | |
114 | url: url, | |
115 | params: { ogroup: ogroupId }, | |
116 | method: 'POST', | |
117 | waitMsgTarget: me, | |
118 | callback: function() { | |
119 | me.reload(); | |
120 | }, | |
121 | failure: function (response, opts) { | |
122 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
123 | } | |
124 | }); | |
125 | }; | |
126 | ||
ad834b6f DM |
127 | me.dockedItems = []; |
128 | ||
129 | me.dockedItems.push({ | |
130 | xtype: 'toolbar', | |
131 | dock: 'top', | |
132 | items: [ | |
133 | { | |
134 | text: gettext('From'), | |
135 | disabled: true, | |
136 | itemId: 'addFromButton', | |
137 | handler: function() { | |
f71626c2 DM |
138 | var win = Ext.create('PMG.ObjectGroupSelector', { |
139 | rulegroup: 'from', | |
140 | listeners: { | |
141 | selectObjectGroup: function(view, rec) { | |
142 | win.destroy(); | |
143 | add_object_group(me.baseurl + '/from', rec.data.id); | |
144 | } | |
145 | } | |
146 | }); | |
147 | win.show(); | |
148 | } | |
149 | }, | |
150 | { | |
151 | text: gettext('To'), | |
152 | disabled: true, | |
153 | itemId: 'addToButton', | |
154 | handler: function() { | |
155 | var win = Ext.create('PMG.ObjectGroupSelector', { | |
156 | rulegroup: 'to', | |
157 | listeners: { | |
158 | selectObjectGroup: function(view, rec) { | |
159 | win.destroy(); | |
160 | add_object_group(me.baseurl + '/to', rec.data.id); | |
161 | } | |
162 | } | |
163 | }); | |
164 | win.show(); | |
165 | } | |
166 | }, | |
167 | { | |
168 | text: gettext('When'), | |
169 | disabled: true, | |
170 | itemId: 'addWhenButton', | |
171 | handler: function() { | |
172 | var win = Ext.create('PMG.ObjectGroupSelector', { | |
173 | rulegroup: 'when', | |
174 | listeners: { | |
175 | selectObjectGroup: function(view, rec) { | |
176 | win.destroy(); | |
177 | add_object_group(me.baseurl + '/when', rec.data.id); | |
178 | } | |
179 | } | |
180 | }); | |
181 | win.show(); | |
182 | } | |
183 | }, | |
184 | { | |
185 | text: gettext('What'), | |
186 | disabled: true, | |
187 | itemId: 'addWhatButton', | |
188 | handler: function() { | |
189 | var win = Ext.create('PMG.ObjectGroupSelector', { | |
190 | rulegroup: 'what', | |
191 | listeners: { | |
192 | selectObjectGroup: function(view, rec) { | |
193 | win.destroy(); | |
194 | add_object_group(me.baseurl + '/what', rec.data.id); | |
ad834b6f DM |
195 | } |
196 | } | |
197 | }); | |
198 | win.show(); | |
199 | } | |
200 | }, | |
39700611 DM |
201 | { |
202 | text: gettext('Action'), | |
203 | disabled: true, | |
204 | itemId: 'addActionButton', | |
205 | handler: function() { | |
206 | var win = Ext.create('PMG.ObjectGroupSelector', { | |
207 | rulegroup: 'action', | |
208 | listeners: { | |
209 | selectObjectGroup: function(view, rec) { | |
210 | win.destroy(); | |
211 | add_object_group(me.baseurl + '/action', rec.data.ogroup); | |
212 | } | |
213 | } | |
214 | }); | |
215 | win.show(); | |
216 | } | |
217 | }, | |
ad834b6f DM |
218 | remove_btn |
219 | ] | |
220 | }); | |
221 | ||
222 | me.dockedItems.push({ | |
223 | dock: 'top', | |
224 | border: 1, | |
225 | layout: 'anchor', | |
226 | itemId: 'ruledata', | |
227 | items: [ | |
228 | { | |
229 | xtype: 'component', | |
230 | anchor: '100%', | |
231 | itemId: 'ruleinfo', | |
232 | style: { 'white-space': 'pre' }, | |
233 | padding: 10, | |
234 | html: me.emptyText, | |
235 | listeners: { | |
236 | dblclick: { | |
237 | fn: function(e, t) { | |
238 | if (me.ruledata === undefined) { return; } | |
239 | me.fireEvent('dblclickRuleInfo', me, e, t, me.ruledata); | |
240 | }, | |
241 | element: 'el', | |
242 | scope: this, | |
243 | } | |
244 | } | |
245 | } | |
246 | ] | |
247 | }); | |
248 | ||
249 | Ext.apply(me, { | |
250 | listeners: { | |
251 | activate: function() { me.reload() } | |
252 | } | |
253 | }); | |
254 | ||
255 | me.callParent(); | |
256 | ||
257 | if (me.baseurl) { | |
258 | me.reload(); | |
259 | } | |
260 | } | |
261 | }); |