* (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)
This commit is contained in:
Sam Reed 2011-03-12 22:23:43 +00:00
parent 7805997608
commit 86ce74c75d
2 changed files with 27 additions and 14 deletions

View file

@ -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 ===

View file

@ -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' );
}
/**