]>
Commit | Line | Data |
---|---|---|
b7e43bc4 DM |
1 | Ext.define('PMG.UserViewModel', { |
2 | extend: 'Ext.app.ViewModel', | |
3 | alias: 'viewmodel.pmgUserViewModel', | |
4 | ||
5 | data: { | |
6 | userid: undefined, | |
7 | isCreate: true, | |
8 | isSuperUser: false, | |
9 | } | |
10 | }); | |
ec1dd829 | 11 | |
b7e43bc4 DM |
12 | Ext.define('PMG.UserEdit', { |
13 | extend: 'Proxmox.window.Edit', | |
14 | alias: ['widget.pmgUserEdit'], | |
ec1dd829 | 15 | |
b7e43bc4 | 16 | viewModel: { type: 'pmgUserViewModel' }, |
ec1dd829 | 17 | |
b7e43bc4 | 18 | isAdd: true, |
ec1dd829 | 19 | |
b7e43bc4 | 20 | subject: gettext('User'), |
ec1dd829 | 21 | |
b7e43bc4 | 22 | fieldDefaults: { labelWidth: 120 }, |
4d904e0a | 23 | |
b7e43bc4 DM |
24 | items: { |
25 | xtype: 'inputpanel', | |
b7e43bc4 DM |
26 | column1: [ |
27 | { | |
28 | xtype: 'textfield', | |
c5e49a3d | 29 | name: 'username', |
b7e43bc4 DM |
30 | fieldLabel: gettext('User name'), |
31 | allowBlank: false, | |
32 | bind: { | |
b7e43bc4 DM |
33 | submitValue: '{isCreate}', |
34 | editable: '{isCreate}' | |
35 | } | |
36 | }, | |
37 | { | |
38 | xtype: 'textfield', | |
39 | inputType: 'password', | |
40 | fieldLabel: gettext('Password'), | |
41 | minLength: 5, | |
42 | name: 'password', | |
43 | listeners: { | |
44 | change: function(field){ | |
45 | field.next().validate(); | |
46 | }, | |
47 | blur: function(field){ | |
48 | field.next().validate(); | |
49 | } | |
50 | }, | |
5c0672e4 | 51 | hidden: true, // avoid flicker |
b7e43bc4 DM |
52 | bind: { |
53 | hidden: '{!isCreate}', | |
54 | disabled: '{!isCreate}' | |
55 | } | |
56 | }, | |
57 | { | |
58 | xtype: 'textfield', | |
59 | inputType: 'password', | |
60 | fieldLabel: gettext('Confirm password'), | |
61 | name: 'verifypassword', | |
62 | vtype: 'password', | |
63 | initialPassField: 'password', | |
64 | submitValue: false, | |
5c0672e4 | 65 | hidden: true, // avoid flicker |
b7e43bc4 DM |
66 | bind: { |
67 | hidden: '{!isCreate}', | |
68 | disabled: '{!isCreate}' | |
69 | } | |
70 | }, | |
ec1dd829 | 71 | { |
c0ffdd00 | 72 | xtype: 'pmgRoleSelector', |
ec1dd829 DM |
73 | name: 'role', |
74 | allowBlank: false, | |
b7e43bc4 DM |
75 | fieldLabel: gettext('Role'), |
76 | bind: { | |
77 | disabled: '{isSuperUser}' | |
78 | } | |
ec1dd829 | 79 | }, |
b7e43bc4 | 80 | { |
ec1dd829 DM |
81 | xtype: 'datefield', |
82 | name: 'expire', | |
83 | emptyText: Proxmox.Utils.neverText, | |
84 | format: 'Y-m-d', | |
ec1dd829 | 85 | submitFormat: 'U', |
b7e43bc4 DM |
86 | fieldLabel: gettext('Expire'), |
87 | bind: { | |
88 | disabled: '{isSuperUser}' | |
89 | } | |
ec1dd829 DM |
90 | }, |
91 | { | |
92 | xtype: 'proxmoxcheckbox', | |
93 | fieldLabel: gettext('Enabled'), | |
94 | name: 'enable', | |
ec1dd829 DM |
95 | uncheckedValue: 0, |
96 | defaultValue: 1, | |
b7e43bc4 DM |
97 | checked: true, |
98 | bind: { | |
99 | disabled: '{isSuperUser}' | |
100 | } | |
ec1dd829 | 101 | } |
b7e43bc4 | 102 | ], |
ec1dd829 | 103 | |
b7e43bc4 | 104 | column2: [ |
ec1dd829 DM |
105 | { |
106 | xtype: 'proxmoxtextfield', | |
107 | name: 'firstname', | |
b7e43bc4 DM |
108 | fieldLabel: gettext('First Name'), |
109 | bind: { | |
110 | deleteEmpty: '{!isCreate}' | |
111 | } | |
ec1dd829 DM |
112 | }, |
113 | { | |
114 | xtype: 'proxmoxtextfield', | |
115 | name: 'lastname', | |
b7e43bc4 DM |
116 | fieldLabel: gettext('Last Name'), |
117 | bind: { | |
118 | deleteEmpty: '{!isCreate}' | |
119 | } | |
ec1dd829 DM |
120 | }, |
121 | { | |
122 | xtype: 'proxmoxtextfield', | |
123 | name: 'email', | |
124 | fieldLabel: gettext('E-Mail'), | |
b7e43bc4 DM |
125 | vtype: 'proxmoxMail', |
126 | bind: { | |
127 | deleteEmpty: '{!isCreate}' | |
128 | } | |
ec1dd829 | 129 | } |
b7e43bc4 | 130 | ], |
ec1dd829 | 131 | |
b7e43bc4 | 132 | columnB: [ |
ec1dd829 DM |
133 | { |
134 | xtype: 'proxmoxtextfield', | |
135 | name: 'comment', | |
b7e43bc4 DM |
136 | fieldLabel: gettext('Comment'), |
137 | bind: { | |
138 | disabled: '{isSuperUser}', | |
139 | deleteEmpty: '{!isCreate}' | |
140 | } | |
ec1dd829 DM |
141 | }, |
142 | { | |
143 | xtype: 'proxmoxtextfield', | |
144 | name: 'keys', | |
b7e43bc4 DM |
145 | fieldLabel: gettext('Key IDs'), |
146 | bind: { | |
147 | deleteEmpty: '{!isCreate}' | |
148 | } | |
ec1dd829 | 149 | } |
b7e43bc4 DM |
150 | ] |
151 | }, | |
ec1dd829 | 152 | |
b7e43bc4 | 153 | controller: { |
ec1dd829 | 154 | |
b7e43bc4 | 155 | xclass: 'Ext.app.ViewController', |
4d904e0a | 156 | |
bf01ac26 DM |
157 | initViewModel: function(viewModel) { |
158 | ||
159 | var view = this.getView(); | |
b7e43bc4 | 160 | var userid = view.userid; |
4d904e0a | 161 | |
bf01ac26 | 162 | viewModel.set('isCreate', !view.userid); |
4d904e0a | 163 | |
b7e43bc4 DM |
164 | if (userid) { |
165 | viewModel.set('userid', userid); | |
166 | if (userid === 'root@pam') { | |
167 | viewModel.set('isSuperUser', true); | |
168 | } | |
169 | } | |
170 | } | |
4d904e0a DM |
171 | }, |
172 | ||
c5e49a3d DM |
173 | getValues: function(dirtyOnly) { |
174 | var me = this; | |
175 | ||
176 | var values = me.callParent(arguments); | |
177 | ||
178 | // hack: ExtJS datefield does not submit 0, so we need to set that | |
179 | if (!values.expire) { | |
180 | values.expire = 0; | |
181 | } | |
182 | ||
183 | if (me.create) { | |
184 | values.userid = values.username + '@pmg'; | |
185 | } | |
186 | ||
187 | delete values.username; | |
188 | ||
189 | if (!values.password) { | |
190 | delete values.password; | |
191 | } | |
192 | ||
193 | return values; | |
194 | }, | |
195 | ||
2d1e22dd DM |
196 | setValues: function(values) { |
197 | var me = this; | |
198 | ||
199 | if (Ext.isDefined(values.expire)) { | |
200 | if (values.expire) { | |
201 | values.expire = new Date(values.expire * 1000); | |
202 | } else { | |
203 | // display 'never' instead of '1970-01-01' | |
204 | values.expire = null; | |
205 | } | |
206 | } | |
207 | ||
208 | me.callParent([values]); | |
209 | }, | |
210 | ||
4d904e0a DM |
211 | initComponent : function() { |
212 | var me = this; | |
213 | ||
b7e43bc4 DM |
214 | var userid = me.userid; |
215 | me.create = !userid; // fixme | |
4d904e0a | 216 | |
b7e43bc4 | 217 | if (!userid) { |
4d904e0a DM |
218 | me.url = '/api2/extjs/access/users'; |
219 | me.method = 'POST'; | |
220 | } else { | |
c62792c1 | 221 | me.autoLoad = true; |
b7e43bc4 | 222 | me.url = '/api2/extjs/access/users/' + userid; |
4d904e0a DM |
223 | me.method = 'PUT'; |
224 | } | |
225 | ||
b7e43bc4 | 226 | me.callParent(); |
ec1dd829 DM |
227 | } |
228 | }); |