jenkins-bot has submitted this change and it was merged.

Change subject: UserManager: Used API instead of AjaxExportList
......................................................................


UserManager: Used API instead of AjaxExportList

* Added BSApiTasksUserManager
* Reworked setGroups, addUser and editUser methods in UserManager class
* Added TODO's

=> requires Id7b0481ab8b2e561d83c99b423e031bc514a49f8

PatchSet5:
* Used bs-adminuser-store
* Fixes and improvements

Change-Id: Ib1be3be91d2a741678a1824525c01bafa423cea0
---
M PermissionManager/PermissionManager.class.php
M UserManager/UserManager.class.php
M UserManager/UserManager.setup.php
M UserManager/doc/Hooks.txt
M UserManager/i18n/en.json
M UserManager/i18n/qqq.json
A UserManager/includes/api/BSApiTasksUserManager.php
M UserManager/resources/BS.UserManager/dialog/User.js
M UserManager/resources/BS.UserManager/dialog/UserGroups.js
M UserManager/resources/BS.UserManager/panel/Manager.js
10 files changed, 513 insertions(+), 634 deletions(-)

Approvals:
  Mglaser: Looks good to me, approved
  Raimond Spekking: Looks good to me, but someone else must approve
  jenkins-bot: Verified



diff --git a/PermissionManager/PermissionManager.class.php 
b/PermissionManager/PermissionManager.class.php
index 9fdddb4..ebad6a1 100644
--- a/PermissionManager/PermissionManager.class.php
+++ b/PermissionManager/PermissionManager.class.php
@@ -133,7 +133,6 @@
                BsConfig::registerVar( 'MW::PermissionManager::RealityCheck', 
false, BsConfig::LEVEL_PUBLIC | BsConfig::TYPE_BOOL | 
BsConfig::RENDER_AS_JAVASCRIPT, 'bs-permissionmanager-pref-enablerealitycheck', 
'toggle' );
                BsConfig::registerVar( 'MW::PermissionManager::MaxBackups', 5, 
BsConfig::LEVEL_PUBLIC | BsConfig::TYPE_INT, 
'bs-permissionmanager-pref-max-backups' );
 
-               $this->setHook( 'BSWikiAdminUserManagerBeforeUserListSend' );
                $this->setHook( 'BSGroupManagerGroupNameChanged' );
        }
 
@@ -188,6 +187,17 @@
                return true;
        }
 
+       /*
+       I could not figure out any circumstances when this would be needed!
+       Hook: 'BSWikiAdminUserManagerBeforeUserListSend' was removed
+       Groups have been queried by DB - why should there be a group lockmode?
+       array( users => array(
+               1 => array(
+                       groups => array(
+                               1 => array( 'group' => 'lockmode' )
+                       )
+               )
+       ))
        public function onBSWikiAdminUserManagerBeforeUserListSend( 
$oUserManager, &$data ) {
                if ( !BsConfig::get( 'MW::PermissionManager::Lockmode' ) )
                        return true;
@@ -213,6 +223,7 @@
 
                return true;
        }
+       */
 
        public static function setupLockmodePermissions() {
                global $wgAdditionalGroups, $wgGroupPermissions, 
$wgNamespacePermissionLockdown;
diff --git a/UserManager/UserManager.class.php 
b/UserManager/UserManager.class.php
index 21bc3a3..9a7e297 100644
--- a/UserManager/UserManager.class.php
+++ b/UserManager/UserManager.class.php
@@ -65,471 +65,166 @@
                wfProfileOut( 'BS::'.__METHOD__ );
        }
 
-       public static function getUsers() {
-               //if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false ) 
return true;
-
-               $oStoreParams = BsExtJSStoreParams::newFromRequest();
-               $iLimit = $oStoreParams->getLimit();
-               $iStart = $oStoreParams->getStart();
-               $sSort = $oStoreParams->getSort( 'user_name' );
-               $sDirection = $oStoreParams->getDirection();
-               $aFilters = $oStoreParams->getFilter();
-
-               $aSortingParams = FormatJson::decode( $sSort );
-               if ( is_array( $aSortingParams ) ) {
-                       $sSort = $aSortingParams[0]->property;
-                       $sDirection = $aSortingParams[0]->direction;
-               }
-
-               $dbr = wfGetDB( DB_SLAVE );
-
-               global $wgDBtype, $wgDBprefix;
-               //PW TODO: filter for oracle
-               if( $wgDBtype == 'oracle' ) {
-                       $res = $dbr->query(
-                               "SELECT * FROM
-                                       (
-                                               SELECT 
user_id,user_name,user_real_name,user_email,row_number() OVER (ORDER BY 
".$sSort." ".$sDirection.") rnk
-                                               FROM 
\"".strtoupper($wgDBprefix)."MWUSER\"
-                                       )
-                               WHERE rnk BETWEEN ".($iStart+1)." AND 
".($iLimit + $iStart)
-                       );
-               } else {
-                       $aTables = array(
-                               'user'
-                       );
-
-                       $aOptions = array(
-                               'ORDER BY' => $sSort.' '.$sDirection,
-                               'LIMIT'    => $iLimit,
-                               'OFFSET'   => $iStart
-                       );
-
-                       $aJoins = array();
-
-                       $aConditions = array();
-                       if( !empty($aFilters) ) {
-                               foreach($aFilters as $oFilter) {
-                                       switch($oFilter->field) {
-                                               case 'user_name':
-                                                       $aConditions[] = 
"user_name LIKE '%".trim($oFilter->value)."%'";
-                                                       break;
-                                               case 'user_real_name':
-                                                       $aConditions[] = 
"user_real_name LIKE '%".trim($oFilter->value)."%'";
-                                                       break;
-                                               case 'user_email':
-                                                       $aConditions[] = 
"user_email LIKE '%".trim($oFilter->value)."%'";
-                                                       break;
-                                               case 'groups':
-                                                       $aTables[] = 
'user_groups';
-                                                       $aConditions[] = 
"ug_group IN ('".implode("','", $oFilter->value)."')";
-                                                       $aJoins['user_groups'] 
= array('LEFT JOIN', 'ug_user=user_id');
-                                       }
-                               }
-                       }
-
-                       $res = $dbr->select(
-                               $aTables,
-                               '*',
-                               $aConditions,
-                               __METHOD__,
-                               $aOptions,
-                               $aJoins
-                       );
-               }
-
-               $data = array();
-               $data['users'] = array();
-
-               while( $row = $res->fetchObject() ) {
-                       $oUserTitle = Title::newFromText($row->user_name, 
NS_USER);
-                       $tmp = array();
-                       $tmp['user_id']        = $row->user_id;
-                       $tmp['user_name']      = $row->user_name;
-                       $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();
-
-                       $res1 = $dbr->select( 'user_groups', 'ug_group', 
'ug_user='.$row->user_id );
-                       while( $row1 = $res1->fetchObject() ) {
-                               //$tmp['groups'][] = ( !wfMessage( 'group-' . 
$row1->ug_group )->inContentLanguage()->isBlank() ) ? wfMessage( 'group-' . 
$row1->ug_group )->plain() : $row1->ug_group ;
-                               if ( !wfMessage( 'group-' . $row1->ug_group 
)->inContentLanguage()->isBlank() ) {
-                                       $tmp['groups'][] = array( 'group' => 
$row1->ug_group, 'displayname' => wfMessage( 'group-' . $row1->ug_group 
)->plain() . " (" . $row1->ug_group . ")" );
-                               } else {
-                                       $tmp['groups'][] = array( 'group' => 
$row1->ug_group, 'displayname' => $row1->ug_group );
-                               }
-                       }
-                       if ( is_array( $tmp['groups'] ) ) sort( $tmp['groups'] 
);
-                       $data['users'][] = $tmp;
-               }
-
-               $row = $dbr->selectRow( 'user', 'COUNT( user_id ) AS cnt', 
array() );
-               $data['totalCount'] = $row->cnt;
-
-               $oUserManager = BsExtensionManager::getExtension( 'UserManager' 
);
-               wfRunHooks( 'BSWikiAdminUserManagerBeforeUserListSend', array( 
$oUserManager, &$data ) );
-
-               return FormatJson::encode( $data );
-       }
-
        /**
-        * Adds an user to the database
-        * @param String $uUser Json encoded new user
-        * @return string json encoded response
+        * Adds an user
+        * @param string $sUserName
+        * @param array $aMetaData
+        * @return Status
         */
