diff options
Diffstat (limited to 'includes/api/ApiQueryAllUsers.php')
-rw-r--r-- | includes/api/ApiQueryAllUsers.php | 32 |
1 files changed, 17 insertions, 15 deletions
diff --git a/includes/api/ApiQueryAllUsers.php b/includes/api/ApiQueryAllUsers.php index 0443269e..ac112ef9 100644 --- a/includes/api/ApiQueryAllUsers.php +++ b/includes/api/ApiQueryAllUsers.php @@ -24,11 +24,6 @@ * @file */ -if ( !defined( 'MEDIAWIKI' ) ) { - // Eclipse helper - will be ignored in production - require_once( 'ApiQueryBase.php' ); -} - /** * Query module to enumerate all registered users. * @@ -65,10 +60,15 @@ class ApiQueryAllUsers extends ApiQueryBase { $from = is_null( $params['from'] ) ? null : $this->keyToTitle( $params['from'] ); $to = is_null( $params['to'] ) ? null : $this->keyToTitle( $params['to'] ); - $this->addWhereRange( 'user_name', $dir, $from, $to ); + # MySQL doesn't seem to use 'equality propagation' here, so like the + # ActiveUsers special page, we have to use rc_user_text for some cases. + $userFieldToSort = $params['activeusers'] ? 'rc_user_text' : 'user_name'; + + $this->addWhereRange( $userFieldToSort, $dir, $from, $to ); if ( !is_null( $params['prefix'] ) ) { - $this->addWhere( 'user_name' . $db->buildLike( $this->keyToTitle( $params['prefix'] ), $db->anyString() ) ); + $this->addWhere( $userFieldToSort . + $db->buildLike( $this->keyToTitle( $params['prefix'] ), $db->anyString() ) ); } if ( !is_null( $params['rights'] ) ) { @@ -148,7 +148,7 @@ class ApiQueryAllUsers extends ApiQueryBase { $timestamp = $db->timestamp( wfTimestamp( TS_UNIX ) - $wgActiveUserDays*24*3600 ); $this->addWhere( "rc_timestamp >= {$db->addQuotes( $timestamp )}" ); - $this->addOption( 'GROUP BY', 'user_name' ); + $this->addOption( 'GROUP BY', $userFieldToSort ); } $this->addOption( 'LIMIT', $sqlLimit ); @@ -235,10 +235,12 @@ class ApiQueryAllUsers extends ApiQueryBase { 'MediaWiki configuration error: the database contains more user groups than known to User::getAllGroups() function' ); } + $lastUserObj = User::newFromName( $lastUser ); + // Add user's group info if ( $fld_groups ) { - if ( !isset( $lastUserData['groups'] ) ) { - $lastUserData['groups'] = ApiQueryUsers::getAutoGroups( User::newFromName( $lastUser ) ); + if ( !isset( $lastUserData['groups'] ) && $lastUserObj ) { + $lastUserData['groups'] = ApiQueryUsers::getAutoGroups( $lastUserObj ); } if ( !is_null( $row->ug_group2 ) ) { @@ -247,13 +249,13 @@ class ApiQueryAllUsers extends ApiQueryBase { $result->setIndexedTagName( $lastUserData['groups'], 'g' ); } - if ( $fld_implicitgroups && !isset( $lastUserData['implicitgroups'] ) ) { - $lastUserData['implicitgroups'] = ApiQueryUsers::getAutoGroups( User::newFromName( $lastUser ) ); + if ( $fld_implicitgroups && !isset( $lastUserData['implicitgroups'] ) && $lastUserObj ) { + $lastUserData['implicitgroups'] = ApiQueryUsers::getAutoGroups( $lastUserObj ); $result->setIndexedTagName( $lastUserData['implicitgroups'], 'g' ); } if ( $fld_rights ) { - if ( !isset( $lastUserData['rights'] ) ) { - $lastUserData['rights'] = User::getGroupPermissions( User::newFromName( $lastUser )->getAutomaticGroups() ); + if ( !isset( $lastUserData['rights'] ) && $lastUserObj ) { + $lastUserData['rights'] = User::getGroupPermissions( $lastUserObj->getAutomaticGroups() ); } if ( !is_null( $row->ug_group2 ) ) { $lastUserData['rights'] = array_unique( array_merge( $lastUserData['rights'], @@ -362,7 +364,7 @@ class ApiQueryAllUsers extends ApiQueryBase { ) ); } - protected function getExamples() { + public function getExamples() { return array( 'api.php?action=query&list=allusers&aufrom=Y', ); |