]>
git.proxmox.com Git - pmg-gui.git/blob - js/RuleInfo.js
4b9236070f6b4cdb3f2fd8570789054bd58f20d8
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) {
87 viewmodel
.set('selectedRule', null);
88 viewmodel
.get('objects').setData([]);
92 ruledata
.name
= Ext
.String
.htmlEncode(ruledata
.name
);
93 viewmodel
.set('selectedRule', ruledata
);
96 Ext
.Array
.each(['from', 'to', 'when', 'what', 'action'], function(oc
) {
98 var store
= viewmodel
.get(oc
+ 'objects');
99 if (ruledata
[oc
] === undefined || store
=== undefined) { return; }
101 // we build a filter for the objects,
102 // which are already added to the rule,
103 // so what we only show the ones,
104 // which are still available
106 var ids
= Ext
.Array
.pluck(ruledata
[oc
], 'id');
107 // for the actions, we have a different id field
108 var idField
= (oc
=== 'action')?'ogroup':'id';
111 filterFn:function(record
){
113 // actions have the ogroup as a string
115 return (ids
.indexOf(parseInt(record
.data
[idField
])) === -1);
119 Ext
.Array
.each(ruledata
[oc
], function(og
) {
120 data
.push({ oclass
: oc
, name
: og
.name
, typeid
: og
.id
});
124 viewmodel
.get('objects').setData(data
);
128 removeIconClick: function(gridView
, rowindex
, colindex
, button
, event
, record
) {
130 me
.removeObjectGroup(record
);
133 removeDrop: function(gridView
, data
, overModel
) {
135 var record
= data
.records
[0]; // only one
136 me
.removeObjectGroup(record
);
140 addIconClick: function(gridView
, rowindex
, colindex
, button
, event
, record
) {
142 me
.addObjectGroup(gridView
.panel
.type
, record
);
146 addDrop: function(gridView
, data
, overModel
) {
148 var record
= data
.records
[0]; // only one
149 me
.addObjectGroup(data
.view
.panel
.type
, record
);
154 'grid[reference=usedobjects]': {
157 'tabpanel[reference=availobjects] > grid': {
170 fields
: ['oclass', 'name', 'typeid'],
171 groupField
: 'oclass',
176 model
: 'pmg-action-list',
179 url
: "/api2/json/config/ruledb/action/objects",
184 model
: 'pmg-object-group',
187 url
: "/api2/json/config/ruledb/who",
192 model
: 'pmg-object-group',
195 url
: "/api2/json/config/ruledb/who",
200 model
: 'pmg-object-group',
203 url
: "/api2/json/config/ruledb/what",
208 model
: 'pmg-object-group',
211 url
: "/api2/json/config/ruledb/when",
220 padding
: '5 10 5 10',
223 bodyPadding
: '5 0 5 0',
241 name
: '{selectedRule.name}',
242 priority
: '{selectedRule.priority}',
243 active
: '{selectedRule.active}',
244 direction
: '{selectedRule.direction}',
245 selected
: '{selectedRule}'
249 '<tpl if="selected">',
250 '<b>{name}</b><br><br>',
251 'Priority: {priority}<br>',
252 'Direction: {[PMG.Utils.format_rule_direction(values.direction)]}<br>',
253 'Active: {[Proxmox.Utils.format_boolean(values.active)]}<br>',
255 gettext('Please select a rule.'),
261 reference
: 'usedobjects',
263 emptyText
: gettext('No Objects'),
267 enableGroupingMenu
: false,
270 '{[PMG.Utils.format_oclass(values.name)]}'
274 title
: gettext('Used Objects'),
278 ptype
: 'gridviewdragdrop',
280 dragGroup
: 'usedobjects',
281 dropGroup
: 'unusedobjects',
283 // do not show default grid dragdrop behaviour
287 handleNodeDrop
: Ext
.emptyFn
294 header
: gettext('Type'),
299 header
: gettext('Name'),
305 xtype
: 'actioncolumn',
310 iconCls
: 'fa fa-fw fa-minus-circle',
311 tooltip
: gettext('Remove'),
312 handler
: 'removeIconClick'
320 hidden
: '{!selectedRule}'
325 title
: gettext('Available Objects'),
326 reference
: 'availobjects',
329 hidden
: '{!selectedRule}'
333 emptyText
: gettext('No Objects'),
336 ptype
: 'gridviewdragdrop',
337 dragGroup
: 'unusedobjects',
338 dropGroup
: 'usedobjects',
340 // do not show default grid dragdrop behaviour
344 handleNodeDrop
: Ext
.emptyFn
350 header
: gettext('Name'),
356 xtype
: 'actioncolumn',
361 iconCls
: 'fa fa-fw fa-plus-circle',
362 tooltip
: gettext('Add'),
363 handler
: 'addIconClick'
371 title
: gettext('Action'),
373 store
: '{actionobjects}'
376 iconCls
: 'fa fa-flag',
379 title
: gettext('From'),
380 iconCls
: 'fa fa-user-circle',
383 store
: '{fromobjects}'
387 title
: gettext('To'),
388 iconCls
: 'fa fa-user-circle',
395 title
: gettext('What'),
396 iconCls
: 'fa fa-cube',
399 store
: '{whatobjects}'
403 title
: gettext('When'),
404 iconCls
: 'fa fa-clock-o',
407 store
: '{whenobjects}'