-       public static function addUser( $sUsername, $sPassword, $sRePassword, 
$sEmail, $sRealname, $aGroups = array() ) {
-
-               $res = $resDelGroups = $resInsGroups = $resERealUser = false;
-
-               if ( wfReadOnly() ) {
-                       global $wgReadOnly;
-                       return FormatJson::encode( array(
-                               'success' => false,
-                               'message' => array( wfMessage( 'bs-readonly', 
$wgReadOnly )->plain() )
-                               ) );
-               }
-               if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false ) 
return true;
-
+       public static function addUser( $sUserName, $aMetaData = array() ) {
                //This is to overcome username case issues with custom 
AuthPlugin (i.e. LDAPAuth)
                //LDAPAuth woud otherwise turn the username to 
first-char-upper-rest-lower-case
                //At the end of this method we switch $_SESSION['wsDomain'] 
back again
                $tmpDomain = isset( $_SESSION['wsDomain'] ) ? 
$_SESSION['wsDomain'] : '';
                $_SESSION['wsDomain'] = 'local';
 
-               $aResponse = array(
-                       'success'  => false,
-                       'errors'   => array(),
-                       'message' => array()
-               );
-
-               $sUsername = ucfirst( $sUsername );
-               if ( User::isCreatableName( $sUsername ) === false ) {
-                       $aResponse['errors'][] = array(
-                               'id' => 'username',
-                               'message' => wfMessage( 
'bs-usermanager-invalid-uname' )->plain()
-                       );
+               $sUserName = ucfirst( $sUserName );
+               $oUser = User::newFromName( $sUserName, true );
+               if ( !$oUser ) {
+                       return Status::newFatal( 'bs-usermanager-invalid-uname' 
);
+               }
+               if( $oUser->getId() !== 0 ) {
+                       return Status::newFatal( 'bs-usermanager-user-exists' );
                }
 
-               if ( $sEmail != '' && Sanitizer::validateEmail( $sEmail ) === 
false ) {
-                       $aResponse['errors'][] = array(
-                               'id' => 'email',
-                               'message' => wfMessage( 
'bs-usermanager-invalid-email-gen' )->plain()
-                       );
+               $oStatus = self::editUser( $oUser, $aMetaData, true );
+               if( !$oStatus->isOK() ) {
+                       return $oStatus;
                }
-
-               if ( $sPassword == '' ) {
-                       $aResponse['errors'][] = array(
-                               'id' => 'pass',
-                               'message' => wfMessage( 
'bs-usermanager-enter-pwd' )->plain()
-                       );
-               }
-
-               if ( strpos( $sRealname, '\\' ) ) {
-                       $aResponse['errors'][] = array(
-                               'id' => 'realname',
-                               'message' => wfMessage( 
'bs-usermanager-invalid-realname' )->plain()
-                       );
-               }
-
-               if ( $sPassword != $sRePassword ) {
-                       $aResponse['errors'][] = array(
-                               'id' => 'repass',
-                               'message' => wfMessage( 'badretype' )->plain() 
// MW message
-                       );
-               }
-
-               if ( strtolower( $sUsername ) == strtolower( $sPassword ) ) {
-                       $aResponse['errors'][] = array(
-                               'id' => 'pass',
-                               'message' => wfMessage( 'password-name-match' 
)->plain() // MW message
-                       );
-               }
-
-               $oNewUser = User::newFromName( $sUsername );
-               if ( $oNewUser == null ) { //Should not be neccessary as we 
check for username validity above
-                       $aResponse['errors'][] = array(
-                               'id' => 'username',
-                               'message' => wfMessage( 
'bs-usermanager-invalid-uname' )->plain()
-                       );
-               }
-
-               if ( $oNewUser instanceof User ) {
-                       if( $oNewUser->getId() != 0 ) {
-                               $aResponse['errors'][] = array(
-                                       'id' => 'username',
-                                       'message' => wfMessage( 
'bs-usermanager-user-exists' )->plain()
-                               );
-                       }
-
-                       if ( $oNewUser->isValidPassword( $sPassword ) == false 
) {
-                               //TODO: $oNewUser->getPasswordValidity() 
returns a message key in case of error. Maybe we sould return this message.
-                               $aResponse['errors'][] = array(
-                                       'id' => 'pass',
-                                       'message' => wfMessage( 
'bs-usermanager-invalid-pwd' )->plain()
-                               );
-                       }
-               }
-
-               if ( !empty( $aResponse['errors'] ) ) { //In case that any 
error occurred
-                       return FormatJson::encode( $aResponse );
-               }
-
-               $oNewUser->addToDatabase();
-               $oNewUser->setPassword( $sPassword );
-               $oNewUser->setEmail( $sEmail );
-               $oNewUser->setRealName( $sRealname );
-               $oNewUser->setToken();
-
-               $oNewUser->saveSettings();
-
-               $dbw = wfGetDB( DB_MASTER );
-               $resDelGroups = $dbw->delete( 'user_groups',
-                       array(
-                               'ug_user' => $oNewUser->getId()
-                       )
-               );
-
-               $resInsGroups = true;
-               if( is_array( $aGroups ) ) {
-                       foreach ( $aGroups as $sGroup ) {
-                               if ( in_array( $sGroup, self::$excludegroups ) 
) continue;
-                               $resInsGroups = $dbw->insert(
-                                               'user_groups',
-                                               array(
-                                                       'ug_user' => 
$oNewUser->getId(),
-                                                       'ug_group' => 
addslashes( $sGroup )
-                                               )
-                               );
-                       }
-               }
-
-               if ( $resDelGroups === false || $resInsGroups === false ) {
-                       $aResponse['success'] = false;
-                       $aResponse['message'][] = wfMessage( 
'bs-usermanager-db-error' )->plain();
-               }
-
-               $ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
-               $ssUpdate->doUpdate();
-
-               $aResponse['success'] = true;
-               $aResponse['message'][] = wfMessage( 
'bs-usermanager-user-added' )->plain();
 
                $_SESSION['wsDomain'] = $tmpDomain;
 
+               $oUser = $oStatus->getValue();
                $oUserManager = BsExtensionManager::getExtension( 'UserManager' 
);
                Hooks::run(
                        'BSUserManagerAfterAddUser',
                        array(
                                $oUserManager,
-                               $oNewUser,
-                               array(
-                                       'username' => $sUsername,
-                                       'email'    => $sEmail,
-                                       'password' => $sPassword,
-                                       'realname' => $sRealname
-                               ),
-                               &$aResponse
+                               $oUser,
+                               $aMetaData,
+                               &$oStatus
                        )
                );
 
-               return FormatJson::encode( $aResponse );
+               $ssUpdate = new SiteStatsUpdate( 0, 0, 0, 0, 1 );
+               $ssUpdate->doUpdate();
+
+               return $oStatus;
        }
 
        /**
-        * Adds an user to the database
-        * @param String $sUsername user name
-        * @param String $sPassword password
-        * @param String $sRePassword password confirmation
-        * @param String $sEmail user's e-mail address
-        * @param String $sRealname user's real name
-        * @param Array $aGroups user name
-        * @return string json encoded response
+        * Edits or adds an user
+        * @param User $oUser
+        * @param array $aMetaData
+        * @param boolean $bCreateIfNotExists
+        * @return Status
         */
-       public static function editUser( $sUsername, $sPassword, $sRePassword, 
$sEmail, $sRealname, $aGroups = array() ) {
-               $res = $resDelGroups = $resInsGroups = $resERealUser = false;
+       public static function editUser( User $oUser, $aMetaData = array(), 
$bCreateIfNotExists = false ) {
+               $oStatus = Status::newGood();
+               $bNew = false;
 
-               if ( wfReadOnly() ) {
-                       global $wgReadOnly;
-                       return FormatJson::encode( array(
-                               'success' => false,
-                               'message' => array( wfMessage( 'bs-readonly', 
$wgReadOnly )->plain() )
-                               ) );
-               }
-               if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false ) 
return true;
-
-               $aAnswer = array(
-                       'success' => true,
-                       'errors' => array(),
-                       'message' => array()
-               );
-
-               $oUser = User::newFromName( $sUsername );
-
-               if ( $oUser->getId() === 0 ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] = wfMessage( 
'bs-usermanager-idnotexist' )->plain(); // id_noexist = 'This user ID does not 
exist'
-               }
-               if ( !empty( $sPassword ) && !$oUser->isValidPassword( 
$sPassword ) ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['errors'][] = array(
-                               'id' => 'pass',
-                               'message' => wfMessage( 
'bs-usermanager-invalid-pwd' )->plain()
-                       );
-               }
-               if ( $sPassword !== $sRePassword ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['errors'][] = array(
-                               'id' => 'newpass',
-                               'message' => wfMessage( 'badretype' )->plain() 
// MW message
-                       );
-               }
-               if ( strpos( $sRealname, '\\' ) ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['errors'][] = array(
-                               'id' => 'realname',
-                               'message' => wfMessage( 
'bs-usermanager-invalid-realname' )->plain()
-                       );
-               }
-               if ( $sEmail != '' && Sanitizer::validateEmail( $sEmail ) === 
false ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['errors'][] = array(
-                               'id' => 'email',
-                               'message' => wfMessage( 
'bs-usermanager-invalid-email-gen' )->plain()
-                       );
-               }
-
-               global $wgUser;
-               if (
-                       $wgUser->getId() == $oUser->getId() &&
-                       in_array( 'sysop', $wgUser->getEffectiveGroups() ) &&
-                       !in_array( 'sysop', $aGroups )
-               ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['errors'][] = array(
-                               'id' => 'groups',
-                               'message' => wfMessage( 
'bs-usermanager-no-self-desysop' )->plain()
-                       );
-               }
-
-               $dbw = wfGetDB( DB_MASTER );
-               if ( $aAnswer['success'] ) {
-                       if ( !empty( $sPassword ) ) {
-                               $res = $dbw->update(
-                                               'user',
-                                               array( 'user_password' => 
User::crypt( $sPassword ) ),
-                                               array( 'user_id' => 
$oUser->getId() )
+               if ( $oUser->getId() === 0  ) {
+                       if( !$bCreateIfNotExists ) {
+                               $oStatus->merge(
+                                       Status::newFatal( 
'bs-usermanager-idnotexist' )
                                );
-                       } else {
-                               $res = true;
+                               return $oStatus;
                        }
-
-                       $resDelGroups = $dbw->delete(
-                               'user_groups',
-                               array(
-                                       'ug_user' => $oUser->getId()
-                               )
-                       );
-
-                       $resInsGroups = true;
-                       if ( is_array( $aGroups ) ) {
-                               foreach ( $aGroups as $sGroup ) {
-                                       if ( in_array( $sGroup, 
self::$excludegroups ) ) continue;
-                                       $resInsGroups = $dbw->insert(
-                                               'user_groups',
-                                               array(
-                                                       'ug_user' => 
$oUser->getId(),
-                                                       'ug_group' => 
addslashes( $sGroup )
-                                               )
-                                       );
-                               }
+                       $bNew = true;
+               }
+               $sPass = $aMetaData['password'];
+               if ( !empty( $aMetaData['password'] ) || $bNew ) {
+                       if( !$oUser->isValidPassword( $sPass ) ) {
+                               $oNewStatus = Status::newFatal( 
'bs-usermanager-invalid-pwd' );
+                               $oStatus->merge( $oNewStatus );
                        }
-
-                       $resERealUser = $dbw->update(
-                                       'user',
-                                       array(
-                                               'user_real_name' => $sRealname,
-                                               'user_email'     => $sEmail
-                                       ),
-                                       array( 'user_id' => $oUser->getId() )
-                       );
-
-                       $oUser->invalidateCache();
+                       if ( strtolower( $oUser->getName() ) == strtolower( 
$sPass ) ) {
+                               $oNewStatus = Status::newFatal( 
'password-name-match' );
+                               $oStatus->merge( $oNewStatus );
+                       }
+                       $sRePass = $aMetaData['repassword'];
+                       if ( !isset($sRePass) || $sPass !== $sRePass ) {
+                               $oNewStatus = Status::newFatal( 'badretype' );
+                               $oStatus->merge( $oNewStatus );
+                       }
                }
 
-               if ( $res === false || $resDelGroups === false
-                       || !$resInsGroups || $resERealUser === false ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] = wfMessage( 
'bs-usermanager-db-error' )->plain();
+               if( !empty($aMetaData['realname']) ) {
+                       if ( strpos( $aMetaData['realname'], '\\' ) ) {
+                               $oNewStatus = Status::newFatal(
+                                       'bs-usermanager-invalid-realname'
+                               );
+                               $oStatus->merge( $oNewStatus );
+                       }
+               }
+               if( !empty($aMetaData['email']) ) {
+                       if ( Sanitizer::validateEmail( $aMetaData['email'] ) 
=== false ) {
+                               $oNewStatus = Status::newFatal(
+                                       'bs-usermanager-invalid-email-gen'
+                               );
+                               $oStatus->merge( $oNewStatus );
+                       }
+               }
+               if( !$oStatus->isOK() ) {
+                       return $oStatus;
                }
 
-               if ( $aAnswer['success'] ) {
-                       $aAnswer['message'][] = wfMessage( 
'bs-usermanager-save-successful' )->plain();
+               if( $bNew ) {
+                       $oUser->addToDatabase();
+                       $oUser->setToken();
                }
 
+               if( !empty($sPass) ) {
+                       $oUser->setPassword( $sPass );
+               }
+               if( !empty($aMetaData['email']) ) {
+                       $oUser->setEmail( $aMetaData['email'] );
+               } else {
+                       $oUser->setEmail('');
+               }
+               if( !empty($aMetaData['realname']) ) {
+                       $oUser->setRealName( $aMetaData['realname'] );
+               } else {
+                       $oUser->setRealName('');
+               }
+
+               $oUser->saveSettings();
+
+               $oUserManager = BsExtensionManager::getExtension( 'UserManager' 
);
                Hooks::run(
                        'BSUserManagerAfterEditUser',
                        array(
                                $oUserManager,
                                $oUser,
-                               array(
-                                       'username' => $sUsername,
-                                       'email'    => $sEmail,
-                                       'password' => $sPassword,
-                                       'realname' => $sRealname
-                               ),
-                               &$aAnswer
+                               $aMetaData,
+                               &$oStatus
                        )
                );
 
-               return FormatJson::encode( $aAnswer );
+               return Status::newGood( $oUser );
        }
 
        /**
         * Deletes an user form the database
-        * @global User $wgUser
-        * @param Integer $iUserId user id
-        * @return string json encoded response
+        * TODO: Merge into DeleteUser
+        * @param User $oUser
+        * @return Status
         */
-       public static function deleteUser( $iUserId ) {
-               $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();
-               }
-
-               $oUser = User::newFromId( $iUserId );
-
+       public static function deleteUser( User $oUser ) {
                if ( $oUser->getId() == 0 ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] = wfMessage( 
'bs-usermanager-idnotexist' )->plain();
+                       return Status::newFatal( 'bs-usermanager-idnotexist' );
                }
 
                if ( $oUser->getId() == 1 ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] = wfMessage( 
'bs-usermanager-admin-nodelete' )->plain();
+                       return Status::newFatal( 
'bs-usermanager-admin-nodelete' );
                }
 
-               global $wgUser;
-               if ( $oUser->getId() == $wgUser->getId() ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] = wfMessage( 
'bs-usermanager-self-nodelete' )->plain();
+               $oLoggedInUser = RequestContext::getMain()->getUser();
+               if ( $oUser->getId() == $oLoggedInUser->getId() ) {
+                       return Status::newFatal( 'bs-usermanager-self-nodelete' 
);
                }
 
-               if( !$aAnswer['success'] ) {
-                       return FormatJson::encode( $aAnswer );
-               }
-
+               $oStatus = Status::newGood( $oUser );
                $dbw = wfGetDB( DB_MASTER );
                $res = $dbw->delete( 'user',
                        array( 'user_id' => $oUser->getId() )
@@ -546,98 +241,61 @@
                        array( 'ss_row_id' => 1 )
                );
 
-               $oUserManager = BsExtensionManager::getExtension( 'UserManager' 
);
-               Hooks::run( 'BSUserManagerAfterDeleteUser', array( 
$oUserManager, $oUser, &$aAnswer ) );
-
                if ( $oUser->getUserPage()->exists() ) {
                        $oUserPageArticle = new Article( $oUser->getUserPage() 
);
                        $oUserPageArticle->doDelete( wfMessage( 
'bs-usermanager-db-error' )->plain() );
                }
 
                if ( ( $res === false ) || ( $res1 === false ) || ( $res2 === 
false ) || ( $res3 === false ) ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] = wfMessage( 
'bs-usermanager-db-error' )->plain();
-                       return FormatJson::encode( $aAnswer );
+                       $oStatus->merge( Status::newFatal( 
'bs-usermanager-db-error' ) );
                }
 
-               $aAnswer['message'][] = wfMessage( 
'bs-usermanager-user-deleted' )->plain();
+               $oUserManager = BsExtensionManager::getExtension( 'UserManager' 
);
+               Hooks::run( 'BSUserManagerAfterDeleteUser', array(
+                       $oUserManager,
+                       $oUser,
+                       &$oStatus
+               ));
 
-               return FormatJson::encode( $aAnswer );
+               return $oStatus;
        }
 
-       public static function setUserGroups( $aUserIds, $aGroups ) {
-               $res = $resDelGroups = $resInsGroups = $resERealUser = false;
+       /**
+        * Removes / adds groups to a user
+        * @param User $oUser
+        * @param type $aGroups
+        * @return type
+        */
+       public static function setGroups( User $oUser, $aGroups = array() ) {
+               $oLoggedInUser = RequestContext::getMain()->getUser();
 
-               $aAnswer = array(
-                       'success' => true,
-                       'errors' => array(),
-                       'message' => array()
-               );
-
-               if ( wfReadOnly() ) {
-                       global $wgReadOnly;
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] =  wfMessage( 'bs-readonly', 
$wgReadOnly )->plain();
+               $bCheckDeSysop = $oLoggedInUser->getId() == $oUser->getId()
+                       && in_array( 'sysop', 
$oLoggedInUser->getEffectiveGroups() )
+                       && !in_array( 'sysop', $aGroups )
+               ;
+               if ( $bCheckDeSysop ) {
+                       return Status::newFatal( 
'bs-usermanager-no-self-desysop' );
                }
 
-               if ( BsCore::checkAccessAdmission( 'wikiadmin' ) === false ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['message'][] =  wfMessage( 
'bs-wikiadmin-notallowed' )->plain();
-               }
+               $aCurrentGroups = $oUser->getEffectiveGroups();
+               $aSetGroups = array_diff( $aGroups, $aCurrentGroups );
+               $aRemoveGroups = array_diff( $aCurrentGroups, $aGroups );
 
-               global $wgUser;
-               if (
-                       in_array( $wgUser->getId(), $aUserIds ) &&
-                       in_array( 'sysop', $wgUser->getEffectiveGroups() ) &&
-                       !in_array( 'sysop', $aGroups )
-               ) {
-                       $aAnswer['success'] = false;
-                       $aAnswer['errors'][] = array(
-                               'id' => 'groups',
-                               'message' => wfMessage( 
'bs-usermanager-no-self-desysop' )->plain()
-                       );
-               }
-
-               if ( $aAnswer['success'] ) {
-                       $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;
-                                               }
-                                       }
-                               }
+               foreach ( $aSetGroups as $sGroup ) {
+                       if ( in_array( $sGroup, self::$excludegroups ) ) {
+                               continue;
                        }
+                       $oUser->addGroup( $sGroup );
+               }
+               foreach ( $aRemoveGroups as $sGroup ) {
+                       if ( in_array( $sGroup, self::$excludegroups ) ) {
+                               continue;
+                       }
+                       $oUser->removeGroup( $sGroup );
                }
 
-               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 );
+               $oUser->invalidateCache();
+               return Status::newGood();
        }
 
        public function getForm( $firsttime = false ) {
diff --git a/UserManager/UserManager.setup.php 
b/UserManager/UserManager.setup.php
index c6d8705..54c9a02 100644
--- a/UserManager/UserManager.setup.php
+++ b/UserManager/UserManager.setup.php
@@ -3,6 +3,7 @@
 BsExtensionManager::registerExtension('UserManager', 
BsRUNLEVEL::FULL|BsRUNLEVEL::REMOTE, BsACTION::LOAD_SPECIALPAGE);
 
 $GLOBALS['wgAutoloadClasses']['UserManager'] = __DIR__ . 
'/UserManager.class.php';
+$wgAutoloadClasses['BSApiTasksUserManager'] = __DIR__ . 
'/includes/api/BSApiTasksUserManager.php';
 
 $wgMessagesDirs['UserManager'] = __DIR__ . '/i18n';
 
@@ -30,8 +31,4 @@
        'remoteExtPath' => 'BlueSpiceExtensions/UserManager/resources'
 );
 
-$wgAjaxExportList[] = 'UserManager::getUsers';
-$wgAjaxExportList[] = 'UserManager::addUser';
-$wgAjaxExportList[] = 'UserManager::editUser';
-$wgAjaxExportList[] = 'UserManager::deleteUser';
-$wgAjaxExportList[] = 'UserManager::setUserGroups';
\ No newline at end of file
+$wgAPIModules['bs-usermanager-tasks'] = 'BSApiTasksUserManager';
\ No newline at end of file
diff --git a/UserManager/doc/Hooks.txt b/UserManager/doc/Hooks.txt
index d6ac0c9..f1cd5c1 100644
--- a/UserManager/doc/Hooks.txt
+++ b/UserManager/doc/Hooks.txt
@@ -1,9 +1,5 @@
 ==UserManager.class.php==
 
-'BSWikiAdminUserManagerBeforeUserListSend':
-$this:
- &$data:
-
 'BSUserManagerAfterAddUser':
 $this:
 $oNewUser: the user that was created
diff --git a/UserManager/i18n/en.json b/UserManager/i18n/en.json
index 4aa1d26..42c160a 100644
--- a/UserManager/i18n/en.json
+++ b/UserManager/i18n/en.json
@@ -30,5 +30,6 @@
        "bs-usermanager-titledeleteuser": "Delete user",
        "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."
+       "bs-usermanager-no-self-desysop" : "You cannot take away your own sysop 
right.",
+       "apihelp-bs-usermanager-tasks-description": "Provides operations for 
Checklist extension"
 }
diff --git a/UserManager/i18n/qqq.json b/UserManager/i18n/qqq.json
index d44dc35..4fc1592 100644
--- a/UserManager/i18n/qqq.json
+++ b/UserManager/i18n/qqq.json
@@ -31,5 +31,6 @@
        "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-groups-more": "Text of a link that expands the list of 
groups\n{{Identical|More}}",
-       "bs-usermanager-no-self-desysop": "Text for the error message if a user 
tries to desysop themselves."
+       "bs-usermanager-no-self-desysop": "Text for the error message if a user 
tries to desysop themselves.",
+       "apihelp-bs-usermanager-tasks-description": "Describes the API endpoint 
that handles user manager tasks"
 }
diff --git a/UserManager/includes/api/BSApiTasksUserManager.php 
b/UserManager/includes/api/BSApiTasksUserManager.php
new file mode 100644
index 0000000..663e20d
--- /dev/null
+++ b/UserManager/includes/api/BSApiTasksUserManager.php
@@ -0,0 +1,251 @@
+<?php
+/**
+ * Provides the user manager tasks api for BlueSpice.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * This file is part of BlueSpice for MediaWiki
+ * For further information visit http://www.blue-spice.org
+ *
+ * @author     Patric Wirth <[email protected]>
+ * @package    Bluespice_Extensions
+ * @copyright  Copyright (C) 2011 Hallo Welt! - Medienwerkstatt GmbH, All 
rights reserved.
+ * @license    http://www.gnu.org/copyleft/gpl.html GNU Public License v2 or 
later
+ */
+
+/**
+ * UserManager Api class
+ * @package BlueSpice_Extensions
+ */
+class BSApiTasksUserManager extends BSApiTasksBase {
+
+       /**
+        * Methods that can be called by task param
+        * @var array
+        */
+       protected $aTasks = array(
+               'addUser',
+               'editUser',
+               'deleteUser',
+               'setUserGroups',
+       );
+
+       /**
+        * Returns an array of tasks and their required permissions
+        * array( 'taskname' => array('read', 'edit') )
+        * @return array
+        */
+       protected function getRequiredTaskPermissions() {
+               return array(
+                       'addUser' => array( 'wikiadmin' ),
+                       'editUser' => array( 'wikiadmin' ),
+                       'deleteUser' => array( 'wikiadmin' ),
+                       'setUserGroups' => array( 'wikiadmin' ),
+               );
+       }
+
+       public function needsToken() {
+               parent::needsToken();
+       }
+
+       public function getTaskDataDefinitions() {
+               //TODO
+               return false;
+       }
+
+       /**
+        * Creates an user.
+        * @return stdClass Standard tasks API return
+        */
+       protected function task_addUser( $oTaskData ) {
+               $oReturn = $this->makeStandardReturn();
+               $aGroups = false;
+               if( isset($oTaskData->groups) ) {
+                       $aGroups = $oTaskData->groups;
+               }
+
+               if( empty($oTaskData->userName) ) {
+                       $oReturn->message = wfMessage(
+                               'bs-usermanager-invalid-uname'
+                       )->plain();
+               }
+
+               $aMetaData = array();
+               if( isset($oTaskData->password) ) {
+                       $aMetaData['password'] = $oTaskData->password;
+               }
+               if( isset($oTaskData->rePassword) ) {
+                       $aMetaData['repassword'] = $oTaskData->rePassword;
+               }
+               if( isset($oTaskData->email) ) {
+                       $aMetaData['email'] = $oTaskData->email;
+               }
+               if( isset($oTaskData->realname) ) {
+                       $aMetaData['realname'] = $oTaskData->realname;
+               }
+
+               $oStatus = UserManager::addUser( $oTaskData->userName, 
$aMetaData );
+               if( !$oStatus->isOK() ) {
+                       $oReturn->message = $oStatus->getMessage()->parse();
+                       return $oReturn;
+               }
+
+               if( is_array($aGroups) ) {
+                       $oStatus = UserManager::setGroups(
+                               $oStatus->getValue(),
+                               $aGroups
+                       );
+                       if( !$oStatus->isOK() ) {
+                               $oReturn->message = 
$oStatus->getMessage()->parse();
+                               return $oReturn;
+                       }
+               }
+
+               $oReturn->success = true;
+               $oReturn->message = wfMessage( 'bs-usermanager-user-added' 
)->plain();
+
+               return $oReturn;
+       }
+
+       /**
+        * Edits an user.
+        * @return stdClass Standard tasks API return
+        */
+       protected function task_editUser( $oTaskData ) {
+               $oReturn = $this->makeStandardReturn();
+               $aGroups = false;
+               if( isset($oTaskData->groups) ) {
+                       $aGroups = $oTaskData->groups;
+               }
+
+               if( empty($oTaskData->userName) ) {
+                       $oReturn->message = wfMessage(
+                               'bs-usermanager-invalid-uname'
+                       )->plain();
+               }
+               $oUser = User::newFromName( $oTaskData->userName );
+
+               $aMetaData = array();
+               if( isset($oTaskData->password) ) {
+                       $aMetaData['password'] = $oTaskData->password;
+               }
+               if( isset($oTaskData->rePassword) ) {
+                       $aMetaData['repassword'] = $oTaskData->rePassword;
+               }
+               if( isset($oTaskData->email) ) {
+                       $aMetaData['email'] = $oTaskData->email;
+               }
+               if( isset($oTaskData->realname) ) {
+                       $aMetaData['realname'] = $oTaskData->realname;
+               }
+
+               $oStatus = UserManager::editUser( $oUser, $aMetaData, true );
+               if( !$oStatus->isOK() ) {
+                       $oReturn->message = $oStatus->getMessage()->parse();
+                       return $oReturn;
+               }
+
+               if( is_array($aGroups) ) {
+                       $oStatus = UserManager::setGroups(
+                               $oStatus->getValue(),
+                               $aGroups
+                       );
+                       if( !$oStatus->isOK() ) {
+                               $oReturn->message = 
$oStatus->getMessage()->parse();
+                               return $oReturn;
+                       }
+               }
+
+               $oReturn->success = true;
+               $oReturn->message = wfMessage(
+                       'bs-usermanager-save-successful'
+               )->plain();
+
+               return $oReturn;
+       }
+
+       /**
+        * Deletes an User.
+        * @return stdClass Standard tasks API return
+        */
+       protected function task_deleteUser( $oTaskData ) {
+               $oReturn = $this->makeStandardReturn();
+
+               if( empty($oTaskData->userName) ) {
+                       $oReturn->message = wfMessage(
+                               'bs-usermanager-invalid-uname'
+                       )->plain();
+               }
+
+               $oUser = User::newFromName( $oTaskData->userName );
+
+               $oStatus = UserManager::deleteUser( $oUser );
+               if( !$oStatus->isOK() ) {
+                       $oReturn->message = $oStatus->getMessage()->parse();
+                       return $oReturn;
+               }
+
+               $oReturn->success = true;
+               $oReturn->message = wfMessage( 'bs-usermanager-user-deleted' 
)->plain();
+
+               return $oReturn;
+       }
+
+       /**
+        * Deletes an User.
+        * @return stdClass Standard tasks API return
+        */
+       protected function task_setUserGroups( $oTaskData ) {
+               $oReturn = $this->makeStandardReturn();
+
+               if( empty($oTaskData->userNames) || 
!is_array($oTaskData->userNames) ) {
+                       $oReturn->message = wfMessage(
+                               'bs-usermanager-invalid-uname'
+                       )->plain();
+               }
+
+               if( !isset($oTaskData->groups) || !is_array($oTaskData->groups) 
) {
+                       $oReturn->message = wfMessage(
+                               'bs-usermanager-invalid-uname'//TODO
+                       )->plain();
+               }
+               $oStatus = Status::newGood();
+               foreach( $oTaskData->userNames as $sUserName ) {
+                       $oUser = User::newFromName( $sUserName );
+                       if( !$oUser ) {
+                               $oStatus->merge(
+                                       
Status::newFatal('bs-usermanager-invalid-uname')
+                               );
+                               continue;
+                       }
+                       $oStatus->merge( UserManager::setGroups(
+                               $oUser,
+                               $oTaskData->groups
+                       ));
+               }
+
+               if( !$oStatus->isOK() ) {
+                       $oReturn->message = $oStatus->getMessage()->parse();
+                       return $oReturn;
+               }
+
+               $oReturn->success = true;
+               $oReturn->message = wfMessage(
+                       'bs-usermanager-save-successful'
+               )->plain();
+
+               return $oReturn;
+       }
+}
\ No newline at end of file
diff --git a/UserManager/resources/BS.UserManager/dialog/User.js 
b/UserManager/resources/BS.UserManager/dialog/User.js
index 39826b2..ca4a72a 100644
--- a/UserManager/resources/BS.UserManager/dialog/User.js
+++ b/UserManager/resources/BS.UserManager/dialog/User.js
@@ -110,7 +110,7 @@
        getGroupsValue: function( data ) {
                var groups = [];
                for( var i = 0; i < data.length; i++ ) {
-                       groups.push( data[i].group );
+                       groups.push( data[i] );
                }
                return groups;
        }
diff --git a/UserManager/resources/BS.UserManager/dialog/UserGroups.js 
b/UserManager/resources/BS.UserManager/dialog/UserGroups.js
index 2950cc0..1a6411a 100644
--- a/UserManager/resources/BS.UserManager/dialog/UserGroups.js
+++ b/UserManager/resources/BS.UserManager/dialog/UserGroups.js
@@ -56,7 +56,7 @@
        getGroupsValue: function( data ) {
                var groups = [];
                for( var i = 0; i < data.length; i++ ) {
-                       groups.push( data[i].group );
+                       groups.push( data[i] );
                }
                return groups;
        }
diff --git a/UserManager/resources/BS.UserManager/panel/Manager.js 
b/UserManager/resources/BS.UserManager/panel/Manager.js
index 390a0c0..383a29c 100644
--- a/UserManager/resources/BS.UserManager/panel/Manager.js
+++ b/UserManager/resources/BS.UserManager/panel/Manager.js
@@ -18,24 +18,21 @@
        id: 'bs-usermanager-extgrid',
        features: [],
        initComponent: function() {
-               this.strMain = Ext.create( 'Ext.data.JsonStore', {
+               this.strMain = Ext.create( 'BS.store.BSApi', {
+                       apiAction: 'bs-adminuser-store',
+                       fields: [
+                               'user_id',
+                               'user_name',
+                               'user_page_link',
+                               'user_real_name',
+                               'user_email',
+                               'page_link',
+                               'groups'
+                       ],
                        proxy: {
-                               type: 'ajax',
-                               url: bs.util.getAjaxDispatcherUrl( 
'UserManager::getUsers' ),
-                               reader: {
-                                       type: 'json',
-                                       root: 'users',
-                                       idProperty: 'user_id',
-                                       totalProperty: 'totalCount'
-                               }
-                       },
-                       autoLoad: true,
-                       remoteSort: true,
-                       fields: [ 'user_id', 'user_name', 'user_page_link', 
'user_real_name', 'user_email', 'groups' ],
-                       sortInfo: {
-                               field: 'id',
-                               direction: 'ASC'
-                       }
+                               reader:{
+                                       idProperty: 'user_id'
+                       }}
                });
 
                this.strGroups = Ext.create( 'BS.store.BSApi', {
@@ -57,7 +54,7 @@
                        header: 
mw.message('bs-usermanager-headerusername').plain(),
                        sortable: true,
                        dataIndex: 'user_name',
-                       tpl: '{user_page_link}',
+                       tpl: '{page_link}',
                        flex: 1
                } );
                this.colRealName = Ext.create( 'Ext.grid.column.Template', {
@@ -148,8 +145,9 @@
                                html += '</ul>';
                                html += '<ul class="bs-extjs-list 
bs-um-hidden-groups" style="display:none">';
                        }
-
-                       html += '<li>' + value[i].displayname + '</li>';
+                       //TODO: Get group display name from this.strGroups 
without crashing
+                       //or use messages instead
+                       html += '<li>' + value[i] + '</li>';
                }
                html += '</ul>';
 
@@ -231,99 +229,107 @@
                );
        },
        onRemoveUserOk: function() {
+               //TODO: This needs to be Changed to one simple call!
                var selectedRow = 
this.grdMain.getSelectionModel().getSelection();
                for (var i = 0; i < selectedRow.length; i++){
-                       var userId = selectedRow[i].get( 'user_id' );
-
-                       Ext.Ajax.request( {
-                               url: bs.util.getAjaxDispatcherUrl(
-                                       'UserManager::deleteUser',
-                                       [ userId ]
-                               ),
-                               scope: this,
-                               method: 'post',
-                               success: function( response, opts ) {
-                                       var responseObj = Ext.decode( 
response.responseText );
-                                       this.renderMsgSuccess( responseObj );
-                               }
+                       var me = this;
+                       bs.api.tasks.exec( 'usermanager', 'deleteUser', {
+                               userName: selectedRow[i].get( 'user_name' )
+                       }).done( function( response ) {
+                               me.reloadStore();
                        });
                }
        },
        onDlgUserAddOk: function( data, user ) {
-               Ext.Ajax.request( {
-                       url: bs.util.getAjaxDispatcherUrl(
-                               'UserManager::addUser',
-                               [
-                                       user.user_name,
-                                       user.user_password,
-                                       user.user_repassword,
-                                       user.user_email,
-                                       user.user_real_name,
-                                       user.groups
-                               ]
-                       ),
-                       method: 'post',
-                       scope: this,
-                       success: function( response, opts ) {
-                               var responseObj = Ext.decode( 
response.responseText );
-                               if ( responseObj.success === true ) {
-                                       this.renderMsgSuccess( responseObj );
-                                       this.dlgUserAdd.resetData();
-                               } else {
-                                       this.renderMsgFailure( responseObj );
+               var data = {
+                       userName: user.user_name,
+                       password: user.user_password,
+                       rePassword: user.user_repassword,
+                       email: user.user_email,
+                       realname: user.user_real_name,
+                       groups: user.groups
+               };
+               var me = this;
+               var cfg = {//copy from bluespice.api.js
+                       failure: function( response, module, task, $dfd, cfg ) {
+                               var message = response.message || '';
+                               if ( response.errors.length > 0 ) {
+                                       for ( var i in response.errors ) {
+                                               if ( typeof( 
response.errors[i].message ) !== 'string' ) continue;
+                                               message = message + '<br />' + 
response.errors[i].message;
+                                       }
                                }
-                       },
-                       failure: function( response, opts ) {}
+                               bs.util.alert( module + '-' + task + '-fail', {
+                                               titleMsg: 
'bs-extjs-title-warning',
+                                               text: message
+                                       }, {
+                                               ok: function() {
+                                                       me.showDlgAgain();
+                                       }}
+                               );
+                       }
+               };
+               bs.api.tasks.exec(
+                       'usermanager',
+                       'addUser',
+                       data,
+                       cfg
+               ).done( function( response ) {
+                       me.dlgUserAdd.resetData();
+                       me.reloadStore();
                });
        },
        onDlgUserEditOk: function( data, user ) {
-               Ext.Ajax.request( {
-                       url: bs.util.getAjaxDispatcherUrl(
-                               'UserManager::editUser',
-                               [
-                                       user.user_name,
-                                       user.user_password,
-                                       user.user_repassword,
-                                       user.user_email,
-                                       user.user_real_name,
-                                       user.groups
-                               ]
-                       ),
-                       method: 'post',
-                       scope: this,
-                       success: function( response, opts ) {
-                               var responseObj = Ext.decode( 
response.responseText );
-                               if ( responseObj.success === true ) {
-                                       this.renderMsgSuccess( responseObj );
-                                       this.dlgUserEdit.resetData();
-                               } else {
-                                       this.renderMsgFailure( responseObj );
+               var data = {
+                       userName: user.user_name,
+                       password: user.user_password,
+                       rePassword: user.user_repassword,
+                       email: user.user_email,
+                       realname: user.user_real_name,
+                       groups: user.groups
+               };
+               var me = this;
+               var cfg = {//copy from bluespice.api.js
+                       failure: function( response, module, task, $dfd, cfg ) {
+                               var message = response.message || '';
+                               if ( response.errors.length > 0 ) {
+                                       for ( var i in response.errors ) {
+                                               if ( typeof( 
response.errors[i].message ) !== 'string' ) continue;
+                                               message = message + '<br />' + 
response.errors[i].message;
+                                       }
                                }
-                       },
-                       failure: function( response, opts ) {}
+                               bs.util.alert( module + '-' + task + '-fail', {
+                                               titleMsg: 
'bs-extjs-title-warning',
+                                               text: message
+                                       }, {
+                                               ok: function() {
+                                                       me.showDlgAgain();
+                                       }}
+                               );
+                       }
+               };
+               bs.api.tasks.exec(
+                       'usermanager',
+                       'editUser',
+                       data,
+                       cfg
+               ).done( function( response ) {
+                       me.dlgUserEdit.resetData();
+                       me.reloadStore();
                });
        },
        onDlgUserGroupsOk: function( sender, data ) {
                var selectedRow = 
this.grdMain.getSelectionModel().getSelection();
-               var userIds = [];
+               var userNames = [];
+               var me = this;
                for (var i = 0; i < selectedRow.length; i++){
-                       userIds.push( selectedRow[i].get( 'user_id' ) );
+                       userNames.push( selectedRow[i].get( 'user_name' ) );
                }
-               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 );
-                               if ( responseObj.success === true ) {
-                                       this.renderMsgSuccess( responseObj );
-                               } else {
-                                       this.renderMsgFailure( responseObj );
-                               }
-                       }
+               bs.api.tasks.exec( 'usermanager', 'setUserGroups', {
+                       userNames: userNames,
+                       groups: data.groups
+               }).done( function( response ) {
+                       me.reloadStore();
                });
        },
        reloadStore: function() {
@@ -336,48 +342,6 @@
                        this.dlgUserEdit.show();
                } else if ( this.active === 'edit-multi-groups' ) {
                        this.dlgUserGroups.show();
-               }
-       },
-       renderMsgSuccess: function( responseObj ) {
-               if ( responseObj.message.length ) {
-                       var message = '';
-                       for ( var i in responseObj.message ) {
-                               if ( typeof( responseObj.message[i] ) !== 
'string' ) continue;
-
-                               message = message + responseObj.message[i] + 
'<br />';
-                       }
-                       bs.util.alert(
-                               'UMsuc',
-                               {
-                                       text: message,
-                                       titleMsg: 'bs-extjs-title-success' },
-                               {
-                                       ok: this.reloadStore,
-                                       cancel: function() {},
-                                       scope: this
-                               }
-                       );
-               }
-       },
-       renderMsgFailure: function( responseObj ) {
-               if ( responseObj.errors.length ) {
-                       var message = '';
-                       for ( var i in responseObj.errors ) {
-                               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
-                               }
-                       );
                }
        }
 } );
\ No newline at end of file

-- 
To view, visit https://gerrit.wikimedia.org/r/286171
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: Ib1be3be91d2a741678a1824525c01bafa423cea0
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/BlueSpiceExtensions
Gerrit-Branch: master
Gerrit-Owner: Pwirth <[email protected]>
Gerrit-Reviewer: Dvogel hallowelt <[email protected]>
Gerrit-Reviewer: Ljonka <[email protected]>
Gerrit-Reviewer: Mglaser <[email protected]>
Gerrit-Reviewer: Pwirth <[email protected]>
Gerrit-Reviewer: Raimond Spekking <[email protected]>
Gerrit-Reviewer: Robert Vogel <[email protected]>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to