]> git.proxmox.com Git - proxmox-backup.git/blob - www/config/UserView.js
ui: UserView: render name as 'Firstname Lastname'
[proxmox-backup.git] / www / config / UserView.js
1 Ext.define('pmx-users', {
2 extend: 'Ext.data.Model',
3 fields: [
4 'userid', 'firstname', 'lastname', 'email', 'comment',
5 { type: 'boolean', name: 'enable', defaultValue: true },
6 { type: 'date', dateFormat: 'timestamp', name: 'expire' },
7 ],
8 idProperty: 'userid',
9 proxy: {
10 type: 'proxmox',
11 url: '/api2/json/access/users',
12 },
13 });
14
15 Ext.define('PBS.config.UserView', {
16 extend: 'Ext.grid.GridPanel',
17 alias: 'widget.pbsUserView',
18
19 stateful: true,
20 stateId: 'grid-users',
21
22 title: gettext('Users'),
23
24 controller: {
25 xclass: 'Ext.app.ViewController',
26
27 addUser: function() {
28 let me = this;
29 Ext.create('PBS.window.UserEdit', {
30 listeners: {
31 destroy: function() {
32 me.reload();
33 },
34 },
35 }).show();
36 },
37
38 editUser: function() {
39 let me = this;
40 let view = me.getView();
41 let selection = view.getSelection();
42 if (selection.length < 1) return;
43
44 Ext.create('PBS.window.UserEdit', {
45 userid: selection[0].data.userid,
46 listeners: {
47 destroy: function() {
48 me.reload();
49 },
50 },
51 }).show();
52 },
53
54 setPassword: function() {
55 let me = this;
56 let view = me.getView();
57 let selection = view.getSelection();
58
59 if (selection.length < 1) return;
60
61 Ext.create('PBS.window.UserPassword', {
62 url: '/api2/extjs/access/users/' + selection[0].data.userid,
63 }).show();
64 },
65
66 showPermissions: function() {
67 let me = this;
68 let view = me.getView();
69 let selection = view.getSelection();
70
71 if (selection.length < 1) return;
72
73 Ext.create('Proxmox.PermissionView', {
74 auth_id: selection[0].data.userid,
75 auth_id_name: 'auth-id',
76 }).show();
77 },
78
79 renderName: function(val, cell, rec) {
80 let name = [];
81 if (rec.data.firstname) {
82 name.push(rec.data.firstname);
83 }
84 if (rec.data.lastname) {
85 name.push(rec.data.lastname);
86 }
87 return name.join(' ');
88 },
89
90 renderUsername: function(userid) {
91 return Ext.String.htmlEncode(userid.match(/^(.+)@([^@]+)$/)[1]);
92 },
93
94 renderRealm: function(userid) {
95 return Ext.String.htmlEncode(userid.match(/^(.+)@([^@]+)$/)[2]);
96 },
97
98 reload: function() { this.getView().getStore().rstore.load(); },
99
100 init: function(view) {
101 Proxmox.Utils.monStoreErrors(view, view.getStore().rstore);
102 },
103 },
104
105 listeners: {
106 activate: 'reload',
107 itemdblclick: 'editUser',
108 },
109
110 store: {
111 type: 'diff',
112 autoDestroy: true,
113 autoDestroyRstore: true,
114 sorters: 'userid',
115 rstore: {
116 type: 'update',
117 storeid: 'pmx-users',
118 model: 'pmx-users',
119 autoStart: true,
120 interval: 5000,
121 },
122 },
123
124 tbar: [
125 {
126 xtype: 'proxmoxButton',
127 text: gettext('Add'),
128 handler: 'addUser',
129 selModel: false,
130 },
131 {
132 xtype: 'proxmoxButton',
133 text: gettext('Edit'),
134 handler: 'editUser',
135 disabled: true,
136 },
137 {
138 xtype: 'proxmoxButton',
139 text: gettext('Password'),
140 handler: 'setPassword',
141 disabled: true,
142 },
143 {
144 xtype: 'proxmoxStdRemoveButton',
145 baseurl: '/access/users/',
146 enableFn: (rec) => rec.data.userid !== 'root@pam',
147 callback: 'reload',
148 },
149 {
150 xtype: 'proxmoxButton',
151 text: gettext('Permissions'),
152 handler: 'showPermissions',
153 disabled: true,
154 },
155 ],
156
157 viewConfig: {
158 trackOver: false,
159 },
160
161 columns: [
162 {
163 header: gettext('User name'),
164 width: 200,
165 sortable: true,
166 renderer: 'renderUsername',
167 dataIndex: 'userid',
168 },
169 {
170 header: gettext('Realm'),
171 width: 100,
172 sortable: true,
173 renderer: 'renderRealm',
174 dataIndex: 'userid',
175 },
176 {
177 header: gettext('Enabled'),
178 width: 80,
179 sortable: true,
180 renderer: Proxmox.Utils.format_boolean,
181 dataIndex: 'enable',
182 },
183 {
184 header: gettext('Expire'),
185 width: 80,
186 sortable: true,
187 renderer: Proxmox.Utils.format_expire,
188 dataIndex: 'expire',
189 },
190 {
191 header: gettext('Name'),
192 width: 150,
193 sortable: true,
194 dataIndex: 'firstname',
195 renderer: 'renderName',
196 },
197 {
198 header: gettext('Comment'),
199 sortable: false,
200 renderer: Ext.String.htmlEncode,
201 dataIndex: 'comment',
202 flex: 1,
203 },
204 ],
205 });