Files
SCM-Manager/scm-webapp/src/main/webapp/resources/js/sonia.user.js

361 lines
9.1 KiB
JavaScript
Raw Normal View History

2010-11-07 19:47:58 +01:00
/**
* Copyright (c) 2010, Sebastian Sdorra
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* 3. Neither the name of SCM-Manager; nor the names of its
* contributors may be used to endorse or promote products derived from this
* software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* http://bitbucket.org/sdorra/scm-manager
*
*/
// register namespace
Ext.ns('Sonia.user');
2010-11-29 21:18:22 +01:00
// functions
Sonia.user.setEditPanel = function(panel){
var editPanel = Ext.getCmp('userEditPanel');
editPanel.removeAll();
editPanel.add(panel);
editPanel.doLayout();
}
// Panels
Sonia.user.DefaultPanel = {
region: 'south',
title: 'User Form',
padding: 5,
xtype: 'panel',
html: 'Add or select an User'
};
2010-11-07 19:47:58 +01:00
// UserGrid
2010-11-08 20:10:20 +01:00
Sonia.user.Grid = Ext.extend(Sonia.rest.Grid, {
2010-11-07 19:47:58 +01:00
initComponent: function(){
var userStore = new Sonia.rest.JsonStore({
url: restUrl + 'users.json',
root: 'users',
2010-11-25 18:57:21 +01:00
fields: [ 'name', 'displayName', 'mail', 'admin', 'type'],
2010-11-07 19:47:58 +01:00
sortInfo: {
field: 'name'
}
});
var userColModel = new Ext.grid.ColumnModel({
defaults: {
sortable: true,
scope: this,
width: 125
},
columns: [
{id: 'name', header: 'Name', dataIndex: 'name'},
{id: 'displayName', header: 'Display Name', dataIndex: 'displayName', width: 250},
{id: 'mail', header: 'Mail', dataIndex: 'mail', renderer: this.renderMailto, width: 200},
2010-11-25 18:57:21 +01:00
{id: 'admin', header: 'Admin', dataIndex: 'admin', renderer: this.renderCheckbox, width: 50},
2010-11-07 19:47:58 +01:00
{id: 'type', header: 'Type', dataIndex: 'type', width: 80}
]
});
var config = {
store: userStore,
2010-11-08 20:10:20 +01:00
colModel: userColModel
2010-11-07 19:47:58 +01:00
};
Ext.apply(this, Ext.apply(this.initialConfig, config));
Sonia.user.Grid.superclass.initComponent.apply(this, arguments);
},
2010-11-08 20:10:20 +01:00
selectItem: function(item){
2010-11-13 11:54:51 +01:00
if ( debug ){
console.debug( item.name + ' selected' );
}
var panel = new Sonia.user.FormPanel({
item: item,
region: 'south',
title: 'User Form',
padding: 5,
onUpdate: {
fn: this.reload,
scope: this
},
onCreate: {
fn: this.reload,
scope: this
}
});
panel.getForm().setValues([
{id: 'password', value: dummyPassword},
{id: 'password-confirm', value: dummyPassword}
]);
2010-11-29 21:18:22 +01:00
Sonia.user.setEditPanel(panel);
2010-11-07 19:47:58 +01:00
}
});
// register xtype
2010-11-08 20:10:20 +01:00
Ext.reg('userGrid', Sonia.user.Grid);
2010-11-10 18:37:41 +01:00
2010-11-13 11:54:51 +01:00
// passord validator
2010-11-13 11:12:14 +01:00
Ext.apply(Ext.form.VTypes, {
password: function(val, field) {
if (field.initialPassField) {
var pwd = Ext.getCmp(field.initialPassField);
return (val == pwd.getValue());
}
return true;
},
passwordText: 'The passwords entered do not match!'
});
2010-11-10 18:37:41 +01:00
// UserFormPanel
Sonia.user.FormPanel = Ext.extend(Sonia.rest.FormPanel,{
initComponent: function(){
var config = {
items: [{
fieldLabel: 'Name',
name: 'name',
2010-11-23 17:52:40 +01:00
allowBlank: false,
readOnly: this.item != null
2010-11-10 18:37:41 +01:00
},{
fieldLabel: 'DisplayName',
name: 'displayName',
allowBlank: false
},{
fieldLabel: 'Mail',
name: 'mail',
2010-11-13 11:12:14 +01:00
allowBlank: false,
vtype: 'email'
2010-11-10 18:37:41 +01:00
},{
fieldLabel: 'Password',
2010-11-13 11:12:14 +01:00
id: 'pwd',
2010-11-10 18:37:41 +01:00
name: 'password',
2010-11-13 11:12:14 +01:00
inputType: 'password',
minLength: 6,
maxLength: 32,
minLengthText: 'Password must be at least 6 characters long.'
2010-11-10 18:37:41 +01:00
},{
2010-11-13 11:54:51 +01:00
name: 'password-confirm',
2010-11-13 11:12:14 +01:00
inputType: 'password',
minLength: 6,
maxLength: 32,
minLengthText: 'Password must be at least 6 characters long.',
vtype: 'password',
initialPassField: 'pwd'
2010-11-25 18:57:21 +01:00
},{
fieldLabel: 'Administrator',
name: 'admin',
xtype: 'checkbox'
2010-11-10 18:37:41 +01:00
}]
};
Ext.apply(this, Ext.apply(this.initialConfig, config));
Sonia.user.FormPanel.superclass.initComponent.apply(this, arguments);
},
update: function(item){
2010-11-13 11:54:51 +01:00
item = Ext.apply( this.item, item );
if ( debug ){
console.debug( 'update user: ' + item.name );
}
var url = restUrl + 'users/' + item.name + '.json';
Ext.Ajax.request({
url: url,
jsonData: item,
method: 'PUT',
scope: this,
success: function(){
if ( debug ){
console.debug('update success');
}
this.execCallback(this.onUpdate, item);
},
failure: function(){
alert( 'failure' );
}
});
2010-11-10 18:37:41 +01:00
},
create: function(user){
if ( debug ){
console.debug( 'create user: ' + user.name );
}
// set user type
user.type = 'xml';
var url = restUrl + 'users.json';
Ext.Ajax.request({
url: url,
jsonData: user,
method: 'POST',
scope: this,
success: function(){
if ( debug ){
console.debug('create success');
}
this.getForm().reset();
this.execCallback(this.onCreate, user);
},
failure: function(){
alert( 'failure' );
}
});
2010-11-29 21:18:22 +01:00
},
cancel: function(){
Sonia.user.setEditPanel( Sonia.user.DefaultPanel );
2010-11-10 18:37:41 +01:00
}
});
// register xtype
Ext.reg('userForm', Sonia.user.FormPanel);
// UserPanel
Sonia.user.Panel = Ext.extend(Ext.Panel, {
initComponent: function(){
var config = {
layout: 'border',
hideMode: 'offsets',
bodyCssClass: 'x-panel-mc',
enableTabScroll: true,
region:'center',
autoScroll: true,
tbar: [
{xtype: 'tbbutton', text: 'Add', scope: this, handler: this.showAddPanel},
2010-11-13 11:54:51 +01:00
{xtype: 'tbbutton', text: 'Remove', scope: this, handler: this.removeUser},
2010-11-10 18:37:41 +01:00
'-',
2010-11-21 18:16:39 +01:00
{xtype: 'tbbutton', text: 'Reload', scope: this, handler: this.reload}
2010-11-10 18:37:41 +01:00
],
items: [{
id: 'userGrid',
xtype: 'userGrid',
region: 'center'
},{
id: 'userEditPanel',
layout: 'fit',
items: [{
region: 'south',
title: 'User Form',
xtype: 'panel',
padding: 5,
html: 'Add or select an User'
}],
height: 250,
split: true,
border: false,
region: 'south'
}]
};
Ext.apply(this, Ext.apply(this.initialConfig, config));
Sonia.user.Panel.superclass.initComponent.apply(this, arguments);
},
showAddPanel: function(){
var editPanel = Ext.getCmp('userEditPanel');
editPanel.removeAll();
var panel = new Sonia.user.FormPanel({
region: 'south',
title: 'Repository Form',
padding: 5,
onUpdate: {
fn: this.reload,
scope: this
},
onCreate: {
fn: this.reload,
scope: this
}
});
editPanel.add(panel);
editPanel.doLayout();
},
2010-11-13 11:54:51 +01:00
2010-11-29 21:18:22 +01:00
resetPanel: function(){
Sonia.user.setEditPanel( Sonia.user.DefaultPanel );
2010-11-13 11:54:51 +01:00
},
removeUser: function(){
var grid = Ext.getCmp('userGrid');
var selected = grid.getSelectionModel().getSelected();
if ( selected ){
var item = selected.data;
var url = restUrl + 'users/' + item.name + '.json';
Ext.MessageBox.show({
title: 'Remove User',
msg: 'Remove User "' + item.name + '"?',
buttons: Ext.MessageBox.OKCANCEL,
icon: Ext.MessageBox.QUESTION,
fn: function(result){
if ( result == 'ok' ){
if ( debug ){
console.debug( 'remove user ' + item.name );
}
Ext.Ajax.request({
url: url,
method: 'DELETE',
scope: this,
success: function(){
this.reload();
this.resetPanel();
},
failure: function(){
alert( 'failure' );
}
});
}
},
scope: this
});
} else if ( debug ){
console.debug( 'no repository selected' );
}
2010-11-10 18:37:41 +01:00
},
reload: function(){
2010-11-13 11:54:51 +01:00
Ext.getCmp('userGrid').reload();
2010-11-10 18:37:41 +01:00
}
});
// register xtype
Ext.reg('userPanel', Sonia.user.Panel);