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