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