]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/dc/UserView.js
use Button from widget toolkit
[pve-manager.git] / www / manager6 / dc / UserView.js
CommitLineData
ee7a4dad
DM
1Ext.define('PVE.window.PasswordEdit', {
2 extend: 'PVE.window.Edit',
3
4 initComponent : function() {
5 var me = this;
6
7 if (!me.userid) {
8 throw "no userid specified";
9 }
10
11 var verifypw;
12 var pwfield;
13
14 var validate_pw = function() {
15 if (verifypw.getValue() !== pwfield.getValue()) {
16 return gettext("Passwords does not match");
17 }
18 return true;
19 };
20
21 verifypw = Ext.createWidget('textfield', {
22 inputType: 'password',
23 fieldLabel: gettext('Confirm password'),
24 name: 'verifypassword',
25 submitValue: false,
26 validator: validate_pw
27 });
28
29 pwfield = Ext.createWidget('textfield', {
30 inputType: 'password',
31 fieldLabel: gettext('Password'),
32 minLength: 5,
33 name: 'password',
34 validator: validate_pw
35 });
36
37 Ext.apply(me, {
38 subject: gettext('Password'),
39 url: '/api2/extjs/access/password',
40 items: [
41 pwfield, verifypw,
42 {
43 xtype: 'hiddenfield',
44 name: 'userid',
45 value: me.userid
46 }
47 ]
48 });
49
50 me.callParent();
51 }
52});
53
54Ext.define('PVE.dc.UserView', {
55 extend: 'Ext.grid.GridPanel',
56
57 alias: ['widget.pveUserView'],
58
ba93a9c6
DC
59 onlineHelp: 'pveum_users',
60
3ac2a964
DC
61 stateful: true,
62 stateId: 'grid-users',
63
ee7a4dad
DM
64 initComponent : function() {
65 var me = this;
66
67 var caps = Ext.state.Manager.get('GuiCap');
68
69 var store = new Ext.data.Store({
70 id: "users",
71 model: 'pve-users',
72 sorters: {
73 property: 'userid',
74 order: 'DESC'
75 }
76 });
77
78 var reload = function() {
79 store.load();
80 };
81
82 var sm = Ext.create('Ext.selection.RowModel', {});
83
3b1ca3ff 84 var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', {
ee7a4dad 85 selModel: sm,
3b1ca3ff 86 baseurl: '/access/users/',
ee7a4dad
DM
87 enableFn: function(rec) {
88 if (!caps.access['User.Modify']) {
89 return false;
90 }
91 return rec.data.userid !== 'root@pam';
92 },
3b1ca3ff
DC
93 callback: function() {
94 reload();
ee7a4dad
DM
95 }
96 });
97
98 var run_editor = function() {
99 var rec = sm.getSelection()[0];
100 if (!rec || !caps.access['User.Modify']) {
101 return;
102 }
103
104 var win = Ext.create('PVE.dc.UserEdit',{
105 userid: rec.data.userid
106 });
107 win.on('destroy', reload);
108 win.show();
109 };
110
5720fafa 111 var edit_btn = new Proxmox.button.Button({
ee7a4dad
DM
112 text: gettext('Edit'),
113 disabled: true,
114 enableFn: function(rec) {
115 return !!caps.access['User.Modify'];
116 },
117 selModel: sm,
118 handler: run_editor
119 });
120
5720fafa 121 var pwchange_btn = new Proxmox.button.Button({
ee7a4dad
DM
122 text: gettext('Password'),
123 disabled: true,
124 selModel: sm,
125 handler: function(btn, event, rec) {
126 var win = Ext.create('PVE.window.PasswordEdit',{
127 userid: rec.data.userid
128 });
129 win.on('destroy', reload);
130 win.show();
131 }
132 });
133
134 var tbar = [
135 {
136 text: gettext('Add'),
137 disabled: !caps.access['User.Modify'],
138 handler: function() {
139 var win = Ext.create('PVE.dc.UserEdit',{
140 });
141 win.on('destroy', reload);
142 win.show();
143 }
144 },
145 edit_btn, remove_btn, pwchange_btn
146 ];
147
148 var render_full_name = function(firstname, metaData, record) {
149
150 var first = firstname || '';
151 var last = record.data.lastname || '';
152 return first + " " + last;
153 };
154
155 var render_username = function(userid) {
156 return userid.match(/^(.+)(@[^@]+)$/)[1];
157 };
158
159 var render_realm = function(userid) {
160 return userid.match(/@([^@]+)$/)[1];
161 };
162
163 Ext.apply(me, {
164 store: store,
165 selModel: sm,
ee7a4dad
DM
166 tbar: tbar,
167 viewConfig: {
168 trackOver: false
169 },
170 columns: [
171 {
172 header: gettext('User name'),
173 width: 200,
174 sortable: true,
175 renderer: render_username,
176 dataIndex: 'userid'
177 },
178 {
179 header: gettext('Realm'),
180 width: 100,
181 sortable: true,
182 renderer: render_realm,
183 dataIndex: 'userid'
184 },
185 {
186 header: gettext('Enabled'),
187 width: 80,
188 sortable: true,
189 renderer: PVE.Utils.format_boolean,
190 dataIndex: 'enable'
191 },
192 {
193 header: gettext('Expire'),
194 width: 80,
195 sortable: true,
196 renderer: PVE.Utils.format_expire,
197 dataIndex: 'expire'
198 },
199 {
200 header: gettext('Name'),
201 width: 150,
202 sortable: true,
203 renderer: render_full_name,
204 dataIndex: 'firstname'
205 },
206 {
ee7a4dad
DM
207 header: gettext('Comment'),
208 sortable: false,
2eb0767b 209 renderer: Ext.String.htmlEncode,
ee7a4dad
DM
210 dataIndex: 'comment',
211 flex: 1
212 }
213 ],
214 listeners: {
c0b3df6e 215 activate: reload,
ee7a4dad
DM
216 itemdblclick: run_editor
217 }
218 });
219
220 me.callParent();
221 }
222});