Mglaser has uploaded a new change for review. https://gerrit.wikimedia.org/r/305585
Change subject: UserManager: Use block to enable / disable users ...................................................................... UserManager: Use block to enable / disable users Blocked users are treated as disabled. Disabled users are not shown in UserManager, unless the (hidden) column "Enabled" is shown and a filter is set. From add/edit dialogue, you can enable/disable users. Requires corresponding commit in BlueSpiceFoundation Change-Id: I01242cc5af5e9fbd0afcae4d2a594557207fef51 --- M UserManager/UserManager.class.php M UserManager/UserManager.setup.php M UserManager/i18n/en.json M UserManager/includes/api/BSApiTasksUserManager.php M UserManager/resources/BS.UserManager/dialog/User.js M UserManager/resources/BS.UserManager/panel/Manager.js 6 files changed, 90 insertions(+), 5 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BlueSpiceExtensions refs/changes/85/305585/1 diff --git a/UserManager/UserManager.class.php b/UserManager/UserManager.class.php index cb55c67..5b2af32 100644 --- a/UserManager/UserManager.class.php +++ b/UserManager/UserManager.class.php @@ -122,6 +122,7 @@ public static function editUser( User $oUser, $aMetaData = array(), $bCreateIfNotExists = false ) { $oStatus = Status::newGood(); $bNew = false; + $oPerformer = RequestContext::getMain()->getUser(); if ( $oUser->getId() === 0 ) { if( !$bCreateIfNotExists ) { @@ -190,6 +191,41 @@ $oUser->saveSettings(); + if( isset( $aMetaData['enabled'] ) ) { + if ( $aMetaData['enabled'] === false && !$oUser->isBlocked() ) { + if ( $oUser->getId() == $oPerformer->getId() ) { + return Status::newFatal( 'bs-usermanager-no-self-block' ); + } + # Create block object. + $block = new Block(); + $block->setTarget( $oUser ); + $block->setBlocker( $oPerformer ); + $block->mReason = wfMessage( 'bs-usermanager-user-disabled' )->text(); + $block->mExpiry = 'indefinite'; + $block->prevents( 'createaccount', false ); + $block->prevents( 'editownusertalk', false ); + $block->prevents( 'sendemail', true ); + $block->isHardblock( true ); + $block->isAutoblocking( false ); + $reason = [ 'hookaborted' ]; + if ( !Hooks::run( 'BlockIp', [ &$block, &$performer, &$reason ] ) ) { + return $reason; + } + + # Try to insert block. Is there a conflicting block? + $bStatus = $block->insert(); + if ( !$bStatus ) { + return Status::newFatal( 'bs-usermanager-block-error' ); + } + } else if ( $aMetaData['enabled'] === true && $oUser->isBlocked() ) { + $block = Block::newFromTarget( $oUser ); + $bStatus = $block->delete(); + if ( !$bStatus ) { + return Status::newFatal( 'bs-usermanager-unblock-error' ); + } + } + } + $oUserManager = BsExtensionManager::getExtension( 'UserManager' ); Hooks::run( 'BSUserManagerAfterEditUser', diff --git a/UserManager/UserManager.setup.php b/UserManager/UserManager.setup.php index 0b780a2..0ba317b 100644 --- a/UserManager/UserManager.setup.php +++ b/UserManager/UserManager.setup.php @@ -23,7 +23,8 @@ 'bs-usermanager-titledeleteuser', 'bs-usermanager-confirmdeleteuser', 'bs-usermanager-groups-more', - 'bs-usermanager-no-self-desysop' + 'bs-usermanager-no-self-desysop', + 'bs-usermanager-headerenabled' ), 'localBasePath' => __DIR__ . '/resources', 'remoteExtPath' => 'BlueSpiceExtensions/UserManager/resources' diff --git a/UserManager/i18n/en.json b/UserManager/i18n/en.json index 42c160a..220282a 100644 --- a/UserManager/i18n/en.json +++ b/UserManager/i18n/en.json @@ -31,5 +31,10 @@ "bs-usermanager-confirmdeleteuser": "Are you sure, you want to delete {{PLURAL:$1|this user|these $1 users}}?", "bs-usermanager-groups-more": "... more", "bs-usermanager-no-self-desysop" : "You cannot take away your own sysop right.", - "apihelp-bs-usermanager-tasks-description": "Provides operations for Checklist extension" + "apihelp-bs-usermanager-tasks-description": "Provides operations for Checklist extension", + "bs-usermanager-no-self-block": "You cannot disable yourself.", + "bs-usermanager-block-error": "The user could not be disabled.", + "bs-usermanager-unblock-error": "The user could not be enabled.", + "bs-usermanager-headerenabled": "Enabled", + "bs-usermanager-log-user-disabled": "User was disabled via UserManager" } diff --git a/UserManager/includes/api/BSApiTasksUserManager.php b/UserManager/includes/api/BSApiTasksUserManager.php index 9d2a418..2788ed2 100644 --- a/UserManager/includes/api/BSApiTasksUserManager.php +++ b/UserManager/includes/api/BSApiTasksUserManager.php @@ -95,6 +95,9 @@ if( isset($oTaskData->realname) ) { $aMetaData['realname'] = $oTaskData->realname; } + if( isset($oTaskData->enabled) ) { + $aMetaData['enabled'] = $oTaskData->enabled; + } $oStatus = UserManager::addUser( $oTaskData->userName, $aMetaData ); if( !$oStatus->isOK() ) { @@ -150,7 +153,10 @@ if( isset($oTaskData->realname) ) { $aMetaData['realname'] = $oTaskData->realname; } - + if( isset($oTaskData->enabled) ) { + $aMetaData['enabled'] = $oTaskData->enabled; + } +error_log( var_export($aMetaData, true)); $oStatus = UserManager::editUser( $oUser, $aMetaData, true ); if( !$oStatus->isOK() ) { $oReturn->message = $oStatus->getMessage()->parse(); diff --git a/UserManager/resources/BS.UserManager/dialog/User.js b/UserManager/resources/BS.UserManager/dialog/User.js index 09a0869..49fe20a 100644 --- a/UserManager/resources/BS.UserManager/dialog/User.js +++ b/UserManager/resources/BS.UserManager/dialog/User.js @@ -56,7 +56,13 @@ labelAlign: 'right', name: 'realname' }); - + this.tfEnabled = Ext.create( 'Ext.form.Checkbox', { + fieldLabel: mw.message('bs-usermanager-headerenabled').plain(), + labelWidth: 130, + labelAlign: 'right', + name: 'enabled', + checked: true + }); this.cbGroups = Ext.create( 'Ext.ux.form.MultiSelect', { fieldLabel: mw.message('bs-usermanager-headergroups').plain(), labelWidth: 130, @@ -73,6 +79,7 @@ this.tfRePassword, this.tfEmail, this.tfRealName, + this.tfEnabled, this.cbGroups ]; @@ -84,6 +91,7 @@ this.tfRePassword.reset(); this.tfEmail.reset(); this.tfRealName.reset(); + this.tfEnabled.reset(); this.cbGroups.reset(); this.callParent(arguments); @@ -94,6 +102,7 @@ this.tfUserName.setValue( this.currentData.user_name ); this.tfEmail.setValue( this.currentData.user_email ); this.tfRealName.setValue( this.currentData.user_real_name ); + this.tfEnabled.setValue(this.currentData.enabled ) this.cbGroups.setValue( this.getGroupsValue(this.currentData.groups) ); }, getData: function() { @@ -102,6 +111,7 @@ this.selectedData.user_repassword = this.tfRePassword.getValue(); this.selectedData.user_email = this.tfEmail.getValue(); this.selectedData.user_real_name = this.tfRealName.getValue(); + this.selectedData.enabled = this.tfEnabled.getValue(); this.selectedData.groups = this.cbGroups.getValue(); return this.selectedData; diff --git a/UserManager/resources/BS.UserManager/panel/Manager.js b/UserManager/resources/BS.UserManager/panel/Manager.js index 9f2358b..64e3389 100644 --- a/UserManager/resources/BS.UserManager/panel/Manager.js +++ b/UserManager/resources/BS.UserManager/panel/Manager.js @@ -27,7 +27,8 @@ 'user_real_name', 'user_email', 'page_link', - 'groups' + 'groups', + 'enabled' ], proxy: { reader:{ @@ -54,6 +55,15 @@ } }, this ); + this.colEnabled = Ext.create( 'Ext.grid.column.Column', { + id: 'enabled', + header: mw.message('bs-usermanager-headerenabled').plain(), + sortable: true, + dataIndex: 'enabled', + hidden: true, + renderer: this.renderIcon, + flex: 1 + } ); this.colUserName = Ext.create( 'Ext.grid.column.Template', { id: 'username', header: mw.message('bs-usermanager-headerusername').plain(), @@ -89,6 +99,12 @@ encode: true, local: false, filters: [{ + type: 'bool', + dataIndex: 'enabled', + menuItems: ['ct'], + value: true, + active: true + },{ type: 'string', dataIndex: 'user_name', menuItems: ['ct'] @@ -110,6 +126,7 @@ this.gpMainConf.features = [this.filters]; this.colMainConf.columns = [ + this.colEnabled, this.colUserName, this.colRealName, this.colEmail, @@ -162,6 +179,14 @@ if ( value.length === 0 ) return ''; return '<a href="mailto:' + value + '">' + value + '</a>'; + }, + renderIcon: function( value ) { + //TODO: make CSS class icon + var icon = '<img src="' + mw.config.get( "wgScriptPath" ) + '/extensions/BlueSpiceFoundation/resources/bluespice/images/{0}"/>'; + if ( value === false ) { + return icon.format( 'bs-cross.png' ); + } + return icon.format( 'bs-tick.png' ); }, onGrdMainRowClick: function( oSender, iRowIndex, oEvent ) { this.callParent(arguments); @@ -252,6 +277,7 @@ rePassword: user.user_repassword, email: user.user_email, realname: user.user_real_name, + enabled: user.enabled, groups: user.groups }; var me = this; @@ -291,6 +317,7 @@ rePassword: user.user_repassword, email: user.user_email, realname: user.user_real_name, + enabled: user.enabled, groups: user.groups }; var me = this; -- To view, visit https://gerrit.wikimedia.org/r/305585 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I01242cc5af5e9fbd0afcae4d2a594557207fef51 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions Gerrit-Branch: master Gerrit-Owner: Mglaser <gla...@hallowelt.biz> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits