]> git.proxmox.com Git - pve-manager.git/blob - www/manager/dc/UserEdit.js
2ef8bceab59f158507d0010edddb893300cf44a3
[pve-manager.git] / www / manager / dc / UserEdit.js
1 Ext.define('PVE.dc.UserEdit', {
2 extend: 'PVE.window.Edit',
3 alias: ['widget.pveDcUserEdit'],
4
5 isAdd: true,
6
7 initComponent : function() {
8 var me = this;
9
10 me.create = !me.userid;
11
12 var url;
13 var method;
14 var realm;
15
16 if (me.create) {
17 url = '/api2/extjs/access/users';
18 method = 'POST';
19 } else {
20 url = '/api2/extjs/access/users/' + me.userid;
21 method = 'PUT';
22 }
23
24 var verifypw;
25 var pwfield;
26
27 var validate_pw = function() {
28 if (verifypw.getValue() !== pwfield.getValue()) {
29 return gettext("Passwords does not match");
30 }
31 return true;
32 };
33
34 verifypw = Ext.createWidget('textfield', {
35 inputType: 'password',
36 fieldLabel: gettext('Confirm password'),
37 name: 'verifypassword',
38 submitValue: false,
39 disabled: true,
40 hidden: true,
41 validator: validate_pw
42 });
43
44 pwfield = Ext.createWidget('textfield', {
45 inputType: 'password',
46 fieldLabel: gettext('Password'),
47 minLength: 5,
48 name: 'password',
49 disabled: true,
50 hidden: true,
51 validator: validate_pw
52 });
53
54 var update_passwd_field = function(realm) {
55 if (realm === 'pve') {
56 pwfield.setVisible(true);
57 pwfield.setDisabled(false);
58 verifypw.setVisible(true);
59 verifypw.setDisabled(false);
60 } else {
61 pwfield.setVisible(false);
62 pwfield.setDisabled(true);
63 verifypw.setVisible(false);
64 verifypw.setDisabled(true);
65 }
66
67 };
68
69 var column1 = [
70 {
71 xtype: me.create ? 'textfield' : 'displayfield',
72 height: 22, // hack: set same height as text fields
73 name: 'userid',
74 fieldLabel: gettext('User name'),
75 value: me.userid,
76 allowBlank: false,
77 submitValue: me.create ? true : false
78 },
79 pwfield, verifypw,
80 {
81 xtype: 'pveGroupSelector',
82 name: 'groups',
83 multiSelect: true,
84 allowBlank: true,
85 fieldLabel: gettext('Group')
86 },
87 {
88 xtype: 'datefield',
89 name: 'expire',
90 emptyText: 'never',
91 format: 'Y-m-d',
92 submitFormat: 'U',
93 fieldLabel: gettext('Expire')
94 },
95 {
96 xtype: 'pvecheckbox',
97 fieldLabel: gettext('Enabled'),
98 name: 'enable',
99 uncheckedValue: 0,
100 defaultValue: 1,
101 checked: true
102 }
103 ];
104
105 var column2 = [
106 {
107 xtype: 'textfield',
108 name: 'firstname',
109 fieldLabel: gettext('First Name')
110 },
111 {
112 xtype: 'textfield',
113 name: 'lastname',
114 fieldLabel: gettext('Last Name')
115 },
116 {
117 xtype: 'textfield',
118 name: 'email',
119 fieldLabel: gettext('E-Mail'),
120 vtype: 'pveMail'
121 }
122 ];
123
124 var columnB = [
125 {
126 xtype: 'textfield',
127 name: 'comment',
128 fieldLabel: gettext('Comment')
129 },
130 {
131 xtype: 'textfield',
132 name: 'keys',
133 fieldLabel: gettext('Key IDs')
134 }
135 ];
136
137 if (me.create) {
138 column1.splice(1,0,{
139 xtype: 'pveRealmComboBox',
140 name: 'realm',
141 fieldLabel: gettext('Realm'),
142 allowBlank: false,
143 matchFieldWidth: false,
144 listConfig: { width: 300 },
145 listeners: {
146 change: function(combo, newValue){
147 realm = newValue;
148 update_passwd_field(realm);
149 }
150 },
151 submitValue: false
152 });
153 }
154
155 var ipanel = Ext.create('PVE.panel.InputPanel', {
156 column1: column1,
157 column2: column2,
158 columnB: columnB,
159 onGetValues: function(values) {
160 // hack: ExtJS datefield does not submit 0, so we need to set that
161 if (!values.expire) {
162 values.expire = 0;
163 }
164
165 if (realm) {
166 values.userid = values.userid + '@' + realm;
167 }
168
169 if (!values.password) {
170 delete values.password;
171 }
172
173 return values;
174 }
175 });
176
177 Ext.applyIf(me, {
178 subject: gettext('User'),
179 url: url,
180 method: method,
181 fieldDefaults: {
182 labelWidth: 110 // for spanish translation
183 },
184 items: [ ipanel ]
185 });
186
187 me.callParent();
188
189 if (!me.create) {
190 me.load({
191 success: function(response, options) {
192 var data = response.result.data;
193 if (Ext.isDefined(data.expire)) {
194 if (data.expire) {
195 data.expire = new Date(data.expire * 1000);
196 } else {
197 // display 'never' instead of '1970-01-01'
198 data.expire = null;
199 }
200 }
201 me.setValues(data);
202 }
203 });
204 }
205 }
206 });