// everything except 'blockinfo' which might show hidden records if the user
// making the request has the appropriate permissions
'groups',
+ 'groupmemberships',
'implicitgroups',
'rights',
'editcount',
}
public function execute() {
+ $db = $this->getDB();
+
$params = $this->extractRequestParams();
$this->requireMaxOneParameter( $params, 'userids', 'users' );
$this->addTables( 'user_groups' );
$this->addJoinConds( [ 'user_groups' => [ 'INNER JOIN', 'ug_user=user_id' ] ] );
- $this->addFields( [ 'user_name', 'ug_group' ] );
+ $this->addFields( [ 'user_name' ] );
+ $this->addFields( UserGroupMembership::selectFields() );
+ if ( !$this->getConfig()->get( 'DisableUserGroupExpiry' ) ) {
+ $this->addWhere( 'ug_expiry IS NULL OR ug_expiry >= ' .
+ $db->addQuotes( $db->timestamp() ) );
+ }
$userGroupsRes = $this->select( __METHOD__ );
foreach ( $userGroupsRes as $row ) {
- $userGroups[$row->user_name][] = $row->ug_group;
+ $userGroups[$row->user_name][] = $row;
}
}
$data[$key]['groups'] = $user->getEffectiveGroups();
}
+ if ( isset( $this->prop['groupmemberships'] ) ) {
+ $data[$key]['groupmemberships'] = array_map( function( $ugm ) {
+ return [
+ 'group' => $ugm->getGroup(),
+ 'expiry' => ApiResult::formatExpiry( $ugm->getExpiry() ),
+ ];
+ }, $user->getGroupMemberships() );
+ }
+
if ( isset( $this->prop['implicitgroups'] ) ) {
$data[$key]['implicitgroups'] = $user->getAutomaticGroups();
}
ApiResult::setArrayType( $data[$u]['groups'], 'array' );
ApiResult::setIndexedTagName( $data[$u]['groups'], 'g' );
}
+ if ( isset( $this->prop['groupmemberships'] ) && isset( $data[$u]['groupmemberships'] ) ) {
+ ApiResult::setArrayType( $data[$u]['groupmemberships'], 'array' );
+ ApiResult::setIndexedTagName( $data[$u]['groupmemberships'], 'groupmembership' );
+ }
if ( isset( $this->prop['implicitgroups'] ) && isset( $data[$u]['implicitgroups'] ) ) {
ApiResult::setArrayType( $data[$u]['implicitgroups'], 'array' );
ApiResult::setIndexedTagName( $data[$u]['implicitgroups'], 'g' );
ApiBase::PARAM_TYPE => [
'blockinfo',
'groups',
+ 'groupmemberships',
'implicitgroups',
'rights',
'editcount',