From 86ce74c75dcfef6a40342be5a198a3719175df5b Mon Sep 17 00:00:00 2001 From: Sam Reed Date: Sat, 12 Mar 2011 22:23:43 +0000 Subject: [PATCH] * (bug 28010) Passing a non existant user to list=users gives internal error * (bug 27549) action=query&list=users&usprop=groups doesn't show implicit groups if a user doesn't have explicit groups Also follows up r79556, where I'd done a couple of daft things... (accessing undefined objects) --- RELEASE-NOTES | 3 +++ includes/api/ApiQueryUsers.php | 38 +++++++++++++++++++++------------- 2 files changed, 27 insertions(+), 14 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 99301a999e..151789d611 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -239,6 +239,9 @@ PHP if you have not done so prior to upgrading MediaWiki. * (bug 27897) list=allusers and list=users list hidden users * (bug 27717) API's exturlusage module does not respect $wgMiserMode * (bug 27588) list=filearchive&faprop=sha1 returns empty attribute +* (bug 28010) Passing a non existant user to list=users gives internal error +* (bug 27549) action=query&list=users&usprop=groups doesn't show implicit + groups if a user doesn't have explicit groups === Languages updated in 1.18 === diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php index 11378047e3..c01302d103 100644 --- a/includes/api/ApiQueryUsers.php +++ b/includes/api/ApiQueryUsers.php @@ -109,12 +109,14 @@ class ApiQueryUsers extends ApiQueryBase { } } + $result = $this->getResult(); + if ( count( $goodNames ) ) { $this->addTables( 'user' ); $this->addFields( '*' ); $this->addWhereFld( 'user_name', $goodNames ); - if ( isset( $this->prop['groups'] ) ) { + if ( isset( $this->prop['groups'] ) || isset( $this->prop['rights'] ) ) { $this->addTables( 'user_groups' ); $this->addJoinConds( array( 'user_groups' => array( 'LEFT JOIN', 'ug_user=user_id' ) ) ); $this->addFields( 'ug_group' ); @@ -125,8 +127,6 @@ class ApiQueryUsers extends ApiQueryBase { $data = array(); $res = $this->select( __METHOD__ ); - $result = $this->getResult(); - foreach ( $res as $row ) { $user = User::newFromRow( $row ); $name = $user->getName(); @@ -142,24 +142,26 @@ class ApiQueryUsers extends ApiQueryBase { $data[$name]['registration'] = wfTimestampOrNull( TS_ISO_8601, $user->getRegistration() ); } - if ( isset( $this->prop['groups'] ) && !is_null( $row->ug_group ) ) { - if ( !isset( $data[$u]['groups'] ) ) { - $data[$u]['groups'] = ApiQueryUsers::getAutoGroups( User::newFromName( $u ) ); + if ( isset( $this->prop['groups'] ) ) { + if ( !isset( $data[$name]['groups'] ) ) { + $data[$name]['groups'] = self::getAutoGroups( $user ); } - // This row contains only one group, others will be added from other rows - $data[$name]['groups'][] = $row->ug_group; - $result->setIndexedTagName( $data[$u]['groups'], 'g' ); + if ( !is_null( $row->ug_group ) ) { + // This row contains only one group, others will be added from other rows + $data[$name]['groups'][] = $row->ug_group; + } } - if ( isset( $this->prop['rights'] ) && !is_null( $row->ug_group ) ) { + if ( isset( $this->prop['rights'] ) ) { if ( !isset( $data[$name]['rights'] ) ) { $data[$name]['rights'] = User::getGroupPermissions( User::getImplicitGroups() ); } - $data[$name]['rights'] = array_unique( array_merge( $data[$name]['rights'], - User::getGroupPermissions( array( $row->ug_group ) ) ) ); - $result->setIndexedTagName( $data[$name]['rights'], 'r' ); + if ( !is_null( $row->ug_group ) ) { + $data[$name]['rights'] = array_unique( array_merge( $data[$name]['rights'], + User::getGroupPermissions( array( $row->ug_group ) ) ) ); + } } if ( $row->ipb_deleted ) { $data[$name]['hidden'] = ''; @@ -195,6 +197,7 @@ class ApiQueryUsers extends ApiQueryBase { } } } + // Second pass: add result data to $retval foreach ( $goodNames as $u ) { if ( !isset( $data[$u] ) ) { @@ -220,6 +223,13 @@ class ApiQueryUsers extends ApiQueryBase { } else { $data[$u]['missing'] = ''; } + } else { + if ( isset( $this->prop['groups'] ) && isset( $data[$u]['groups'] ) ) { + $result->setIndexedTagName( $data[$u]['groups'], 'g' ); + } + if ( isset( $this->prop['rights'] ) && isset( $data[$u]['rights'] ) ) { + $result->setIndexedTagName( $data[$u]['rights'], 'r' ); + } } $fit = $result->addValue( array( 'query', $this->getModuleName() ), @@ -231,7 +241,7 @@ class ApiQueryUsers extends ApiQueryBase { } $done[] = $u; } - return $this->getResult()->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' ); + return $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'user' ); } /** -- 2.20.1