]> git.proxmox.com Git - proxmox-backup.git/blob - www/config/UserView.js
7a869d44cf0b5726493fe9cd82b50eabe14f0b9a
[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 renderUsername: function(userid) {
55 return Ext.String.htmlEncode(userid.match(/^(.+)@([^@]+)$/)[1]);
56 },
57
58 renderRealm: function(userid) {
59 return Ext.String.htmlEncode(userid.match(/^(.+)@([^@]+)$/)[2]);
60 },
61
62 reload: function() { this.getView().getStore().rstore.load(); },
63
64 init: function(view) {
65 Proxmox.Utils.monStoreErrors(view, view.getStore().rstore);
66 },
67 },
68
69 listeners: {
70 activate: 'reload',
71 itemdblclick: 'editUser',
72 },
73
74 store: {
75 type: 'diff',
76 autoDestroy: true,
77 autoDestroyRstore: true,
78 sorters: 'userid',
79 rstore: {
80 type: 'update',
81 storeid: 'pmx-users',
82 model: 'pmx-users',
83 autoStart: true,
84 interval: 5000,
85 },
86 },
87
88 tbar: [
89 {
90 xtype: 'proxmoxButton',
91 text: gettext('Add'),
92 handler: 'addUser',
93 selModel: false,
94 },
95 {
96 xtype: 'proxmoxButton',
97 text: gettext('Edit'),
98 handler: 'editUser',
99 disabled: true,
100 },
101 {
102 xtype: 'proxmoxStdRemoveButton',
103 baseurl: '/access/users/',
104 enableFn: (rec) => rec.data.userid !== 'root@pam',
105 callback: 'reload',
106 },
107 ],
108
109 viewConfig: {
110 trackOver: false,
111 },
112
113 columns: [
114 {
115 header: gettext('User name'),
116 width: 200,
117 sortable: true,
118 renderer: 'renderUsername',
119 dataIndex: 'userid',
120 },
121 {
122 header: gettext('Realm'),
123 width: 100,
124 sortable: true,
125 renderer: 'renderRealm',
126 dataIndex: 'userid',
127 },
128 {
129 header: gettext('Enabled'),
130 width: 80,
131 sortable: true,
132 renderer: Proxmox.Utils.format_boolean,
133 dataIndex: 'enable',
134 },
135 {
136 header: gettext('Expire'),
137 width: 80,
138 sortable: true,
139 renderer: Proxmox.Utils.format_expire,
140 dataIndex: 'expire',
141 },
142 {
143 header: gettext('Name'),
144 width: 150,
145 sortable: true,
146 dataIndex: 'firstname',
147 },
148 {
149 header: gettext('Comment'),
150 sortable: false,
151 renderer: Ext.String.htmlEncode,
152 dataIndex: 'comment',
153 flex: 1,
154 },
155 ],
156 });