]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/SecurityGroups.js
use Proxmox.button.StdRemoveButton where possible
[pve-manager.git] / www / manager6 / dc / SecurityGroups.js
CommitLineData
1774f148
DC
1Ext.define('pve-security-groups', {
2 extend: 'Ext.data.Model',
3
4 fields: [ 'group', 'comment', 'digest' ],
5 idProperty: 'group'
6});
7
8e4bf8c5
DM
8Ext.define('PVE.SecurityGroupEdit', {
9 extend: 'PVE.window.Edit',
10
11 base_url: "/cluster/firewall/groups",
12
13 allow_iface: false,
14
15 initComponent : function() {
8e4bf8c5
DM
16 var me = this;
17
d5e771ce 18 me.isCreate = (me.group_name === undefined);
8e4bf8c5
DM
19
20 var subject;
21
22 me.url = '/api2/extjs' + me.base_url;
23 me.method = 'POST';
24
25 var items = [
26 {
27 xtype: 'textfield',
28 name: 'group',
29 value: me.group_name || '',
30 fieldLabel: gettext('Name'),
31 allowBlank: false
32 },
33 {
34 xtype: 'textfield',
35 name: 'comment',
36 value: me.group_comment || '',
37 fieldLabel: gettext('Comment')
38 }
39 ];
40
d5e771ce 41 if (me.isCreate) {
8e4bf8c5
DM
42 subject = gettext('Security Group');
43 } else {
44 subject = gettext('Security Group') + " '" + me.group_name + "'";
45 items.push({
46 xtype: 'hiddenfield',
47 name: 'rename',
48 value: me.group_name
49 });
50 }
51
52 var ipanel = Ext.create('PVE.panel.InputPanel', {
d5e771ce
EK
53 // InputPanel does not have a 'create' property, does it need a 'isCreate'
54 isCreate: me.isCreate,
8e4bf8c5
DM
55 items: items
56 });
57
58
59 Ext.apply(me, {
60 subject: subject,
61 items: [ ipanel ]
62 });
63
64 me.callParent();
65 }
66});
67
68Ext.define('PVE.SecurityGroupList', {
69 extend: 'Ext.grid.Panel',
70 alias: 'widget.pveSecurityGroupList',
71
123e1c80
DC
72 stateful: true,
73 stateId: 'grid-securitygroups',
74
8e4bf8c5
DM
75 rule_panel: undefined,
76
77 addBtn: undefined,
78 removeBtn: undefined,
79 editBtn: undefined,
80
81 base_url: "/cluster/firewall/groups",
82
83 initComponent: function() {
84 /*jslint confusion: true */
85 var me = this;
86
87 if (me.rule_panel == undefined) {
88 throw "no rule panel specified";
89 }
90
91 if (me.base_url == undefined) {
92 throw "no base_url specified";
93 }
94
95 var store = new Ext.data.Store({
1774f148 96 model: 'pve-security-groups',
8e4bf8c5
DM
97 proxy: {
98 type: 'pve',
99 url: '/api2/json' + me.base_url
100 },
8e4bf8c5
DM
101 sorters: {
102 property: 'group',
103 order: 'DESC'
104 }
105 });
106
107 var sm = Ext.create('Ext.selection.RowModel', {});
108
109 var reload = function() {
110 var oldrec = sm.getSelection()[0];
111 store.load(function(records, operation, success) {
112 if (oldrec) {
113 var rec = store.findRecord('group', oldrec.data.group);
114 if (rec) {
115 sm.select(rec);
116 }
117 }
118 });
119 };
120
121 var run_editor = function() {
122 var rec = sm.getSelection()[0];
123 if (!rec) {
124 return;
125 }
126 var win = Ext.create('PVE.SecurityGroupEdit', {
127 digest: rec.data.digest,
128 group_name: rec.data.group,
129 group_comment: rec.data.comment
130 });
131 win.show();
132 win.on('destroy', reload);
133 };
134
135 me.editBtn = new PVE.button.Button({
136 text: gettext('Edit'),
137 disabled: true,
138 selModel: sm,
139 handler: run_editor
140 });
141
142 me.addBtn = new PVE.button.Button({
143 text: gettext('Create'),
144 handler: function() {
145 sm.deselectAll();
146 var win = Ext.create('PVE.SecurityGroupEdit', {});
147 win.show();
148 win.on('destroy', reload);
149 }
150 });
151
3b1ca3ff 152 me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', {
8e4bf8c5 153 selModel: sm,
3b1ca3ff
DC
154 baseurl: me.base_url + '/',
155 enableFn: function(rec) {
156 return (rec && me.base_url);
157 },
158 callback: function() {
159 reload();
8e4bf8c5
DM
160 }
161 });
162
163 Ext.apply(me, {
164 store: store,
165 tbar: [ '<b>' + gettext('Group') + ':</b>', me.addBtn, me.removeBtn, me.editBtn ],
166 selModel: sm,
167 columns: [
123e1c80 168 { header: gettext('Group'), dataIndex: 'group', width: '100' },
2eb0767b 169 { header: gettext('Comment'), dataIndex: 'comment', renderer: Ext.String.htmlEncode, flex: 1 }
8e4bf8c5
DM
170 ],
171 listeners: {
172 itemdblclick: run_editor,
173 select: function(sm, rec) {
174 var url = '/cluster/firewall/groups/' + rec.data.group;
175 me.rule_panel.setBaseUrl(url);
176 },
177 deselect: function() {
178 me.rule_panel.setBaseUrl(undefined);
179 },
180 show: reload
181 }
182 });
183
184 me.callParent();
185
186 store.load();
187 }
188});
189
190Ext.define('PVE.SecurityGroups', {
191 extend: 'Ext.panel.Panel',
192 alias: 'widget.pveSecurityGroups',
193
194 title: 'Security Groups',
195
196 initComponent: function() {
197 var me = this;
198
199 var rule_panel = Ext.createWidget('pveFirewallRules', {
200 region: 'center',
201 allow_groups: false,
202 list_refs_url: '/cluster/firewall/refs',
203 tbar_prefix: '<b>' + gettext('Rules') + ':</b>',
8e4bf8c5
DM
204 border: false
205 });
206
207 var sglist = Ext.createWidget('pveSecurityGroupList', {
208 region: 'west',
209 rule_panel: rule_panel,
123e1c80 210 width: '25%',
8e4bf8c5
DM
211 border: false,
212 split: true
213 });
214
215
216 Ext.apply(me, {
217 layout: 'border',
218 items: [ sglist, rule_panel ],
219 listeners: {
220 show: function() {
221 sglist.fireEvent('show', sglist);
222 }
223 }
224 });
225
226 me.callParent();
227 }
228});