X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=includes%2Fapi%2FApiQueryUsers.php;h=3a814c4c49f1bb411af0c7937644afb8a2dc008c;hb=71084989eaf383b166ffdf3b9f9fb97782efa724;hp=2d620a4e9ed60ec566815a548e658bf00a44f4a9;hpb=5b1dcdc344f5d251120a161637bcb89e01b0f6a4;p=lhc%2Fweb%2Fwiklou.git diff --git a/includes/api/ApiQueryUsers.php b/includes/api/ApiQueryUsers.php index 2d620a4e9e..3a814c4c49 100644 --- a/includes/api/ApiQueryUsers.php +++ b/includes/api/ApiQueryUsers.php @@ -42,6 +42,7 @@ class ApiQueryUsers extends ApiQueryBase { // everything except 'blockinfo' which might show hidden records if the user // making the request has the appropriate permissions 'groups', + 'groupmemberships', 'implicitgroups', 'rights', 'editcount', @@ -97,6 +98,8 @@ class ApiQueryUsers extends ApiQueryBase { } public function execute() { + $db = $this->getDB(); + $params = $this->extractRequestParams(); $this->requireMaxOneParameter( $params, 'userids', 'users' ); @@ -167,11 +170,16 @@ class ApiQueryUsers extends ApiQueryBase { $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; } } @@ -207,6 +215,15 @@ class ApiQueryUsers extends ApiQueryBase { $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(); } @@ -303,6 +320,10 @@ class ApiQueryUsers extends ApiQueryBase { 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' ); @@ -347,6 +368,7 @@ class ApiQueryUsers extends ApiQueryBase { ApiBase::PARAM_TYPE => [ 'blockinfo', 'groups', + 'groupmemberships', 'implicitgroups', 'rights', 'editcount',