]>
Commit | Line | Data |
---|---|---|
53ebd289 | 1 | Ext.define('PVE.FirewallAliasEdit', { |
9fccc702 | 2 | extend: 'Proxmox.window.Edit', |
53ebd289 DM |
3 | |
4 | base_url: undefined, | |
09b3292e | 5 | |
53ebd289 DM |
6 | alias_name: undefined, |
7 | ||
09b3292e TL |
8 | width: 400, |
9 | ||
8058410f | 10 | initComponent: function() { |
53ebd289 DM |
11 | var me = this; |
12 | ||
53e3ea84 | 13 | me.isCreate = me.alias_name === undefined; |
53ebd289 | 14 | |
d5e771ce | 15 | if (me.isCreate) { |
a22fc39f TL |
16 | me.url = '/api2/extjs' + me.base_url; |
17 | me.method = 'POST'; | |
18 | } else { | |
19 | me.url = '/api2/extjs' + me.base_url + '/' + me.alias_name; | |
20 | me.method = 'PUT'; | |
21 | } | |
53ebd289 | 22 | |
8058410f | 23 | var items = [ |
53ebd289 DM |
24 | { |
25 | xtype: 'textfield', | |
d5e771ce | 26 | name: me.isCreate ? 'name' : 'rename', |
53ebd289 | 27 | fieldLabel: gettext('Name'), |
f6710aac | 28 | allowBlank: false, |
53ebd289 DM |
29 | }, |
30 | { | |
31 | xtype: 'textfield', | |
32 | name: 'cidr', | |
33 | fieldLabel: gettext('IP/CIDR'), | |
f6710aac | 34 | allowBlank: false, |
53ebd289 DM |
35 | }, |
36 | { | |
37 | xtype: 'textfield', | |
38 | name: 'comment', | |
f6710aac TL |
39 | fieldLabel: gettext('Comment'), |
40 | }, | |
53ebd289 DM |
41 | ]; |
42 | ||
ef4ef788 | 43 | var ipanel = Ext.create('Proxmox.panel.InputPanel', { |
d5e771ce | 44 | isCreate: me.isCreate, |
f6710aac | 45 | items: items, |
53ebd289 DM |
46 | }); |
47 | ||
48 | Ext.apply(me, { | |
49 | subject: gettext('Alias'), | |
50 | isAdd: true, | |
8058410f | 51 | items: [ipanel], |
53ebd289 DM |
52 | }); |
53 | ||
54 | me.callParent(); | |
55 | ||
d5e771ce | 56 | if (!me.isCreate) { |
53ebd289 | 57 | me.load({ |
a22fc39f | 58 | success: function(response, options) { |
53ebd289 DM |
59 | var values = response.result.data; |
60 | values.rename = values.name; | |
61 | ipanel.setValues(values); | |
f6710aac | 62 | }, |
53ebd289 DM |
63 | }); |
64 | } | |
f6710aac | 65 | }, |
53ebd289 DM |
66 | }); |
67 | ||
1774f148 DC |
68 | Ext.define('pve-fw-aliases', { |
69 | extend: 'Ext.data.Model', | |
70 | ||
8058410f | 71 | fields: ['name', 'cidr', 'comment', 'digest'], |
f6710aac | 72 | idProperty: 'name', |
1774f148 DC |
73 | }); |
74 | ||
53ebd289 DM |
75 | Ext.define('PVE.FirewallAliases', { |
76 | extend: 'Ext.grid.Panel', | |
77 | alias: ['widget.pveFirewallAliases'], | |
78 | ||
9a811965 DC |
79 | onlineHelp: 'pve_firewall_ip_aliases', |
80 | ||
123e1c80 DC |
81 | stateful: true, |
82 | stateId: 'grid-firewall-aliases', | |
83 | ||
53ebd289 DM |
84 | base_url: undefined, |
85 | ||
86 | title: gettext('Alias'), | |
87 | ||
8058410f | 88 | initComponent: function() { |
53ebd289 DM |
89 | var me = this; |
90 | ||
91 | if (!me.base_url) { | |
92 | throw "missing base_url configuration"; | |
93 | } | |
94 | ||
95 | var store = new Ext.data.Store({ | |
1774f148 | 96 | model: 'pve-fw-aliases', |
53ebd289 | 97 | proxy: { |
56a353b9 | 98 | type: 'proxmox', |
f6710aac | 99 | url: "/api2/json" + me.base_url, |
53ebd289 | 100 | }, |
53ebd289 DM |
101 | sorters: { |
102 | property: 'name', | |
f6710aac TL |
103 | order: 'DESC', |
104 | }, | |
53ebd289 DM |
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) { | |
8267aa63 | 113 | var rec = store.findRecord('name', oldrec.data.name, 0, false, true, true); |
53ebd289 DM |
114 | if (rec) { |
115 | sm.select(rec); | |
116 | } | |
117 | } | |
118 | }); | |
119 | }; | |
120 | ||
121 | var run_editor = function() { | |
122 | var sm = me.getSelectionModel(); | |
123 | var rec = sm.getSelection()[0]; | |
124 | if (!rec) { | |
125 | return; | |
126 | } | |
127 | ||
128 | var win = Ext.create('PVE.FirewallAliasEdit', { | |
129 | base_url: me.base_url, | |
f6710aac | 130 | alias_name: rec.data.name, |
53ebd289 DM |
131 | }); |
132 | ||
133 | win.show(); | |
134 | win.on('destroy', reload); | |
135 | }; | |
136 | ||
5720fafa | 137 | me.editBtn = new Proxmox.button.Button({ |
53ebd289 DM |
138 | text: gettext('Edit'), |
139 | disabled: true, | |
140 | selModel: sm, | |
f6710aac | 141 | handler: run_editor, |
53ebd289 DM |
142 | }); |
143 | ||
8058410f | 144 | me.addBtn = Ext.create('Ext.Button', { |
53ebd289 DM |
145 | text: gettext('Add'), |
146 | handler: function() { | |
147 | var win = Ext.create('PVE.FirewallAliasEdit', { | |
f6710aac | 148 | base_url: me.base_url, |
53ebd289 DM |
149 | }); |
150 | win.on('destroy', reload); | |
151 | win.show(); | |
f6710aac | 152 | }, |
53ebd289 DM |
153 | }); |
154 | ||
3b1ca3ff | 155 | me.removeBtn = Ext.create('Proxmox.button.StdRemoveButton', { |
53ebd289 | 156 | selModel: sm, |
3b1ca3ff | 157 | baseurl: me.base_url + '/', |
f6710aac | 158 | callback: reload, |
53ebd289 DM |
159 | }); |
160 | ||
161 | ||
b6f01f84 | 162 | Ext.apply(me, { |
53ebd289 | 163 | store: store, |
8058410f | 164 | tbar: [me.addBtn, me.removeBtn, me.editBtn], |
53ebd289 DM |
165 | selModel: sm, |
166 | columns: [ | |
c10fabfe TL |
167 | { |
168 | header: gettext('Name'), | |
169 | dataIndex: 'name', | |
170 | flex: 1, | |
171 | }, | |
172 | { | |
8058410f | 173 | header: gettext('IP/CIDR'), |
c10fabfe TL |
174 | dataIndex: 'cidr', |
175 | flex: 1, | |
176 | }, | |
177 | { | |
178 | header: gettext('Comment'), | |
179 | dataIndex: 'comment', | |
180 | renderer: Ext.String.htmlEncode, | |
181 | flex: 3, | |
f6710aac | 182 | }, |
53ebd289 DM |
183 | ], |
184 | listeners: { | |
f6710aac TL |
185 | itemdblclick: run_editor, |
186 | }, | |
53ebd289 DM |
187 | }); |
188 | ||
189 | me.callParent(); | |
260c1540 | 190 | me.on('activate', reload); |
f6710aac | 191 | }, |
53ebd289 | 192 | }); |