]>
git.proxmox.com Git - pmg-gui.git/blob - js/RuleInfo.js
1 Ext
.define('PMG.RuleInfo', {
2 extend
: 'Ext.panel.Panel',
6 xclass
: 'Ext.app.ViewController',
8 setBaseUrl: function(baseurl
) {
10 me
.getViewModel().set('baseurl', baseurl
);
16 var viewmodel
= me
.getViewModel();
17 var baseurl
= viewmodel
.get('baseurl');
20 me
.setRuleInfo(undefined);
24 Proxmox
.Utils
.API2Request({
25 url
: baseurl
+ "/config",
27 success: function(response
, opts
) {
28 me
.setRuleInfo(response
.result
.data
);
30 failure: function(response
, opts
) {
31 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
36 removeObjectGroup: function(rec
) {
41 gettext('Are you sure you want to remove entry {0}'),
42 "'" + rec
.data
.name
+ "'"),
44 if (button
=== 'yes') {
45 Proxmox
.Utils
.API2Request({
46 url
: me
.getViewModel().get('baseurl') + '/' + rec
.data
.oclass
+ '/'+ rec
.data
.typeid
,
48 waitMsgTarget
: me
.getView(),
49 callback: function() {
52 failure: function(response
, opts
) {
53 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
61 addObjectGroup: function(type
, record
) {
63 var baseurl
= me
.getViewModel().get('baseurl');
64 var url
= baseurl
+ '/' + type
;
65 var id
= type
=== 'action'?record
.data
.ogroup
:record
.data
.id
;
66 Proxmox
.Utils
.API2Request({
68 params
: { ogroup
: id
},
70 waitMsgTarget
: me
.getView(),
71 callback: function() {
74 failure: function(response
, opts
) {
75 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
80 setRuleInfo: function(ruledata
) {
83 var viewmodel
= me
.getViewModel();
85 if (ruledata
=== undefined) {
86 viewmodel
.set('selectedRule', null);
87 viewmodel
.get('objects').setData([]);
89 viewmodel
.set('selectedRule', ruledata
);
96 Ext
.Array
.each(['from', 'to', 'when', 'what', 'action'], function(oc
) {
97 var store
= viewmodel
.get(oc
+ 'objects');
98 if (ruledata
[oc
] === undefined || store
=== undefined) { return; }
100 // we build a filter for the objects,
101 // which are already added to the rule,
102 // so what we only show the ones,
103 // which are still available
105 var ids
= Ext
.Array
.pluck(ruledata
[oc
], 'id');
106 // for the actions, we have a different id field
107 var idField
= oc
=== 'action'?'ogroup':'id';
110 filterFn: function(record
) {
112 // actions have the ogroup as a string
114 return ids
.indexOf(parseInt(record
.data
[idField
], 10)) === -1;
123 invert
: ruledata
[`${oc}-invert`],
124 and
: ruledata
[`${oc}-and`],
130 Ext
.Array
.each(ruledata
[oc
], function(og
) {
131 group
.children
.push({ oclass
: oc
, name
: og
.name
, typeid
: og
.id
, leaf
: true });
134 if (group
.children
.length
) {
135 data
.children
.push(group
);
138 viewmodel
.get('objects').setRoot(data
);
142 removeIconClick: function(gridView
, rowindex
, colindex
, button
, event
, record
) {
144 me
.removeObjectGroup(record
);
147 removeDrop: function(gridView
, data
, overModel
) {
149 var record
= data
.records
[0]; // only one
150 me
.removeObjectGroup(record
);
154 addIconClick: function(gridView
, rowindex
, colindex
, button
, event
, record
) {
156 me
.addObjectGroup(gridView
.panel
.type
, record
);
160 addDrop: function(gridView
, data
, overModel
) {
162 var record
= data
.records
[0]; // only one
163 me
.addObjectGroup(data
.view
.panel
.type
, record
);
167 updateMode: function(field
, value
) {
169 let vm
= me
.getViewModel();
170 let oclass
= field
.getWidgetRecord().data
.oclass
;
173 params
[`${oclass}-invert`] = value
.startsWith('not') ? 1 : 0;
174 params
[`${oclass}-and`] = value
.endsWith('all') ? 1 : 0;
176 Proxmox
.Utils
.API2Request({
177 url
: `${vm.get('baseurl')}/config`,
180 success
: () => me
.reload(),
185 'treepanel[reference=usedobjects]': {
188 'tabpanel[reference=availobjects] > grid': {
191 'pmgMatchModeSelector': {
192 change
: 'updateMode',
205 fields
: ['oclass', 'name', 'typeid'],
206 groupField
: 'oclass',
211 model
: 'pmg-action-list',
214 url
: "/api2/json/config/ruledb/action/objects",
219 model
: 'pmg-object-group',
222 url
: "/api2/json/config/ruledb/who",
227 model
: 'pmg-object-group',
230 url
: "/api2/json/config/ruledb/who",
235 model
: 'pmg-object-group',
238 url
: "/api2/json/config/ruledb/what",
243 model
: 'pmg-object-group',
246 url
: "/api2/json/config/ruledb/when",
255 padding
: '5 10 5 10',
258 bodyPadding
: '5 0 5 0',
270 bodyPadding
: '10 10 10 10',
276 name
: '{selectedRule.name:htmlEncode}',
277 priority
: '{selectedRule.priority}',
278 active
: '{selectedRule.active}',
279 direction
: '{selectedRule.direction}',
280 selected
: '{selectedRule}',
284 '<tpl if="selected">',
285 '<b>{name}</b><br><br>',
286 gettext('Priority') + ': {priority}<br>',
287 gettext('Direction') + ': {[PMG.Utils.format_rule_direction(values.direction)]}<br>',
288 gettext('Active') + ': {[Proxmox.Utils.format_boolean(values.active)]}<br>',
290 gettext('Please select a rule.'),
296 reference
: 'usedobjects',
298 emptyText
: gettext('No Objects'),
300 title
: gettext('Used Objects'),
304 userCls
: 'pmx-rule-tree',
307 getRowClass
: record
=> record
.data
.type
? 'pmx-type-row' : '',
309 ptype
: 'gridviewdragdrop',
311 dragGroup
: 'usedobjects',
312 dropGroup
: 'unusedobjects',
314 // do not show default grid dragdrop behaviour
318 handleNodeDrop
: Ext
.emptyFn
,
325 header
: gettext('Name'),
328 renderer
: PMG
.Utils
.format_oclass
,
329 sorter: function(a
, b
) {
330 if (a
.data
.type
&& b
.data
.type
) {
331 return a
.data
.oclass
.localeCompare(b
.data
.oclass
);
333 return a
.data
.text
.localeCompare(b
.data
.text
);
338 header
: gettext('Match if'),
339 xtype
: 'widgetcolumn',
342 xtype
: 'pmgMatchModeSelector',
344 onWidgetAttach: function(col
, widget
, rec
) {
345 if (rec
.data
.type
&& rec
.data
.oclass
!== 'action') {
346 let mode
= rec
.data
.invert
? 'not' : '';
347 mode
+= rec
.data
.and
? 'all' : 'any';
348 widget
.suspendEvents();
349 widget
.setValue(mode
);
350 widget
.resumeEvents();
351 widget
.setHidden(false);
353 widget
.setHidden(true);
359 xtype
: 'actioncolumn',
364 tooltip
: gettext('Remove'),
365 isActionDisabled
: (v
, rI
, cI
, i
, rec
) => rec
.data
.type
,
366 getClass
: (v
, mD
, { data
}) => data
.type
? 'pmx-hidden' : 'fa fa-fw fa-minus-circle',
367 handler
: 'removeIconClick',
375 hidden
: '{!selectedRule}',
380 title
: gettext('Available Objects'),
381 reference
: 'availobjects',
384 hidden
: '{!selectedRule}',
388 emptyText
: gettext('No Objects'),
391 ptype
: 'gridviewdragdrop',
392 dragGroup
: 'unusedobjects',
393 dropGroup
: 'usedobjects',
395 // do not show default grid dragdrop behaviour
399 handleNodeDrop
: Ext
.emptyFn
,
405 header
: gettext('Name'),
411 xtype
: 'actioncolumn',
416 iconCls
: 'fa fa-fw fa-plus-circle',
417 tooltip
: gettext('Add'),
418 handler
: 'addIconClick',
426 title
: gettext('Action'),
428 store
: '{actionobjects}',
431 iconCls
: 'fa fa-flag',
434 title
: gettext('From'),
435 iconCls
: 'fa fa-user-circle',
438 store
: '{fromobjects}',
442 title
: gettext('To'),
443 iconCls
: 'fa fa-user-circle',
446 store
: '{toobjects}',
450 title
: gettext('What'),
451 iconCls
: 'fa fa-cube',
454 store
: '{whatobjects}',
458 title
: gettext('When'),
459 iconCls
: 'fa fa-clock-o',
462 store
: '{whenobjects}',