From 81b9d259065c0a78050cbf43729739ba66985aa3 Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 13 Dec 2019 11:43:20 -0500 Subject: [PATCH 1/3] Add relationship filter to api_ff_ids() --- include/api.php | 30 +++++++++++++++++------------- 1 file changed, 17 insertions(+), 13 deletions(-) diff --git a/include/api.php b/include/api.php index 681515cc37..20c5d2264f 100644 --- a/include/api.php +++ b/include/api.php @@ -3603,6 +3603,7 @@ api_register_func('api/statusnet/version', 'api_statusnet_version', false); * * @param string $type Return type (atom, rss, xml, json) * + * @param int $rel A contact relationship constant * @return array|string|void * @throws BadRequestException * @throws ForbiddenException @@ -3611,7 +3612,7 @@ api_register_func('api/statusnet/version', 'api_statusnet_version', false); * @throws UnauthorizedException * @todo use api_format_data() to return data */ -function api_ff_ids($type) +function api_ff_ids($type, int $rel) { if (!api_user()) { throw new ForbiddenException(); @@ -3623,26 +3624,29 @@ function api_ff_ids($type) $stringify_ids = $_REQUEST['stringify_ids'] ?? false; - $r = q( - "SELECT `pcontact`.`id` FROM `contact` - INNER JOIN `contact` AS `pcontact` ON `contact`.`nurl` = `pcontact`.`nurl` AND `pcontact`.`uid` = 0 - WHERE `contact`.`uid` = %s AND NOT `contact`.`self`", - intval(api_user()) + $contacts = DBA::p("SELECT `pcontact`.`id` + FROM `contact` + INNER JOIN `contact` AS `pcontact` + ON `contact`.`nurl` = `pcontact`.`nurl` + 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 = []; - foreach ($r as $rr) { + foreach (DBA::toArray($contacts) as $contact) { if ($stringify_ids) { - $ids[] = $rr['id']; + $ids[] = $contact['id']; } 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]); } /** From c9c30e4a236f74d0f5217abf8212905178570c2d Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 13 Dec 2019 11:43:45 -0500 Subject: [PATCH 2/3] Add relationship filter to api_friends_ids and api_followers_ids --- include/api.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/include/api.php b/include/api.php index 20c5d2264f..5329e0b1f3 100644 --- a/include/api.php +++ b/include/api.php @@ -3657,11 +3657,14 @@ function api_ff_ids($type, int $rel) * @return array|string * @throws BadRequestException * @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 */ function api_friends_ids($type) { - return api_ff_ids($type); + return api_ff_ids($type, Contact::SHARING); } /** @@ -3672,11 +3675,14 @@ function api_friends_ids($type) * @return array|string * @throws BadRequestException * @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 */ 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 From c88e76e427c3f75e8d6c20417cf64a977c53326e Mon Sep 17 00:00:00 2001 From: Hypolite Petovan Date: Fri, 13 Dec 2019 15:22:24 -0500 Subject: [PATCH 3/3] Update tests related to api_ff_ids - Use new parameter - Use new empty return --- tests/include/ApiTest.php | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/tests/include/ApiTest.php b/tests/include/ApiTest.php index 245529fb21..fc797ec3f0 100644 --- a/tests/include/ApiTest.php +++ b/tests/include/ApiTest.php @@ -13,6 +13,7 @@ use Friendica\Core\Config\PConfiguration; use Friendica\Core\Protocol; use Friendica\Core\System; use Friendica\Database\Database; +use Friendica\Model\Contact; use Friendica\Network\HTTPException; use Friendica\Test\Util\Database\StaticDatabase; use Monolog\Handler\TestHandler; @@ -2922,8 +2923,8 @@ class ApiTest extends DatabaseTest */ public function testApiFfIds() { - $result = api_ff_ids('json'); - $this->assertNull($result); + $result = api_ff_ids('json', Contact::FOLLOWER); + $this->assertEquals(['id' => []], $result); } /** @@ -2945,7 +2946,7 @@ class ApiTest extends DatabaseTest public function testApiFfIdsWithoutAuthenticatedUser() { $_SESSION['authenticated'] = false; - api_ff_ids('json'); + api_ff_ids('json', Contact::FOLLOWER); } /** @@ -2956,7 +2957,7 @@ class ApiTest extends DatabaseTest public function testApiFriendsIds() { $result = api_friends_ids('json'); - $this->assertNull($result); + $this->assertEquals(['id' => []], $result); } /** @@ -2967,7 +2968,7 @@ class ApiTest extends DatabaseTest public function testApiFollowersIds() { $result = api_followers_ids('json'); - $this->assertNull($result); + $this->assertEquals(['id' => []], $result); } /**