]> git.proxmox.com Git - pmg-gui.git/blob - js/UserView.js
js/UserView.js: use a view controller
[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', 'realm',
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 controller: {
21
22 xclass: 'Ext.app.ViewController',
23
24 renderUsername: function(userid) {
25 return userid.match(/^(.+)(@[^@]+)$/)[1];
26 },
27
28 renderFullName: function(firstname, metaData, record) {
29 var first = firstname || '';
30 var last = record.data.lastname || '';
31 return first + " " + last;
32 },
33
34 onAdd: function() {
35 var view = this.getView();
36
37 var win = Ext.create('PMG.UserEdit', {});
38 win.on('destroy', function() { view.reload() });
39 win.show();
40 },
41
42 onEdit: function() {
43 var view = this.getView();
44
45 var rec = view.selModel.getSelection()[0];
46
47 var win = Ext.create('PMG.UserEdit', {
48 userid: rec.data.userid
49 });
50 win.on('destroy', function() { view.reload() });
51 win.show();
52 },
53
54 onPassword: function(btn, event, rec) {
55 var view = this.getView();
56
57 var win = Ext.create('Proxmox.window.PasswordEdit',{
58 userid: rec.data.userid
59 });
60 win.on('destroy', function() { view.reload() });
61 win.show();
62 },
63
64 onAfterRemove: function(btn, res) {
65 var view = this.getView();
66 view.reload();
67 }
68 },
69
70 listeners: {
71 scope: 'controller',
72 itemdblclick: 'onEdit',
73 },
74
75 tbar: [
76 {
77 text: gettext('Add'),
78 reference: 'addBtn',
79 handler: 'onAdd'
80 },
81 {
82 xtype: 'proxmoxButton',
83 text: gettext('Edit'),
84 disabled: true,
85 handler: 'onEdit'
86 },
87 {
88 xtype: 'proxmoxStdRemoveButton',
89 baseurl: '/access/users',
90 reference: 'removeBtn',
91 callback: 'onAfterRemove',
92 waitMsgTarget: true
93 },
94 {
95 xtype: 'proxmoxButton',
96 text: gettext('Password'),
97 disabled: true,
98 handler: 'onPassword'
99 }
100 ],
101
102 columns: [
103 {
104 header: gettext('User name'),
105 width: 200,
106 sortable: true,
107 renderer: 'renderUsername',
108 dataIndex: 'userid'
109 },
110 {
111 header: gettext('Realm'),
112 width: 100,
113 sortable: true,
114 dataIndex: 'realm'
115 },
116 {
117 header: gettext('Enabled'),
118 width: 80,
119 sortable: true,
120 renderer: Proxmox.Utils.format_boolean,
121 dataIndex: 'enable'
122 },
123 {
124 header: gettext('Expire'),
125 width: 80,
126 sortable: true,
127 renderer: Proxmox.Utils.format_expire,
128 dataIndex: 'expire'
129 },
130 {
131 header: gettext('Name'),
132 width: 150,
133 sortable: true,
134 renderer: 'renderFullName',
135 dataIndex: 'firstname'
136 },
137 {
138 header: gettext('Comment'),
139 sortable: false,
140 renderer: Ext.String.htmlEncode,
141 dataIndex: 'comment',
142 flex: 1
143 }
144 ],
145
146 reload: function() {
147 var me = this;
148
149 me.store.load();
150 },
151
152 initComponent : function() {
153 var me = this;
154
155 me.store = new Ext.data.Store({
156 autoLoad: true,
157 model: 'pmg-users',
158 sorters: [
159 {
160 property: 'realm',
161 direction: 'ASC'
162 },
163 {
164 property: 'userid',
165 direction: 'ASC'
166 }
167 ]
168 });
169
170 me.callParent();
171 }
172 });