]>
Commit | Line | Data |
---|---|---|
28ec45b2 | 1 | /*jslint confusion: true */ |
ee7a4dad DM |
2 | Ext.define('PVE.dc.UserView', { |
3 | extend: 'Ext.grid.GridPanel', | |
4 | ||
5 | alias: ['widget.pveUserView'], | |
6 | ||
ba93a9c6 DC |
7 | onlineHelp: 'pveum_users', |
8 | ||
3ac2a964 DC |
9 | stateful: true, |
10 | stateId: 'grid-users', | |
11 | ||
ee7a4dad DM |
12 | initComponent : function() { |
13 | var me = this; | |
14 | ||
15 | var caps = Ext.state.Manager.get('GuiCap'); | |
16 | ||
17 | var store = new Ext.data.Store({ | |
18 | id: "users", | |
19 | model: 'pve-users', | |
20 | sorters: { | |
21 | property: 'userid', | |
22 | order: 'DESC' | |
23 | } | |
24 | }); | |
25 | ||
26 | var reload = function() { | |
27 | store.load(); | |
28 | }; | |
29 | ||
30 | var sm = Ext.create('Ext.selection.RowModel', {}); | |
31 | ||
3b1ca3ff | 32 | var remove_btn = Ext.create('Proxmox.button.StdRemoveButton', { |
ee7a4dad | 33 | selModel: sm, |
3b1ca3ff | 34 | baseurl: '/access/users/', |
ee7a4dad DM |
35 | enableFn: function(rec) { |
36 | if (!caps.access['User.Modify']) { | |
37 | return false; | |
38 | } | |
39 | return rec.data.userid !== 'root@pam'; | |
40 | }, | |
3b1ca3ff DC |
41 | callback: function() { |
42 | reload(); | |
ee7a4dad DM |
43 | } |
44 | }); | |
45 | ||
46 | var run_editor = function() { | |
47 | var rec = sm.getSelection()[0]; | |
48 | if (!rec || !caps.access['User.Modify']) { | |
49 | return; | |
50 | } | |
51 | ||
52 | var win = Ext.create('PVE.dc.UserEdit',{ | |
53 | userid: rec.data.userid | |
54 | }); | |
55 | win.on('destroy', reload); | |
56 | win.show(); | |
57 | }; | |
58 | ||
5720fafa | 59 | var edit_btn = new Proxmox.button.Button({ |
ee7a4dad DM |
60 | text: gettext('Edit'), |
61 | disabled: true, | |
62 | enableFn: function(rec) { | |
63 | return !!caps.access['User.Modify']; | |
64 | }, | |
65 | selModel: sm, | |
66 | handler: run_editor | |
67 | }); | |
68 | ||
5720fafa | 69 | var pwchange_btn = new Proxmox.button.Button({ |
ee7a4dad DM |
70 | text: gettext('Password'), |
71 | disabled: true, | |
72 | selModel: sm, | |
73 | handler: function(btn, event, rec) { | |
83c52beb | 74 | var win = Ext.create('Proxmox.window.PasswordEdit', { |
ee7a4dad DM |
75 | userid: rec.data.userid |
76 | }); | |
77 | win.on('destroy', reload); | |
78 | win.show(); | |
79 | } | |
80 | }); | |
81 | ||
24d2ed8c | 82 | var tfachange_btn = new Proxmox.button.Button({ |
31675561 | 83 | text: 'TFA', |
24d2ed8c WB |
84 | disabled: true, |
85 | selModel: sm, | |
86 | handler: function(btn, event, rec) { | |
ca7f3b34 | 87 | var d = rec.data; |
ac3daab8 | 88 | var tfa_type = PVE.Parser.parseTfaType(d.keys); |
24d2ed8c | 89 | var win = Ext.create('PVE.window.TFAEdit',{ |
ac3daab8 WB |
90 | tfa_type: tfa_type, |
91 | userid: d.userid | |
24d2ed8c WB |
92 | }); |
93 | win.on('destroy', reload); | |
94 | win.show(); | |
95 | } | |
96 | }); | |
97 | ||
ee7a4dad DM |
98 | var tbar = [ |
99 | { | |
100 | text: gettext('Add'), | |
101 | disabled: !caps.access['User.Modify'], | |
102 | handler: function() { | |
103 | var win = Ext.create('PVE.dc.UserEdit',{ | |
104 | }); | |
105 | win.on('destroy', reload); | |
106 | win.show(); | |
107 | } | |
108 | }, | |
24d2ed8c | 109 | edit_btn, remove_btn, pwchange_btn, tfachange_btn |
ee7a4dad DM |
110 | ]; |
111 | ||
ee7a4dad DM |
112 | var render_username = function(userid) { |
113 | return userid.match(/^(.+)(@[^@]+)$/)[1]; | |
114 | }; | |
115 | ||
116 | var render_realm = function(userid) { | |
117 | return userid.match(/@([^@]+)$/)[1]; | |
118 | }; | |
119 | ||
120 | Ext.apply(me, { | |
121 | store: store, | |
122 | selModel: sm, | |
ee7a4dad DM |
123 | tbar: tbar, |
124 | viewConfig: { | |
125 | trackOver: false | |
126 | }, | |
127 | columns: [ | |
128 | { | |
129 | header: gettext('User name'), | |
130 | width: 200, | |
131 | sortable: true, | |
132 | renderer: render_username, | |
133 | dataIndex: 'userid' | |
134 | }, | |
135 | { | |
136 | header: gettext('Realm'), | |
137 | width: 100, | |
138 | sortable: true, | |
139 | renderer: render_realm, | |
140 | dataIndex: 'userid' | |
141 | }, | |
142 | { | |
143 | header: gettext('Enabled'), | |
144 | width: 80, | |
145 | sortable: true, | |
e7ade592 | 146 | renderer: Proxmox.Utils.format_boolean, |
ee7a4dad DM |
147 | dataIndex: 'enable' |
148 | }, | |
149 | { | |
150 | header: gettext('Expire'), | |
151 | width: 80, | |
152 | sortable: true, | |
e7ade592 | 153 | renderer: Proxmox.Utils.format_expire, |
ee7a4dad DM |
154 | dataIndex: 'expire' |
155 | }, | |
156 | { | |
157 | header: gettext('Name'), | |
158 | width: 150, | |
159 | sortable: true, | |
6ad4be69 | 160 | renderer: PVE.Utils.render_full_name, |
ee7a4dad DM |
161 | dataIndex: 'firstname' |
162 | }, | |
bf0754fd TL |
163 | { |
164 | header: 'TFA', | |
165 | width: 50, | |
166 | sortable: true, | |
167 | renderer: function(v) { | |
da898810 WB |
168 | var tfa_type = PVE.Parser.parseTfaType(v); |
169 | if (tfa_type === undefined) { | |
170 | return Proxmox.Utils.noText; | |
171 | } else if (tfa_type === 1) { | |
172 | return Proxmox.Utils.yesText; | |
173 | } else { | |
174 | return tfa_type; | |
175 | } | |
bf0754fd TL |
176 | }, |
177 | dataIndex: 'keys' | |
178 | }, | |
ee7a4dad | 179 | { |
ee7a4dad DM |
180 | header: gettext('Comment'), |
181 | sortable: false, | |
2eb0767b | 182 | renderer: Ext.String.htmlEncode, |
ee7a4dad DM |
183 | dataIndex: 'comment', |
184 | flex: 1 | |
185 | } | |
186 | ], | |
187 | listeners: { | |
c0b3df6e | 188 | activate: reload, |
ee7a4dad DM |
189 | itemdblclick: run_editor |
190 | } | |
191 | }); | |
192 | ||
193 | me.callParent(); | |
f3c90a1d DC |
194 | |
195 | Proxmox.Utils.monStoreErrors(me, store); | |
ee7a4dad DM |
196 | } |
197 | }); |