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

Reply via email to