Robert Vogel has uploaded a new change for review.
https://gerrit.wikimedia.org/r/172539
Change subject: UserManager: Added multi select features
......................................................................
UserManager: Added multi select features
* Added checkbox column
* Added multi group assginment
* Added rowexpander for group lists (experimental)
Change-Id: Ib8b840e8108ad0ba0be28e17342622a721515cd9
---
M UserManager/UserManager.setup.php
R UserManager/resources/BS.UserManager/dialog/User.js
A UserManager/resources/BS.UserManager/dialog/UserGroups.js
R UserManager/resources/BS.UserManager/panel/Manager.js
M UserManager/resources/bluespice.userManager.js
5 files changed, 199 insertions(+), 31 deletions(-)
git pull
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceExtensions
refs/changes/39/172539/1
diff --git a/UserManager/UserManager.setup.php
b/UserManager/UserManager.setup.php
index 4758fd0..2d560d0 100644
--- a/UserManager/UserManager.setup.php
+++ b/UserManager/UserManager.setup.php
@@ -31,4 +31,5 @@
$wgAjaxExportList[] = 'UserManager::getUsers';
$wgAjaxExportList[] = 'UserManager::addUser';
$wgAjaxExportList[] = 'UserManager::editUser';
-$wgAjaxExportList[] = 'UserManager::deleteUser';
\ No newline at end of file
+$wgAjaxExportList[] = 'UserManager::deleteUser';
+$wgAjaxExportList[] = 'UserManager::setUserGroups';
\ No newline at end of file
diff --git a/UserManager/resources/BS.UserManager/UserDialog.js
b/UserManager/resources/BS.UserManager/dialog/User.js
similarity index 97%
rename from UserManager/resources/BS.UserManager/UserDialog.js
rename to UserManager/resources/BS.UserManager/dialog/User.js
index e6b58b7..5b545b1 100644
--- a/UserManager/resources/BS.UserManager/UserDialog.js
+++ b/UserManager/resources/BS.UserManager/dialog/User.js
@@ -12,7 +12,7 @@
* @filesource
*/
-Ext.define( 'BS.UserManager.UserDialog', {
+Ext.define( 'BS.UserManager.dialog.User', {
extend: 'BS.Window',
currentData: {},
selectedData: {},
@@ -56,7 +56,7 @@
labelAlign: 'right',
name: 'realname'
});
-
+
this.cbGroups = Ext.create( 'Ext.ux.form.MultiSelect', {
fieldLabel:
mw.message('bs-usermanager-headergroups').plain(),
labelWidth: 130,
@@ -106,7 +106,7 @@
return this.selectedData;
},
-
+
getGroupsValue: function( data ) {
var groups = [];
for( var i = 0; i < data.length; i++ ) {
diff --git a/UserManager/resources/BS.UserManager/dialog/UserGroups.js
b/UserManager/resources/BS.UserManager/dialog/UserGroups.js
new file mode 100644
index 0000000..c82260d
--- /dev/null
+++ b/UserManager/resources/BS.UserManager/dialog/UserGroups.js
@@ -0,0 +1,63 @@
+/**
+ * UserManager UserGroups Dialog
+ *
+ * Part of BlueSpice for MediaWiki
+ *
+ * @author Robert Vogel <[email protected]>
+ * @package Bluespice_Extensions
+ * @subpackage UserManager
+ * @copyright Copyright (C) 2014 Hallo Welt! - Medienwerkstatt GmbH, All
rights reserved.
+ * @license http://www.gnu.org/copyleft/gpl.html GNU Public License v2 or
later
+ * @filesource
+ */
+
+Ext.define( 'BS.UserManager.dialog.UserGroups', {
+ extend: 'BS.Window',
+ currentData: {},
+ selectedData: {},
+ maxHeight: 620,
+ title: mw.message('bs-usermanager-headergroups').plain(),
+ afterInitComponent: function() {
+ if( this.currentData.groups ) {
+ this.cbGroups.setValue(
this.getGroupsValue(this.currentData.groups) );
+ }
+
+ this.cbGroups = Ext.create( 'Ext.ux.form.MultiSelect', {
+ fieldLabel:
mw.message('bs-usermanager-headergroups').plain(),
+ labelWidth: 130,
+ labelAlign: 'right',
+ store: this.strGroups,
+ valueField: 'group',
+ displayField: 'displayname',
+ maxHeight: 350
+ } );
+
+ this.items = [
+ this.cbGroups
+ ];
+
+ this.callParent(arguments);
+ },
+ resetData: function() {
+ this.cbGroups.reset();
+
+ this.callParent(arguments);
+ },
+ setData: function( obj ) {
+ this.currentData = obj;
+ this.cbGroups.setValue(
this.getGroupsValue(this.currentData.groups) );
+ },
+ getData: function() {
+ this.selectedData.groups = this.cbGroups.getValue();
+
+ return this.selectedData;
+ },
+
+ getGroupsValue: function( data ) {
+ var groups = [];
+ for( var i = 0; i < data.length; i++ ) {
+ groups.push( data[i].group );
+ }
+ return groups;
+ }
+} );
\ No newline at end of file
diff --git a/UserManager/resources/BS.UserManager/Panel.js
b/UserManager/resources/BS.UserManager/panel/Manager.js
similarity index 65%
rename from UserManager/resources/BS.UserManager/Panel.js
rename to UserManager/resources/BS.UserManager/panel/Manager.js
index de77aca..c80c8b5 100644
--- a/UserManager/resources/BS.UserManager/Panel.js
+++ b/UserManager/resources/BS.UserManager/panel/Manager.js
@@ -12,14 +12,12 @@
* @filesource
*/
-Ext.define( 'BS.UserManager.Panel', {
+Ext.define( 'BS.UserManager.panel.Manager', {
extend: 'BS.CRUDGridPanel',
+ requires: [ 'BS.UserManager.dialog.User',
'BS.UserManager.dialog.UserGroups' ],
id: 'bs-usermanager-extgrid',
features: [],
initComponent: function() {
- this.smMain = this.smMain || Ext.create(
'Ext.selection.RowModel', {
- mode: "MULTI"
- });
this.strMain = Ext.create( 'Ext.data.JsonStore', {
proxy: {
type: 'ajax',
@@ -33,12 +31,13 @@
},
autoLoad: true,
remoteSort: true,
- fields: [ 'user_id', 'user_name', 'user_page',
'user_real_name', 'user_email', 'groups' ],
+ fields: [ 'user_id', 'user_name', 'user_page_link',
'user_real_name', 'user_email', 'groups' ],
sortInfo: {
field: 'id',
direction: 'ASC'
}
});
+
this.strGroups = Ext.create( 'Ext.data.JsonStore', {
fields: [ 'group', 'displayname' ],
proxy: {
@@ -66,21 +65,24 @@
header:
mw.message('bs-usermanager-headerusername').plain(),
sortable: true,
dataIndex: 'user_name',
- tpl: '<a href="{user_page}">{user_name}</a>'
+ tpl: '{user_page_link}',
+ flex: 1
} );
this.colRealName = Ext.create( 'Ext.grid.column.Template', {
id: 'userrealname',
header:
mw.message('bs-usermanager-headerrealname').plain(),
sortable: true,
dataIndex: 'user_real_name',
- tpl: '{user_real_name}'
+ tpl: '{user_real_name}',
+ flex: 1
} );
this.colEmail = Ext.create( 'Ext.grid.column.Column', {
id: this.getId()+'-useremail',
header:
mw.message('bs-usermanager-headeremail').plain(),
sortable: true,
dataIndex: 'user_email',
- renderer: this.renderEmail
+ renderer: this.renderEmail,
+ flex: 1
} );
this.colGroups = Ext.create( 'Ext.grid.column.Column', {
header:
mw.message('bs-usermanager-headergroups').plain(),
@@ -111,6 +113,15 @@
});
this.gpMainConf.features = [this.filters];
+ this.gpMainConf.plugins = [{
+ ptype: 'rowexpander',
+ rowBodyTpl : new Ext.XTemplate(
+ '<ul>',
+ '<tpl for="groups">',
+ '<li>{displayname}</li>',
+ '</tpl></ul>'
+ )
+ }];
this.colMainConf.columns = [
this.colUserName,
@@ -120,14 +131,35 @@
];
this.callParent( arguments );
},
+
+ makeSelModel: function(){
+ this.smModel = Ext.create( 'Ext.selection.CheckboxModel', {
+ mode: "MULTI",
+ selType: 'checkboxmodel'
+ });
+ return this.smModel;
+ },
+
+ makeGridColumns: function() {
+ var columns = this.callParent(arguments);
+ return {
+ items: columns.items
+ };
+ },
+
renderGroups: function( value ) {
+ return value.length;
+/*
if ( value.length === 0 ) return '';
- var html = '<ul class="bs-extjs-list">';
+ var html = '<div class="bs-extjs-list">';
+ var items = [];
for ( var i = 0; i < value.length; i++ ) {
- html += '<li>' + value[i].displayname + '</li>';
+ items.push( '<li>' + value[i].displayname + '</li>' );
}
- html += '</ul>';
+ html += items.join( '' );
+ html += '</div>';
+*/
return html;
},
renderEmail: function( value ) {
@@ -135,9 +167,19 @@
return '<a href="mailto:' + value + '">' + value + '</a>';
},
+ onGrdMainRowClick: function( oSender, iRowIndex, oEvent ) {
+ this.callParent(arguments);
+ /*
+ * We override base class functionality which disables edit
button on
+ * multi selection
+ */
+ this.btnEdit.enable();
+ },
onBtnAddClick: function( oButton, oEvent ) {
if ( !this.dlgUserAdd ) {
- this.dlgUserAdd = Ext.create(
'BS.UserManager.UserDialog', {strGroups:this.strGroups} );
+ this.dlgUserAdd = new BS.UserManager.dialog.User({
+ strGroups:this.strGroups
+ });
this.dlgUserAdd.on( 'ok', this.onDlgUserAddOk, this );
}
@@ -148,24 +190,44 @@
this.callParent( arguments );
},
onBtnEditClick: function( oButton, oEvent ) {
- var selectedRow =
this.grdMain.getSelectionModel().getSelection();
- if ( !this.dlgUserEdit ) {
- this.dlgUserEdit = Ext.create(
'BS.UserManager.UserDialog', {strGroups:this.strGroups} );
- this.dlgUserEdit.on( 'ok', this.onDlgUserEditOk, this );
+ var selectedRows =
this.grdMain.getSelectionModel().getSelection();
+ if( selectedRows.length > 1 ) { //Multiselect
+ if ( !this.dlgUserGroups ) {
+ this.dlgUserGroups = new
BS.UserManager.dialog.UserGroups({
+ strGroups:this.strGroups
+ });
+ this.dlgUserGroups.on( 'ok',
this.onDlgUserGroupsOk, this );
+ }
+
+ this.active = 'edit-multi-groups';
+ this.dlgUserGroups.setData( { groups: [] } );
+ this.dlgUserGroups.show();
+ }
+ else { //Single select
+ if ( !this.dlgUserEdit ) {
+ this.dlgUserEdit = new
BS.UserManager.dialog.User({
+ strGroups:this.strGroups
+ });
+ this.dlgUserEdit.on( 'ok',
this.onDlgUserEditOk, this );
+ }
+
+ this.active = 'edit';
+ this.dlgUserEdit.setTitle( mw.message(
'bs-usermanager-titleeditdetails' ).plain() );
+ this.dlgUserEdit.tfUserName.disable();
+ this.dlgUserEdit.setData( selectedRows[0].getData() );
+ this.dlgUserEdit.show();
}
- this.active = 'edit';
- this.dlgUserEdit.setTitle( mw.message(
'bs-usermanager-titleeditdetails' ).plain() );
- this.dlgUserEdit.tfUserName.disable();
- this.dlgUserEdit.setData( selectedRow[0].getData() );
- this.dlgUserEdit.show();
this.callParent( arguments );
},
onBtnRemoveClick: function( oButton, oEvent ) {
bs.util.confirm(
'UMremove',
{
- text: mw.message(
'bs-usermanager-confirmdeleteuser',
this.grdMain.getSelectionModel().getSelection().length ).text(),
+ text: mw.message(
+ 'bs-usermanager-confirmdeleteuser',
+
this.grdMain.getSelectionModel().getSelection().length
+ ).text(),
title: mw.message(
'bs-usermanager-titledeleteuser' ).plain()
},
{
@@ -177,7 +239,7 @@
},
onRemoveUserOk: function() {
var selectedRow =
this.grdMain.getSelectionModel().getSelection();
- for (var i = 0; i<selectedRow.length; i++){
+ for (var i = 0; i < selectedRow.length; i++){
var userId = selectedRow[i].get( 'user_id' );
Ext.Ajax.request( {
@@ -248,14 +310,35 @@
failure: function( response, opts ) {}
});
},
+ onDlgUserGroupsOk: function( sender, data ) {
+ var selectedRow =
this.grdMain.getSelectionModel().getSelection();
+ var userIds = [];
+ for (var i = 0; i < selectedRow.length; i++){
+ userIds.push( selectedRow[i].get( 'user_id' ) );
+ }
+ Ext.Ajax.request( {
+ url: bs.util.getAjaxDispatcherUrl(
+ 'UserManager::setUserGroups',
+ [ userIds, data.groups ]
+ ),
+ scope: this,
+ method: 'post',
+ success: function( response, opts ) {
+ var responseObj = Ext.decode(
response.responseText );
+ this.renderMsgSuccess( responseObj );
+ }
+ });
+ },
reloadStore: function() {
this.strMain.reload();
},
showDlgAgain: function() {
if ( this.active === 'add' ) {
this.dlgUserAdd.show();
- } else {
+ } else if ( this.active === 'edit' ) {
this.dlgUserEdit.show();
+ } else if ( this.active === 'edit-multi-groups' ) {
+ this.dlgUserGroupsEdit.show();
}
},
renderMsgSuccess: function( responseObj ) {
@@ -266,7 +349,17 @@
message = message + responseObj.message[i] +
'<br />';
}
- bs.util.alert( 'UMsuc', { text: message, titleMsg:
'bs-extjs-title-success' }, { ok: this.reloadStore, cancel: function() {},
scope: this } );
+ bs.util.alert(
+ 'UMsuc',
+ {
+ text: message,
+ titleMsg: 'bs-extjs-title-success' },
+ {
+ ok: this.reloadStore,
+ cancel: function() {},
+ scope: this
+ }
+ );
}
},
renderMsgFailure: function( responseObj ) {
@@ -276,7 +369,18 @@
if ( typeof( responseObj.errors[i].message )
!== 'string') continue;
message = message +
responseObj.errors[i].message + '<br />';
}
- bs.util.alert( 'UMfail', { text: message, titleMsg:
'bs-extjs-title-warning' }, { ok: this.showDlgAgain, cancel: function() {},
scope: this } );
+ bs.util.alert(
+ 'UMfail',
+ {
+ text: message,
+ titleMsg: 'bs-extjs-title-warning'
+ },
+ {
+ ok: this.showDlgAgain,
+ cancel: function() {},
+ scope: this
+ }
+ );
}
}
} );
\ No newline at end of file
diff --git a/UserManager/resources/bluespice.userManager.js
b/UserManager/resources/bluespice.userManager.js
index 92400ee..e74caac 100644
--- a/UserManager/resources/bluespice.userManager.js
+++ b/UserManager/resources/bluespice.userManager.js
@@ -10,6 +10,6 @@
* @filesource
*/
-Ext.create( 'BS.UserManager.Panel', {
+Ext.create( 'BS.UserManager.panel.Manager', {
renderTo: 'bs-usermanager-grid'
} );
\ No newline at end of file
--
To view, visit https://gerrit.wikimedia.org/r/172539
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib8b840e8108ad0ba0be28e17342622a721515cd9
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions
Gerrit-Branch: master
Gerrit-Owner: Robert Vogel <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits