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