]>
Commit | Line | Data |
---|---|---|
ea4954b4 | 1 | Ext.define('PVE.dc.UserEdit', { |
9fccc702 | 2 | extend: 'Proxmox.window.Edit', |
ea4954b4 DM |
3 | alias: ['widget.pveDcUserEdit'], |
4 | ||
5 | isAdd: true, | |
6 | ||
8058410f | 7 | initComponent: function() { |
1a5df27f | 8 | let me = this; |
ea4954b4 | 9 | |
1a5df27f | 10 | me.isCreate = !me.userid; |
ea4954b4 | 11 | |
1a5df27f TL |
12 | let url = '/api2/extjs/access/users'; |
13 | let method = 'POST'; | |
14 | if (!me.isCreate) { | |
15 | url += '/' + encodeURIComponent(me.userid); | |
16 | method = 'PUT'; | |
ea4954b4 DM |
17 | } |
18 | ||
1a5df27f TL |
19 | let verifypw, pwfield; |
20 | let validate_pw = function() { | |
ea4954b4 | 21 | if (verifypw.getValue() !== pwfield.getValue()) { |
fb81dfdc | 22 | return gettext("Passwords do not match"); |
ea4954b4 DM |
23 | } |
24 | return true; | |
25 | }; | |
2a4971d8 | 26 | verifypw = Ext.createWidget('textfield', { |
ea4954b4 | 27 | inputType: 'password', |
2a4971d8 | 28 | fieldLabel: gettext('Confirm password'), |
ea4954b4 DM |
29 | name: 'verifypassword', |
30 | submitValue: false, | |
31 | disabled: true, | |
32 | hidden: true, | |
f6710aac | 33 | validator: validate_pw, |
ea4954b4 DM |
34 | }); |
35 | ||
2a4971d8 | 36 | pwfield = Ext.createWidget('textfield', { |
ea4954b4 | 37 | inputType: 'password', |
2a4971d8 | 38 | fieldLabel: gettext('Password'), |
ea4954b4 DM |
39 | minLength: 5, |
40 | name: 'password', | |
41 | disabled: true, | |
42 | hidden: true, | |
f6710aac | 43 | validator: validate_pw, |
ea4954b4 DM |
44 | }); |
45 | ||
1a5df27f TL |
46 | let column1 = [ |
47 | { | |
48 | xtype: me.isCreate ? 'textfield' : 'displayfield', | |
49 | name: 'userid', | |
50 | fieldLabel: gettext('User name'), | |
51 | value: me.userid, | |
1011b569 | 52 | renderer: Ext.String.htmlEncode, |
1a5df27f TL |
53 | allowBlank: false, |
54 | submitValue: !!me.isCreate, | |
55 | }, | |
56 | pwfield, | |
57 | verifypw, | |
ea4954b4 DM |
58 | { |
59 | xtype: 'pveGroupSelector', | |
60 | name: 'groups', | |
61 | multiSelect: true, | |
62 | allowBlank: true, | |
f6710aac | 63 | fieldLabel: gettext('Group'), |
ea4954b4 | 64 | }, |
1a5df27f | 65 | { |
3d3199a6 TL |
66 | xtype: 'pmxExpireDate', |
67 | name: 'expire', | |
1a5df27f | 68 | }, |
ea4954b4 | 69 | { |
896c0d50 | 70 | xtype: 'proxmoxcheckbox', |
ea4954b4 DM |
71 | fieldLabel: gettext('Enabled'), |
72 | name: 'enable', | |
73 | uncheckedValue: 0, | |
74 | defaultValue: 1, | |
f6710aac TL |
75 | checked: true, |
76 | }, | |
1a5df27f | 77 | ]; |
ea4954b4 | 78 | |
1a5df27f | 79 | let column2 = [ |
ea4954b4 DM |
80 | { |
81 | xtype: 'textfield', | |
82 | name: 'firstname', | |
f6710aac | 83 | fieldLabel: gettext('First Name'), |
ea4954b4 DM |
84 | }, |
85 | { | |
86 | xtype: 'textfield', | |
87 | name: 'lastname', | |
f6710aac | 88 | fieldLabel: gettext('Last Name'), |
ea4954b4 DM |
89 | }, |
90 | { | |
91 | xtype: 'textfield', | |
92 | name: 'email', | |
93 | fieldLabel: gettext('E-Mail'), | |
f6710aac TL |
94 | vtype: 'proxmoxMail', |
95 | }, | |
ea4954b4 DM |
96 | ]; |
97 | ||
1a5df27f TL |
98 | if (me.isCreate) { |
99 | column1.splice(1, 0, { | |
100 | xtype: 'pmxRealmComboBox', | |
101 | name: 'realm', | |
102 | fieldLabel: gettext('Realm'), | |
103 | allowBlank: false, | |
ea4954b4 DM |
104 | matchFieldWidth: false, |
105 | listConfig: { width: 300 }, | |
1a5df27f TL |
106 | listeners: { |
107 | change: function(combo, realm) { | |
108 | me.realm = realm; | |
109 | pwfield.setVisible(realm === 'pve'); | |
110 | pwfield.setDisabled(realm !== 'pve'); | |
111 | verifypw.setVisible(realm === 'pve'); | |
112 | verifypw.setDisabled(realm !== 'pve'); | |
113 | }, | |
114 | }, | |
115 | submitValue: false, | |
116 | }); | |
117 | } | |
ea4954b4 | 118 | |
ef4ef788 | 119 | var ipanel = Ext.create('Proxmox.panel.InputPanel', { |
ea4954b4 DM |
120 | column1: column1, |
121 | column2: column2, | |
7fb4767d TL |
122 | columnB: [ |
123 | { | |
124 | xtype: 'textfield', | |
125 | name: 'comment', | |
f6710aac TL |
126 | fieldLabel: gettext('Comment'), |
127 | }, | |
7fb4767d TL |
128 | ], |
129 | advancedItems: [ | |
130 | { | |
131 | xtype: 'textfield', | |
132 | name: 'keys', | |
f6710aac TL |
133 | fieldLabel: gettext('Key IDs'), |
134 | }, | |
7fb4767d | 135 | ], |
ea4954b4 | 136 | onGetValues: function(values) { |
1a5df27f TL |
137 | if (me.realm) { |
138 | values.userid = values.userid + '@' + me.realm; | |
ea4954b4 | 139 | } |
ea4954b4 DM |
140 | if (!values.password) { |
141 | delete values.password; | |
142 | } | |
ea4954b4 | 143 | return values; |
f6710aac | 144 | }, |
ea4954b4 DM |
145 | }); |
146 | ||
147 | Ext.applyIf(me, { | |
1a5df27f TL |
148 | subject: gettext('User'), |
149 | url: url, | |
150 | method: method, | |
ea4954b4 | 151 | fieldDefaults: { |
1a5df27f | 152 | labelWidth: 110, // some translation are quite long (e.g., Spanish) |
ea4954b4 | 153 | }, |
8058410f | 154 | items: [ipanel], |
1a5df27f | 155 | }); |
ea4954b4 | 156 | |
1a5df27f | 157 | me.callParent(); |
ea4954b4 | 158 | |
1a5df27f TL |
159 | if (!me.isCreate) { |
160 | me.load({ | |
ea4954b4 DM |
161 | success: function(response, options) { |
162 | var data = response.result.data; | |
ea4954b4 | 163 | me.setValues(data); |
5b25580d | 164 | if (data.keys) { |
8058410f | 165 | if (data.keys === 'x!oath' || data.keys === 'x!u2f') { |
5b25580d WL |
166 | me.down('[name="keys"]').setDisabled(1); |
167 | } | |
168 | } | |
1a5df27f TL |
169 | }, |
170 | }); | |
171 | } | |
f6710aac | 172 | }, |
ea4954b4 | 173 | }); |