]> git.proxmox.com Git - pmg-gui.git/blob - js/UserView.js
implement local user panel
[pmg-gui.git] / js / UserView.js
1 Ext.define('pmg-users', {
2 extend: 'Ext.data.Model',
3 fields: [
4 'userid', 'firstname', 'lastname' , 'email', 'comment',
5 'role', 'keys',
6 { type: 'boolean', name: 'enable' },
7 { type: 'date', dateFormat: 'timestamp', name: 'expire' }
8 ],
9 proxy: {
10 type: 'proxmox',
11 url: "/api2/json/access/users"
12 },
13 idProperty: 'userid'
14 });
15
16 Ext.define('PMG.UserView', {
17 extend: 'Ext.grid.GridPanel',
18 alias: 'widget.pmgUserView',
19
20 initComponent : function() {
21 var me = this;
22
23 var store = new Ext.data.Store({
24 model: 'pmg-users',
25 sorters: {
26 property: 'userid',
27 order: 'DESC'
28 }
29 });
30
31 var reload = function() {
32 store.load();
33 };
34
35 var sm = Ext.create('Ext.selection.RowModel', {});
36
37 var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
38 selModel: me.selModel,
39 baseurl: '/access/users',
40 callback: reload,
41 waitMsgTarget: me
42 });
43
44 var run_editor = function() {
45 var rec = sm.getSelection()[0];
46
47 var win = Ext.create('PMG.UserEdit', {
48 userid: rec.data.userid
49 });
50 win.on('destroy', reload);
51 win.show();
52 };
53
54 var edit_btn = new Proxmox.button.Button({
55 text: gettext('Edit'),
56 disabled: true,
57 selModel: sm,
58 handler: run_editor
59 });
60
61 var pwchange_btn = new Proxmox.button.Button({
62 text: gettext('Password'),
63 disabled: true,
64 selModel: sm,
65 handler: function(btn, event, rec) {
66 var win = Ext.create('Proxmox.window.PasswordEdit',{
67 userid: rec.data.userid
68 });
69 win.on('destroy', reload);
70 win.show();
71 }
72 });
73
74 var tbar = [
75 {
76 text: gettext('Add'),
77 handler: function() {
78 var win = Ext.create('PMG.UserEdit', {});
79 win.on('destroy', reload);
80 win.show();
81 }
82 },
83 edit_btn, remove_btn, pwchange_btn
84 ];
85
86 var render_full_name = function(firstname, metaData, record) {
87 var first = firstname || '';
88 var last = record.data.lastname || '';
89 return first + " " + last;
90 };
91
92 var render_username = function(userid) {
93 return userid.match(/^(.+)(@[^@]+)$/)[1];
94 };
95
96 var render_realm = function(userid) {
97 return userid.match(/@([^@]+)$/)[1];
98 };
99
100 Ext.apply(me, {
101 store: store,
102 selModel: sm,
103 tbar: tbar,
104 viewConfig: {
105 trackOver: false
106 },
107 columns: [
108 {
109 header: gettext('User name'),
110 width: 200,
111 sortable: true,
112 renderer: render_username,
113 dataIndex: 'userid'
114 },
115 {
116 header: gettext('Realm'),
117 width: 100,
118 sortable: true,
119 renderer: render_realm,
120 dataIndex: 'userid'
121 },
122 {
123 header: gettext('Enabled'),
124 width: 80,
125 sortable: true,
126 renderer: Proxmox.Utils.format_boolean,
127 dataIndex: 'enable'
128 },
129 {
130 header: gettext('Expire'),
131 width: 80,
132 sortable: true,
133 renderer: Proxmox.Utils.format_expire,
134 dataIndex: 'expire'
135 },
136 {
137 header: gettext('Name'),
138 width: 150,
139 sortable: true,
140 renderer: render_full_name,
141 dataIndex: 'firstname'
142 },
143 {
144 header: gettext('Comment'),
145 sortable: false,
146 renderer: Ext.String.htmlEncode,
147 dataIndex: 'comment',
148 flex: 1
149 }
150 ],
151 listeners: {
152 activate: reload,
153 itemdblclick: run_editor
154 }
155 });
156
157 me.callParent();
158 }
159 });