]>
git.proxmox.com Git - pmg-gui.git/blob - js/RuleInfo.js
2 Ext
.define('PMG.RuleInfo', {
3 extend
: 'Ext.panel.Panel',
7 xclass
: 'Ext.app.ViewController',
9 setBaseUrl: function(baseurl
) {
11 me
.getViewModel().set('baseurl', baseurl
);
17 var viewmodel
= me
.getViewModel();
18 var baseurl
= viewmodel
.get('baseurl');
21 me
.setRuleInfo(undefined);
25 Proxmox
.Utils
.API2Request({
26 url
: baseurl
+ "/config",
28 success: function(response
, opts
) {
29 me
.setRuleInfo(response
.result
.data
);
31 failure: function (response
, opts
) {
32 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
37 removeObjectGroup: function(rec
) {
42 gettext('Are you sure you want to remove entry {0}'),
43 "'" + rec
.data
.name
+ "'"),
45 if (button
=== 'yes') {
46 Proxmox
.Utils
.API2Request({
47 url
: me
.getViewModel().get('baseurl') + '/' + rec
.data
.oclass
+ '/'+ rec
.data
.typeid
,
49 waitMsgTarget
: me
.getView(),
50 callback: function() {
53 failure: function (response
, opts
) {
54 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
62 addObjectGroup: function(type
, record
) {
64 var baseurl
= me
.getViewModel().get('baseurl');
65 var url
= baseurl
+ '/' + type
;
66 var id
= (type
=== 'action')?record
.data
.ogroup
:record
.data
.id
;
67 Proxmox
.Utils
.API2Request({
69 params
: { ogroup
: id
},
71 waitMsgTarget
: me
.getView(),
72 callback: function() {
75 failure: function (response
, opts
) {
76 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
81 setRuleInfo: function(ruledata
) {
84 var viewmodel
= me
.getViewModel();
86 if (ruledata
=== undefined) {
88 viewmodel
.set('selectedRule', null);
89 viewmodel
.get('objects').setData([]);
93 ruledata
.name
= Ext
.String
.htmlEncode(ruledata
.name
);
94 viewmodel
.set('selectedRule', ruledata
);
97 Ext
.Array
.each(['from', 'to', 'when', 'what', 'action'], function(oc
) {
99 var store
= viewmodel
.get(oc
+ 'objects');
100 if (ruledata
[oc
] === undefined || store
=== undefined) { return; }
102 // we build a filter for the objects,
103 // which are already added to the rule,
104 // so what we only show the ones,
105 // which are still available
107 var ids
= Ext
.Array
.pluck(ruledata
[oc
], 'id');
108 // for the actions, we have a different id field
109 var idField
= (oc
=== 'action')?'ogroup':'id';
112 filterFn:function(record
){
114 // actions have the ogroup as a string
116 return (ids
.indexOf(parseInt(record
.data
[idField
])) === -1);
120 Ext
.Array
.each(ruledata
[oc
], function(og
) {
121 data
.push({ oclass
: oc
, name
: og
.name
, typeid
: og
.id
});
125 viewmodel
.get('objects').setData(data
);
129 removeIconClick: function(gridView
, rowindex
, colindex
, button
, event
, record
) {
131 me
.removeObjectGroup(record
);
134 removeDrop: function(gridView
, data
, overModel
) {
136 var record
= data
.records
[0]; // only one
137 me
.removeObjectGroup(record
);
141 addIconClick: function(gridView
, rowindex
, colindex
, button
, event
, record
) {
143 me
.addObjectGroup(gridView
.panel
.type
, record
);
147 addDrop: function(gridView
, data
, overModel
) {
149 var record
= data
.records
[0]; // only one
150 me
.addObjectGroup(data
.view
.panel
.type
, record
);
155 'grid[reference=usedobjects]': {
158 'tabpanel[reference=availobjects] > grid': {
171 fields
: ['oclass', 'name', 'typeid'],
172 groupField
: 'oclass',
177 model
: 'pmg-action-list',
180 url
: "/api2/json/config/ruledb/action/objects"
185 model
: 'pmg-object-group',
188 url
: "/api2/json/config/ruledb/who"
193 model
: 'pmg-object-group',
196 url
: "/api2/json/config/ruledb/who"
201 model
: 'pmg-object-group',
204 url
: "/api2/json/config/ruledb/what"
209 model
: 'pmg-object-group',
212 url
: "/api2/json/config/ruledb/when"
224 bodyPadding
: '5 0 5 0',
242 name
: '{selectedRule.name}',
243 priority
: '{selectedRule.priority}',
244 active
: '{selectedRule.active}',
245 direction
: '{selectedRule.direction}',
246 selected
: '{selectedRule}'
250 '<tpl if="selected">',
251 '<b>{name}</b><br><br>',
252 'Priority: {priority}<br>',
253 'Direction: {[PMG.Utils.format_rule_direction(values.direction)]}<br>',
254 'Active: {[Proxmox.Utils.format_boolean(values.active)]}<br>',
256 gettext('Please select a rule.'),
262 reference
: 'usedobjects',
264 emptyText
: gettext('No Objects'),
268 enableGroupingMenu
: false,
271 '{[PMG.Utils.format_oclass(values.name)]}'
275 title
: gettext('Used Objects'),
279 ptype
: 'gridviewdragdrop',
281 dragGroup
: 'usedobjects',
282 dropGroup
: 'unusedobjects',
284 // do not show default grid dragdrop behaviour
288 handleNodeDrop
: Ext
.emptyFn
295 header
: gettext('Type'),
300 header
: gettext('Name'),
306 xtype
: 'actioncolumn',
311 iconCls
: 'fa fa-fw fa-minus-circle',
312 tooltip
: gettext('Remove'),
313 handler
: 'removeIconClick'
321 hidden
: '{!selectedRule}'
326 title
: gettext('Available Objects'),
327 reference
: 'availobjects',
330 hidden
: '{!selectedRule}'
334 emptyText
: gettext('No Objects'),
337 ptype
: 'gridviewdragdrop',
338 dragGroup
: 'unusedobjects',
339 dropGroup
: 'usedobjects',
341 // do not show default grid dragdrop behaviour
345 handleNodeDrop
: Ext
.emptyFn
351 header
: gettext('Name'),
357 xtype
: 'actioncolumn',
362 iconCls
: 'fa fa-fw fa-plus-circle',
363 tooltip
: gettext('Add'),
364 handler
: 'addIconClick'
372 title
: gettext('Action'),
374 store
: '{actionobjects}'
377 iconCls
: 'fa fa-flag'
380 title
: gettext('From'),
381 iconCls
: 'fa fa-user-circle',
384 store
: '{fromobjects}'
388 title
: gettext('To'),
389 iconCls
: 'fa fa-user-circle',
396 title
: gettext('What'),
397 iconCls
: 'fa fa-cube',
400 store
: '{whatobjects}'
404 title
: gettext('When'),
405 iconCls
: 'fa fa-clock-o',
408 store
: '{whenobjects}'