Smuggli has submitted this change and it was merged.
Change subject: UserManager: Added multi select features
......................................................................
UserManager: Added multi select features
* Added checkbox column
* Added multi group assginment
* Added custom expand mechanism for groups list
Change-Id: Ib8b840e8108ad0ba0be28e17342622a721515cd9
---
M UserManager/UserManager.class.php
M UserManager/UserManager.setup.php
M UserManager/i18n/de.json
M UserManager/i18n/en.json
M UserManager/i18n/qqq.json
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
9 files changed, 296 insertions(+), 58 deletions(-)
Approvals:
Smuggli: Verified; Looks good to me, approved
Raimond Spekking: Looks good to me, but someone else must approve
diff --git a/UserManager/UserManager.class.php
b/UserManager/UserManager.class.php
index 3aef28d..96bfdbe 100644
--- a/UserManager/UserManager.class.php
+++ b/UserManager/UserManager.class.php
@@ -84,7 +84,7 @@
$sDirection = $oStoreParams->getDirection();
$aFilters = $oStoreParams->getFilter();
- $aSortingParams = json_decode( $sSort );
+ $aSortingParams = FormatJson::decode( $sSort );
if ( is_array( $aSortingParams ) ) {
$sSort = $aSortingParams[0]->property;
$sDirection = $aSortingParams[0]->direction;
@@ -155,7 +155,7 @@
$tmp = array();
$tmp['user_id'] = $row->user_id;
$tmp['user_name'] = $row->user_name;
- $tmp['user_page'] = $oUserTitle->getLocalURL();
+ $tmp['user_page_link'] = Linker::link( $oUserTitle,
$row->user_name.' ' ); //The whitespace is to aviod automatic rewrite to
user_real_name by BSF
$tmp['user_real_name'] = $row->user_real_name;
$tmp['user_email'] = $row->user_email == null ? ''
: $row->user_email; //PW: Oracle returns null when field is emtpy
$tmp['groups'] = array();
@@ -179,7 +179,7 @@
$oUserManager = BsExtensionManager::getExtension( 'UserManager'
);
wfRunHooks( 'BSWikiAdminUserManagerBeforeUserListSend', array(
$oUserManager, &$data ) );
- return json_encode( $data );
+ return FormatJson::encode( $data );
}
/**
@@ -190,7 +190,7 @@
public static function addUser( $sUsername, $sPassword, $sRePassword,
$sEmail, $sRealname, $aGroups = array() ) {
if ( wfReadOnly() ) {
global $wgReadOnly;
- return json_encode( array(
+ return FormatJson::encode( array(
'success' => false,
'message' => array( wfMessage( 'bs-readonly',
$wgReadOnly )->plain() )
) );
@@ -278,7 +278,7 @@
}
if ( !empty( $aResponse['errors'] ) ) { //In case that any
error occurred
- return json_encode( $aResponse );
+ return FormatJson::encode( $aResponse );
}
$oNewUser->addToDatabase();
@@ -338,7 +338,7 @@
)
);
- return json_encode( $aResponse );
+ return FormatJson::encode( $aResponse );
}
/**
@@ -354,7 +354,7 @@
public static function editUser( $sUsername, $sPassword, $sRePassword,
$sEmail, $sRealname, $aGroups = array() ) {
if ( wfReadOnly() ) {
global $wgReadOnly;
- return json_encode( array(
+ return FormatJson::encode( array(
'success' => false,
'message' => array( wfMessage( 'bs-readonly',
$wgReadOnly )->plain() )
) );
@@ -457,7 +457,7 @@
$aAnswer['message'][] = wfMessage(
'bs-usermanager-save-successful' )->plain();
}
- return json_encode( $aAnswer );
+ return FormatJson::encode( $aAnswer );
}
/**
@@ -467,21 +467,21 @@
* @return string json encoded response
*/
public static function deleteUser( $iUserId ) {
- if ( wfReadOnly() ) {
- global $wgReadOnly;
- return json_encode( array(
- 'success' => false,
- 'message' => array( wfMessage( 'bs-readonly',
$wgReadOnly )->plain() ),
- 'errors' => array(),
- ));
- }
- if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false )
return true;
-
$aAnswer = array(
'success' => true,
'errors' => array(),
- 'message' => array(),
+ 'message' => array()
);
+
+ if ( wfReadOnly() ) {
+ global $wgReadOnly;
+ $aAnswer['success'] = false;
+ $aAnswer['message'][] = wfMessage( 'bs-readonly',
$wgReadOnly )->plain();
+ }
+ if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false ) {
+ $aAnswer['success'] = false;
+ $aAnswer['message'][] = wfMessage(
'bs-wikiadmin-notallowed' )->plain();
+ }
$oUser = User::newFromId( $iUserId );
@@ -502,7 +502,7 @@
}
if( !$aAnswer['success'] ) {
- return json_encode( $aAnswer );
+ return FormatJson::encode( $aAnswer );
}
$dbw = wfGetDB( DB_MASTER );
@@ -529,17 +529,74 @@
if ( ( $res === false ) || ( $res1 === false ) || ( $res2 ===
false ) || ( $res3 === false ) ) {
$aAnswer['success'] = false;
$aAnswer['message'][] = wfMessage(
'bs-usermanager-db-error' )->plain();
- return json_encode( $aAnswer );
+ return FormatJson::encode( $aAnswer );
}
$aAnswer['message'][] = wfMessage(
'bs-usermanager-user-deleted' )->plain();
- return json_encode( $aAnswer );
+ return FormatJson::encode( $aAnswer );
+ }
+
+ public static function setUserGroups( $aUserIds, $aGroups ) {
+ $aAnswer = array(
+ 'success' => true,
+ 'errors' => array(),
+ 'message' => array()
+ );
+
+ if ( wfReadOnly() ) {
+ global $wgReadOnly;
+ $aAnswer['success'] = false;
+ $aAnswer['message'][] = wfMessage( 'bs-readonly',
$wgReadOnly )->plain();
+ }
+
+ if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false ) {
+ $aAnswer['success'] = false;
+ $aAnswer['message'][] = wfMessage(
'bs-wikiadmin-notallowed' )->plain();
+ }
+
+ $dbw = wfGetDB( DB_MASTER );
+ $resDelGroups = $dbw->delete( 'user_groups',
+ array(
+ 'ug_user' => $aUserIds
+ )
+ );
+
+ $resInsGroups = true;
+ if( is_array( $aGroups ) ) {
+ foreach ( $aGroups as $sGroup ) {
+ if ( in_array( $sGroup, self::$excludegroups )
) {
+ continue;
+ }
+ foreach( $aUserIds as $iUserId ) {
+ $resInsGroups = $dbw->insert(
+ 'user_groups',
+ array(
+ 'ug_user' =>
(int)$iUserId,
+ 'ug_group' =>
addslashes( $sGroup )
+ )
+ );
+ if( $resInsGroups === false ) {
+ break;
+ }
+ }
+ }
+ }
+
+ if ( $resDelGroups === false || $resInsGroups === false ) {
+ $aAnswer['success'] = false;
+ $aAnswer['message'][] = wfMessage(
'bs-usermanager-db-error' )->plain();
+ }
+
+ if ( $aAnswer['success'] ) {
+ $aAnswer['message'][] = wfMessage(
'bs-usermanager-save-successful' )->plain();
+ }
+
+ return FormatJson::encode( $aAnswer );
}
public function getForm( $firsttime = false ) {
$this->getOutput()->addModules( 'ext.bluespice.userManager' );
return '<div id="bs-usermanager-grid"></div>';
}
-
}
\ No newline at end of file
diff --git a/UserManager/UserManager.setup.php
b/UserManager/UserManager.setup.php
index 4758fd0..b86b037 100644
--- a/UserManager/UserManager.setup.php
+++ b/UserManager/UserManager.setup.php
@@ -22,7 +22,8 @@
'bs-usermanager-labelpasswordcheck',
'bs-usermanager-headergroups',
'bs-usermanager-titledeleteuser',
- 'bs-usermanager-confirmdeleteuser'
+ 'bs-usermanager-confirmdeleteuser',
+ 'bs-usermanager-groups-more'
),
'localBasePath' => __DIR__ . '/resources',
'remoteExtPath' => 'BlueSpiceExtensions/UserManager/resources'
@@ -31,4 +32,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/i18n/de.json b/UserManager/i18n/de.json
index e4cb57b..879f108 100644
--- a/UserManager/i18n/de.json
+++ b/UserManager/i18n/de.json
@@ -29,5 +29,6 @@
"bs-usermanager-labelnewpassword": "Passwort",
"bs-usermanager-labelpasswordcheck": "Passwort bestätigen",
"bs-usermanager-titledeleteuser": "Benutzer löschen",
- "bs-usermanager-confirmdeleteuser": "Bist du sicher, dass du
{{PLURAL:$1|diesen|diese $1}} Benutzer löschen willst?"
+ "bs-usermanager-confirmdeleteuser": "Bist du sicher, dass du
{{PLURAL:$1|diesen|diese $1}} Benutzer löschen willst?",
+ "bs-usermanager-groups-more": "... mehr"
}
diff --git a/UserManager/i18n/en.json b/UserManager/i18n/en.json
index 99dff1f..972a1aa 100644
--- a/UserManager/i18n/en.json
+++ b/UserManager/i18n/en.json
@@ -28,5 +28,6 @@
"bs-usermanager-labelnewpassword": "Password",
"bs-usermanager-labelpasswordcheck": "Confirm password",
"bs-usermanager-titledeleteuser": "Delete user",
- "bs-usermanager-confirmdeleteuser": "Are you sure, you want to delete
{{PLURAL:$1|this user|these $1 users}}?"
+ "bs-usermanager-confirmdeleteuser": "Are you sure, you want to delete
{{PLURAL:$1|this user|these $1 users}}?",
+ "bs-usermanager-groups-more": "... more"
}
diff --git a/UserManager/i18n/qqq.json b/UserManager/i18n/qqq.json
index 70f1ae0..aa63c6d 100644
--- a/UserManager/i18n/qqq.json
+++ b/UserManager/i18n/qqq.json
@@ -29,5 +29,6 @@
"bs-usermanager-labelnewpassword": "Label for
password\\n{{Identical|Password}}",
"bs-usermanager-labelpasswordcheck": "Label for confirm
password\\n{{Identical|Confirm password}}",
"bs-usermanager-titledeleteuser": "Window title for delete
user\\n{{Identical|Delete user}}",
- "bs-usermanager-confirmdeleteuser": "Text for are you sure, you want to
delete {{PLURAL:$1|this user|these $1 users}}?\\n $1 is the number of users
which will be deleted - use for PLURAL distinction."
+ "bs-usermanager-confirmdeleteuser": "Text for are you sure, you want to
delete {{PLURAL:$1|this user|these $1 users}}?\\n $1 is the number of users
which will be deleted - use for PLURAL distinction.",
+ "bs-usermanager-groups-more": "Text of a link that expands the list of
groups"
}
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..6629638 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,27 +65,31 @@
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(),
dataIndex: 'groups',
renderer: this.renderGroups,
- sortable: false
+ sortable: false,
+ flex: 1
} );
this.filters = Ext.create('Ext.ux.grid.FiltersFeature', {
encode: true,
@@ -120,14 +123,44 @@
];
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 ) {
if ( value.length === 0 ) return '';
var html = '<ul class="bs-extjs-list">';
for ( var i = 0; i < value.length; i++ ) {
+ if( i === 2 ) {
+ html += '<li>' + mw.html.element(
+ 'a',
+ {
+ href: '#',
+ class: 'bs-um-more-groups'
+ },
+
mw.message('bs-usermanager-groups-more').plain()
+ ) + '</li>';
+ html += '</ul>';
+ html += '<ul class="bs-extjs-list
bs-um-hidden-groups" style="display:none">';
+ }
+
html += '<li>' + value[i].displayname + '</li>';
}
html += '</ul>';
+
return html;
},
renderEmail: function( value ) {
@@ -135,9 +168,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 +191,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 +240,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 +311,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 +350,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 +370,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..2eba8c7 100644
--- a/UserManager/resources/bluespice.userManager.js
+++ b/UserManager/resources/bluespice.userManager.js
@@ -10,6 +10,14 @@
* @filesource
*/
-Ext.create( 'BS.UserManager.Panel', {
- renderTo: 'bs-usermanager-grid'
-} );
\ No newline at end of file
+(function( mw, $, bs, d, undefined){
+ Ext.create( 'BS.UserManager.panel.Manager', {
+ renderTo: 'bs-usermanager-grid'
+ } );
+
+ $(d).on( 'click', '.bs-um-more-groups', function() {
+ $(this).parent('li').hide();
+ $(this).parents('ul').next('.bs-um-hidden-groups').show();
+ return false;
+ });
+})(mediaWiki, jQuery, blueSpice, document );
\ 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: merged
Gerrit-Change-Id: Ib8b840e8108ad0ba0be28e17342622a721515cd9
Gerrit-PatchSet: 2
Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions
Gerrit-Branch: master
Gerrit-Owner: Robert Vogel <[email protected]>
Gerrit-Reviewer: Mglaser <[email protected]>
Gerrit-Reviewer: Pigpen <[email protected]>
Gerrit-Reviewer: Raimond Spekking <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: Smuggli <[email protected]>
Gerrit-Reviewer: Tweichart <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits