]> git.proxmox.com Git - pmg-gui.git/blob - js/UserView.js
bump version to 1.0-35
[pmg-gui.git] / js / UserView.js
1 /*global Proxmox*/
2 /*jslint confusion: true*/
3 /*renderer is string and function*/
4 Ext.define('pmg-users', {
5 extend: 'Ext.data.Model',
6 fields: [
7 'userid', 'firstname', 'lastname' , 'email', 'comment',
8 'role', 'keys', 'realm',
9 { type: 'boolean', name: 'enable' },
10 { type: 'date', dateFormat: 'timestamp', name: 'expire' }
11 ],
12 proxy: {
13 type: 'proxmox',
14 url: "/api2/json/access/users"
15 },
16 idProperty: 'userid'
17 });
18
19 Ext.define('PMG.UserView', {
20 extend: 'Ext.grid.GridPanel',
21 alias: 'widget.pmgUserView',
22
23 store: {
24 autoLoad: true,
25 model: 'pmg-users',
26 sorters: [
27 {
28 property: 'realm',
29 direction: 'ASC'
30 },
31 {
32 property: 'userid',
33 direction: 'ASC'
34 }
35 ]
36 },
37
38 controller: {
39
40 xclass: 'Ext.app.ViewController',
41
42 init: function(view) {
43 Proxmox.Utils.monStoreErrors(view, view.store);
44 },
45
46 renderUsername: function(userid) {
47 return Ext.htmlEncode(userid.match(/^(.+)(@[^@]+)$/)[1]);
48 },
49
50 renderFullName: function(firstname, metaData, record) {
51 var first = firstname || '';
52 var last = record.data.lastname || '';
53 return Ext.htmlEncode(first + " " + last);
54 },
55
56 onAdd: function() {
57 var view = this.getView();
58
59 var win = Ext.create('PMG.UserEdit', {});
60 win.on('destroy', function() { view.reload(); });
61 win.show();
62 },
63
64 onEdit: function() {
65 var view = this.getView();
66
67 var rec = view.selModel.getSelection()[0];
68
69 var win = Ext.create('PMG.UserEdit', {
70 userid: rec.data.userid
71 });
72 win.on('destroy', function() { view.reload(); });
73 win.show();
74 },
75
76 onPassword: function(btn, event, rec) {
77 var view = this.getView();
78
79 var win = Ext.create('Proxmox.window.PasswordEdit',{
80 userid: rec.data.userid
81 });
82 win.on('destroy', function() { view.reload(); });
83 win.show();
84 },
85
86 onAfterRemove: function(btn, res) {
87 var view = this.getView();
88 view.reload();
89 }
90 },
91
92 listeners: {
93 scope: 'controller',
94 itemdblclick: 'onEdit'
95 },
96
97 tbar: [
98 {
99 text: gettext('Add'),
100 reference: 'addBtn',
101 handler: 'onAdd'
102 },
103 {
104 xtype: 'proxmoxButton',
105 text: gettext('Edit'),
106 disabled: true,
107 handler: 'onEdit'
108 },
109 {
110 xtype: 'proxmoxStdRemoveButton',
111 baseurl: '/access/users',
112 reference: 'removeBtn',
113 callback: 'onAfterRemove',
114 waitMsgTarget: true
115 },
116 {
117 xtype: 'proxmoxButton',
118 text: gettext('Password'),
119 disabled: true,
120 handler: 'onPassword'
121 }
122 ],
123
124 columns: [
125 {
126 header: gettext('User name'),
127 width: 200,
128 sortable: true,
129 renderer: 'renderUsername',
130 dataIndex: 'userid'
131 },
132 {
133 header: gettext('Realm'),
134 width: 100,
135 sortable: true,
136 dataIndex: 'realm'
137 },
138 {
139 header: gettext('Role'),
140 width: 150,
141 sortable: true,
142 renderer: PMG.Utils.format_user_role,
143 dataIndex: 'role'
144 },
145 {
146 header: gettext('Enabled'),
147 width: 80,
148 sortable: true,
149 renderer: Proxmox.Utils.format_boolean,
150 dataIndex: 'enable'
151 },
152 {
153 header: gettext('Expire'),
154 width: 80,
155 sortable: true,
156 renderer: Proxmox.Utils.format_expire,
157 dataIndex: 'expire'
158 },
159 {
160 header: gettext('Name'),
161 width: 150,
162 sortable: true,
163 renderer: 'renderFullName',
164 dataIndex: 'firstname'
165 },
166 {
167 header: gettext('Comment'),
168 sortable: false,
169 renderer: Ext.String.htmlEncode,
170 dataIndex: 'comment',
171 flex: 1
172 }
173 ],
174
175 reload: function() {
176 var me = this;
177
178 me.store.load();
179 }
180 });