Merge pull request #7943 from MrPetovan/bug/7920-api-fix-followers-friends-ids

Add relationship filter to api_friends_ids and api_followers_ids
This commit is contained in:
Michael Vogel 2019-12-13 21:34:09 +01:00 committed by GitHub
commit b2ae39db1a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 31 additions and 20 deletions

View File

@ -3626,6 +3626,7 @@ api_register_func('api/statusnet/version', 'api_statusnet_version', false);
* *
* @param string $type Return type (atom, rss, xml, json) * @param string $type Return type (atom, rss, xml, json)
* *
* @param int $rel A contact relationship constant
* @return array|string|void * @return array|string|void
* @throws BadRequestException * @throws BadRequestException
* @throws ForbiddenException * @throws ForbiddenException
@ -3634,7 +3635,7 @@ api_register_func('api/statusnet/version', 'api_statusnet_version', false);
* @throws UnauthorizedException * @throws UnauthorizedException
* @todo use api_format_data() to return data * @todo use api_format_data() to return data
*/ */
function api_ff_ids($type) function api_ff_ids($type, int $rel)
{ {
if (!api_user()) { if (!api_user()) {
throw new ForbiddenException(); throw new ForbiddenException();
@ -3646,26 +3647,29 @@ function api_ff_ids($type)
$stringify_ids = $_REQUEST['stringify_ids'] ?? false; $stringify_ids = $_REQUEST['stringify_ids'] ?? false;
$r = q( $contacts = DBA::p("SELECT `pcontact`.`id`
"SELECT `pcontact`.`id` FROM `contact` FROM `contact`
INNER JOIN `contact` AS `pcontact` ON `contact`.`nurl` = `pcontact`.`nurl` AND `pcontact`.`uid` = 0 INNER JOIN `contact` AS `pcontact`
WHERE `contact`.`uid` = %s AND NOT `contact`.`self`", ON `contact`.`nurl` = `pcontact`.`nurl`
intval(api_user()) AND `pcontact`.`uid` = 0
WHERE `contact`.`uid` = ?
AND NOT `contact`.`self`
AND `contact`.`rel` IN (?, ?)",
api_user(),
$rel,
Contact::FRIEND
); );
if (!DBA::isResult($r)) {
return;
}
$ids = []; $ids = [];
foreach ($r as $rr) { foreach (DBA::toArray($contacts) as $contact) {
if ($stringify_ids) { if ($stringify_ids) {
$ids[] = $rr['id']; $ids[] = $contact['id'];
} else { } else {
$ids[] = intval($rr['id']); $ids[] = intval($contact['id']);
} }
} }
return api_format_data("ids", $type, ['id' => $ids]); return api_format_data('ids', $type, ['id' => $ids]);
} }
/** /**
@ -3676,11 +3680,14 @@ function api_ff_ids($type)
* @return array|string * @return array|string
* @throws BadRequestException * @throws BadRequestException
* @throws ForbiddenException * @throws ForbiddenException
* @throws ImagickException
* @throws InternalServerErrorException
* @throws UnauthorizedException
* @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-friends-ids
*/ */
function api_friends_ids($type) function api_friends_ids($type)
{ {
return api_ff_ids($type); return api_ff_ids($type, Contact::SHARING);
} }
/** /**
@ -3691,11 +3698,14 @@ function api_friends_ids($type)
* @return array|string * @return array|string
* @throws BadRequestException * @throws BadRequestException
* @throws ForbiddenException * @throws ForbiddenException
* @throws ImagickException
* @throws InternalServerErrorException
* @throws UnauthorizedException
* @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids * @see https://developer.twitter.com/en/docs/accounts-and-users/follow-search-get-users/api-reference/get-followers-ids
*/ */
function api_followers_ids($type) function api_followers_ids($type)
{ {
return api_ff_ids($type); return api_ff_ids($type, Contact::FOLLOWER);
} }
/// @TODO move to top of file or somewhere better /// @TODO move to top of file or somewhere better

View File

@ -13,6 +13,7 @@ use Friendica\Core\Config\PConfiguration;
use Friendica\Core\Protocol; use Friendica\Core\Protocol;
use Friendica\Core\System; use Friendica\Core\System;
use Friendica\Database\Database; use Friendica\Database\Database;
use Friendica\Model\Contact;
use Friendica\Network\HTTPException; use Friendica\Network\HTTPException;
use Friendica\Test\Util\Database\StaticDatabase; use Friendica\Test\Util\Database\StaticDatabase;
use Monolog\Handler\TestHandler; use Monolog\Handler\TestHandler;
@ -2922,8 +2923,8 @@ class ApiTest extends DatabaseTest
*/ */
public function testApiFfIds() public function testApiFfIds()
{ {
$result = api_ff_ids('json'); $result = api_ff_ids('json', Contact::FOLLOWER);
$this->assertNull($result); $this->assertEquals(['id' => []], $result);
} }
/** /**
@ -2945,7 +2946,7 @@ class ApiTest extends DatabaseTest
public function testApiFfIdsWithoutAuthenticatedUser() public function testApiFfIdsWithoutAuthenticatedUser()
{ {
$_SESSION['authenticated'] = false; $_SESSION['authenticated'] = false;
api_ff_ids('json'); api_ff_ids('json', Contact::FOLLOWER);
} }
/** /**
@ -2956,7 +2957,7 @@ class ApiTest extends DatabaseTest
public function testApiFriendsIds() public function testApiFriendsIds()
{ {
$result = api_friends_ids('json'); $result = api_friends_ids('json');
$this->assertNull($result); $this->assertEquals(['id' => []], $result);
} }
/** /**
@ -2967,7 +2968,7 @@ class ApiTest extends DatabaseTest
public function testApiFollowersIds() public function testApiFollowersIds()
{ {
$result = api_followers_ids('json'); $result = api_followers_ids('json');
$this->assertNull($result); $this->assertEquals(['id' => []], $result);
} }
/** /**