-Ext.define('PMG.UserViewModel', {
- extend: 'Ext.app.ViewModel',
- alias: 'viewmodel.pmgUserViewModel',
-
- data: {
- userid: undefined,
- isCreate: true,
- isSuperUser: false,
- }
-});
-
Ext.define('PMG.UserEdit', {
extend: 'Proxmox.window.Edit',
- alias: ['widget.pmgUserEdit'],
+ alias: 'widget.pmgUserEdit',
+ mixins: ['Proxmox.Mixin.CBind'],
+ onlineHelp: 'pmgconfig_localuser',
- viewModel: { type: 'pmgUserViewModel' },
+ userid: undefined,
isAdd: true,
fieldDefaults: { labelWidth: 120 },
- items: {
- xtype: 'inputpanel',
- onGetValues: function(values) {
- var me = this;
-
- // hack: ExtJS datefield does not submit 0, so we need to set that
- if (!values.expire) {
- values.expire = 0;
- }
+ cbindData: function(initialConfig) {
+ var me = this;
- if (me.create) {
- values.userid = values.userid + '@pmg';
- }
+ var userid = initialConfig.userid;
+ var baseurl = '/api2/extjs/access/users';
- if (!values.password) {
- delete values.password;
- }
+ me.isCreate = !userid;
+ me.url = userid ? baseurl + '/' + userid : baseurl;
+ me.method = userid ? 'PUT' : 'POST';
+ me.autoLoad = !!userid;
- return values;
- },
+ return {
+ useridXType: userid ? 'displayfield' : 'textfield',
+ isSuperUser: userid === 'root@pam',
+ };
+ },
+ items: {
+ xtype: 'inputpanel',
column1: [
{
xtype: 'textfield',
- name: 'userid',
+ name: 'username',
fieldLabel: gettext('User name'),
+ renderer: Ext.htmlEncode,
allowBlank: false,
- bind: {
- value: '{userid}',
+ minLength: 4,
+ cbind: {
submitValue: '{isCreate}',
- editable: '{isCreate}'
- }
+ xtype: '{useridXType}',
+ },
},
{
xtype: 'textfield',
inputType: 'password',
fieldLabel: gettext('Password'),
minLength: 5,
+ allowBlank: false,
name: 'password',
listeners: {
- change: function(field){
+ change: function(field) {
field.next().validate();
},
- blur: function(field){
+ blur: function(field) {
field.next().validate();
- }
+ },
},
- bind: {
+ cbind: {
hidden: '{!isCreate}',
- disabled: '{!isCreate}'
- }
+ disabled: '{!isCreate}',
+ },
},
{
- xtype: 'textfield',
+ xtype: 'textfield',
inputType: 'password',
fieldLabel: gettext('Confirm password'),
name: 'verifypassword',
vtype: 'password',
initialPassField: 'password',
+ allowBlank: false,
submitValue: false,
- bind: {
+ cbind: {
hidden: '{!isCreate}',
- disabled: '{!isCreate}'
- }
+ disabled: '{!isCreate}',
+ },
},
{
xtype: 'pmgRoleSelector',
name: 'role',
allowBlank: false,
fieldLabel: gettext('Role'),
- bind: {
- disabled: '{isSuperUser}'
- }
+ cbind: {
+ disabled: '{isSuperUser}',
+ },
},
{
xtype: 'datefield',
format: 'Y-m-d',
submitFormat: 'U',
fieldLabel: gettext('Expire'),
- bind: {
- disabled: '{isSuperUser}'
- }
+ cbind: {
+ disabled: '{isSuperUser}',
+ },
},
{
xtype: 'proxmoxcheckbox',
uncheckedValue: 0,
defaultValue: 1,
checked: true,
- bind: {
- disabled: '{isSuperUser}'
- }
- }
+ cbind: {
+ disabled: '{isSuperUser}',
+ },
+ },
],
column2: [
xtype: 'proxmoxtextfield',
name: 'firstname',
fieldLabel: gettext('First Name'),
- bind: {
- deleteEmpty: '{!isCreate}'
- }
+ cbind: {
+ deleteEmpty: '{!isCreate}',
+ },
},
{
xtype: 'proxmoxtextfield',
name: 'lastname',
fieldLabel: gettext('Last Name'),
- bind: {
- deleteEmpty: '{!isCreate}'
- }
+ cbind: {
+ deleteEmpty: '{!isCreate}',
+ },
},
{
xtype: 'proxmoxtextfield',
name: 'email',
fieldLabel: gettext('E-Mail'),
vtype: 'proxmoxMail',
- bind: {
- deleteEmpty: '{!isCreate}'
- }
- }
+ cbind: {
+ deleteEmpty: '{!isCreate}',
+ },
+ },
],
columnB: [
xtype: 'proxmoxtextfield',
name: 'comment',
fieldLabel: gettext('Comment'),
- bind: {
+ cbind: {
disabled: '{isSuperUser}',
- deleteEmpty: '{!isCreate}'
- }
+ deleteEmpty: '{!isCreate}',
+ },
},
{
xtype: 'proxmoxtextfield',
name: 'keys',
fieldLabel: gettext('Key IDs'),
- bind: {
- deleteEmpty: '{!isCreate}'
- }
- }
- ]
+ cbind: {
+ deleteEmpty: '{!isCreate}',
+ },
+ },
+ ],
},
- controller: {
+ getValues: function(dirtyOnly) {
+ var me = this;
+
+ var values = me.callParent(arguments);
- xclass: 'Ext.app.ViewController',
+ // hack: ExtJS datefield does not submit 0, so we need to set that
+ if (!values.expire) {
+ values.expire = 0;
+ }
- init: function(view) {
- var userid = view.userid;
- var viewModel = view.getViewModel();
+ if (me.isCreate) {
+ values.userid = values.username + '@pmg';
+ }
- view.getViewModel().set('isCreate', !view.userid);
+ delete values.username;
- if (userid) {
- viewModel.set('userid', userid);
- if (userid === 'root@pam') {
- viewModel.set('isSuperUser', true);
- }
- }
+ if (!values.password) {
+ delete values.password;
}
+
+ return values;
},
setValues: function(values) {
me.callParent([values]);
},
-
- initComponent : function() {
- var me = this;
-
- var userid = me.userid;
- me.create = !userid; // fixme
-
- if (!userid) {
- me.url = '/api2/extjs/access/users';
- me.method = 'POST';
- } else {
- me.autoLoad = true;
- me.url = '/api2/extjs/access/users/' + userid;
- me.method = 'PUT';
- }
-
- me.callParent();
- }
});