diff --git a/src/Module/Api/Twitter/Followers/Ids.php b/src/Module/Api/Twitter/Followers/Ids.php index 6acf7c8311..2a810849be 100644 --- a/src/Module/Api/Twitter/Followers/Ids.php +++ b/src/Module/Api/Twitter/Followers/Ids.php @@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Twitter\Followers; use Friendica\Core\System; use Friendica\Database\DBA; +use Friendica\Model\Contact; use Friendica\Module\Api\Twitter\ContactEndpoint; use Friendica\Module\BaseApi; @@ -47,35 +48,64 @@ class Ids extends ContactEndpoint $max_id = $this->getRequestValue($request, 'max_id', 0, 0); $min_id = $this->getRequestValue($request, 'min_id', 0, 0); - $params = ['order' => ['relation-cid' => true], 'limit' => $count]; + if ($cid == Contact::getPublicIdByUserId($uid)) { + $params = ['order' => ['pid' => true], 'limit' => $count]; - $condition = ['cid' => $cid, 'follows' => true]; + $condition = ['uid' => $uid, 'self' => false, 'pending' => false, 'rel' => [Contact::FOLLOWER, Contact::FRIEND]]; + + $total_count = (int)DBA::count('contact', $condition); - $total_count = (int)DBA::count('contact-relation', $condition); + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $min_id]); + + $params['order'] = ['pid']; + } + + $ids = []; + + foreach (Contact::selectAccountToArray(['pid'], $condition, $params) as $follower) { + self::setBoundaries($follower['pid']); + $ids[] = $follower['pid']; + } + } else { + $params = ['order' => ['relation-cid' => true], 'limit' => $count]; - if (!empty($max_id)) { - $condition = DBA::mergeConditions($condition, ["`relation-cid` < ?", $max_id]); + $condition = ['cid' => $cid, 'follows' => true]; + + $total_count = (int)DBA::count('contact-relation', $condition); + + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`relation-cid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $min_id]); + + $params['order'] = ['relation-cid']; + } + + $ids = []; + + $followers = DBA::select('contact-relation', ['relation-cid'], $condition, $params); + while ($follower = DBA::fetch($followers)) { + self::setBoundaries($follower['relation-cid']); + $ids[] = $follower['relation-cid']; + } + DBA::close($followers); } - if (!empty($since_id)) { - $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $since_id]); - } - - if (!empty($min_id)) { - $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $min_id]); - - $params['order'] = ['relation-cid']; - } - - $ids = []; - - $followers = DBA::select('contact-relation', ['relation-cid'], $condition, $params); - while ($follower = DBA::fetch($followers)) { - self::setBoundaries($follower['relation-cid']); - $ids[] = $follower['relation-cid']; - } - DBA::close($followers); - if (!empty($min_id)) { $ids = array_reverse($ids); } diff --git a/src/Module/Api/Twitter/Followers/Lists.php b/src/Module/Api/Twitter/Followers/Lists.php index fbae33652f..04bddf83cd 100644 --- a/src/Module/Api/Twitter/Followers/Lists.php +++ b/src/Module/Api/Twitter/Followers/Lists.php @@ -21,8 +21,8 @@ namespace Friendica\Module\Api\Twitter\Followers; -use Friendica\Core\System; use Friendica\Database\DBA; +use Friendica\Model\Contact; use Friendica\Module\Api\Twitter\ContactEndpoint; use Friendica\Module\BaseApi; @@ -48,42 +48,71 @@ class Lists extends ContactEndpoint $max_id = $this->getRequestValue($request, 'max_id', 0, 0); $min_id = $this->getRequestValue($request, 'min_id', 0, 0); - $params = ['order' => ['relation-cid' => true], 'limit' => $count]; + if ($cid == Contact::getPublicIdByUserId($uid)) { + $params = ['order' => ['pid' => true], 'limit' => $count]; - $condition = ['cid' => $cid, 'follows' => true]; + $condition = ['uid' => $uid, 'self' => false, 'pending' => false, 'rel' => [Contact::FOLLOWER, Contact::FRIEND]]; + + $total_count = (int)DBA::count('contact', $condition); - $total_count = (int)DBA::count('contact-relation', $condition); + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $min_id]); + + $params['order'] = ['pid']; + } + + $ids = []; + + foreach (Contact::selectAccountToArray(['pid'], $condition, $params) as $follower) { + self::setBoundaries($follower['pid']); + $ids[] = $follower['pid']; + } + } else { + $params = ['order' => ['relation-cid' => true], 'limit' => $count]; - if (!empty($max_id)) { - $condition = DBA::mergeConditions($condition, ["`relation-cid` < ?", $max_id]); + $condition = ['cid' => $cid, 'follows' => true]; + + $total_count = (int)DBA::count('contact-relation', $condition); + + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`relation-cid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $min_id]); + + $params['order'] = ['relation-cid']; + } + + $ids = []; + + $followers = DBA::select('contact-relation', ['relation-cid'], $condition, $params); + while ($follower = DBA::fetch($followers)) { + self::setBoundaries($follower['relation-cid']); + $ids[] = $follower['relation-cid']; + } + DBA::close($followers); } - if (!empty($since_id)) { - $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $since_id]); - } - - if (!empty($min_id)) { - $condition = DBA::mergeConditions($condition, ["`relation-cid` > ?", $min_id]); - - $params['order'] = ['relation-cid']; - } - - $ids = []; - - $followers = DBA::select('contact-relation', ['relation-cid'], $condition, $params); - while ($follower = DBA::fetch($followers)) { - self::setBoundaries($follower['relation-cid']); - $ids[] = $follower['relation-cid']; - } - DBA::close($followers); - if (!empty($min_id)) { $ids = array_reverse($ids); } $return = self::list($ids, $total_count, $uid, $cursor, $count, $skip_status, $include_user_entities); - self::setLinkHeader(); + $this->response->setHeader(self::getLinkHeader()); $this->response->exit('lists', ['lists' => $return]); } diff --git a/src/Module/Api/Twitter/Friends/Ids.php b/src/Module/Api/Twitter/Friends/Ids.php index a46be8deb9..d12e082cfa 100644 --- a/src/Module/Api/Twitter/Friends/Ids.php +++ b/src/Module/Api/Twitter/Friends/Ids.php @@ -23,6 +23,7 @@ namespace Friendica\Module\Api\Twitter\Friends; use Friendica\Core\System; use Friendica\Database\DBA; +use Friendica\Model\Contact; use Friendica\Module\Api\Twitter\ContactEndpoint; use Friendica\Module\BaseApi; @@ -47,35 +48,64 @@ class Ids extends ContactEndpoint $max_id = $this->getRequestValue($request, 'max_id', 0, 0); $min_id = $this->getRequestValue($request, 'min_id', 0, 0); - $params = ['order' => ['cid' => true], 'limit' => $count]; + if ($cid == Contact::getPublicIdByUserId($uid)) { + $params = ['order' => ['pid' => true], 'limit' => $count]; - $condition = ['relation-cid' => $cid, 'follows' => true]; + $condition = ['uid' => $uid, 'self' => false, 'pending' => false, 'rel' => [Contact::SHARING, Contact::FRIEND]]; + + $total_count = (int)DBA::count('contact', $condition); - $total_count = (int)DBA::count('contact-relation', $condition); + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $min_id]); + + $params['order'] = ['pid']; + } + + $ids = []; + + foreach (Contact::selectAccountToArray(['pid'], $condition, $params) as $follower) { + self::setBoundaries($follower['pid']); + $ids[] = $follower['pid']; + } + } else { + $params = ['order' => ['cid' => true], 'limit' => $count]; - if (!empty($max_id)) { - $condition = DBA::mergeConditions($condition, ["`cid` < ?", $max_id]); + $condition = ['relation-cid' => $cid, 'follows' => true]; + + $total_count = (int)DBA::count('contact-relation', $condition); + + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`cid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`cid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`cid` > ?", $min_id]); + + $params['order'] = ['cid']; + } + + $ids = []; + + $followers = DBA::select('contact-relation', ['cid'], $condition, $params); + while ($follower = DBA::fetch($followers)) { + self::setBoundaries($follower['cid']); + $ids[] = $follower['cid']; + } + DBA::close($followers); } - if (!empty($since_id)) { - $condition = DBA::mergeConditions($condition, ["`cid` > ?", $since_id]); - } - - if (!empty($min_id)) { - $condition = DBA::mergeConditions($condition, ["`cid` > ?", $min_id]); - - $params['order'] = ['cid']; - } - - $ids = []; - - $followers = DBA::select('contact-relation', ['cid'], $condition, $params); - while ($follower = DBA::fetch($followers)) { - self::setBoundaries($follower['cid']); - $ids[] = $follower['cid']; - } - DBA::close($followers); - if (!empty($min_id)) { $ids = array_reverse($ids); } diff --git a/src/Module/Api/Twitter/Friends/Lists.php b/src/Module/Api/Twitter/Friends/Lists.php index 304f19db9e..1abce53646 100644 --- a/src/Module/Api/Twitter/Friends/Lists.php +++ b/src/Module/Api/Twitter/Friends/Lists.php @@ -21,8 +21,8 @@ namespace Friendica\Module\Api\Twitter\Friends; -use Friendica\Core\System; use Friendica\Database\DBA; +use Friendica\Model\Contact; use Friendica\Module\Api\Twitter\ContactEndpoint; use Friendica\Module\BaseApi; @@ -48,42 +48,71 @@ class Lists extends ContactEndpoint $max_id = $this->getRequestValue($request, 'max_id', 0, 0); $min_id = $this->getRequestValue($request, 'min_id', 0, 0); - $params = ['order' => ['cid' => true], 'limit' => $count]; + if ($cid == Contact::getPublicIdByUserId($uid)) { + $params = ['order' => ['pid' => true], 'limit' => $count]; - $condition = ['relation-cid' => $cid, 'follows' => true]; + $condition = ['uid' => $uid, 'self' => false, 'pending' => false, 'rel' => [Contact::SHARING, Contact::FRIEND]]; + + $total_count = (int)DBA::count('contact', $condition); - $total_count = (int)DBA::count('contact-relation', $condition); + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`pid` > ?", $min_id]); + + $params['order'] = ['pid']; + } + + $ids = []; + + foreach (Contact::selectAccountToArray(['pid'], $condition, $params) as $follower) { + self::setBoundaries($follower['pid']); + $ids[] = $follower['pid']; + } + } else { + $params = ['order' => ['cid' => true], 'limit' => $count]; - if (!empty($max_id)) { - $condition = DBA::mergeConditions($condition, ["`cid` < ?", $max_id]); + $condition = ['relation-cid' => $cid, 'follows' => true]; + + $total_count = (int)DBA::count('contact-relation', $condition); + + if (!empty($max_id)) { + $condition = DBA::mergeConditions($condition, ["`cid` < ?", $max_id]); + } + + if (!empty($since_id)) { + $condition = DBA::mergeConditions($condition, ["`cid` > ?", $since_id]); + } + + if (!empty($min_id)) { + $condition = DBA::mergeConditions($condition, ["`cid` > ?", $min_id]); + + $params['order'] = ['cid']; + } + + $ids = []; + + $followers = DBA::select('contact-relation', ['cid'], $condition, $params); + while ($follower = DBA::fetch($followers)) { + self::setBoundaries($follower['cid']); + $ids[] = $follower['cid']; + } + DBA::close($followers); } - if (!empty($since_id)) { - $condition = DBA::mergeConditions($condition, ["`cid` > ?", $since_id]); - } - - if (!empty($min_id)) { - $condition = DBA::mergeConditions($condition, ["`cid` > ?", $min_id]); - - $params['order'] = ['cid']; - } - - $ids = []; - - $followers = DBA::select('contact-relation', ['cid'], $condition, $params); - while ($follower = DBA::fetch($followers)) { - self::setBoundaries($follower['cid']); - $ids[] = $follower['cid']; - } - DBA::close($followers); - if (!empty($min_id)) { $ids = array_reverse($ids); } $return = self::list($ids, $total_count, $uid, $cursor, $count, $skip_status, $include_user_entities); - self::setLinkHeader(); + $this->response->setHeader(self::getLinkHeader()); $this->response->exit('lists', ['lists' => $return]); } diff --git a/src/Module/Api/Twitter/Friendships/Incoming.php b/src/Module/Api/Twitter/Friendships/Incoming.php index d34d79fae0..89a7b4bcec 100644 --- a/src/Module/Api/Twitter/Friendships/Incoming.php +++ b/src/Module/Api/Twitter/Friendships/Incoming.php @@ -21,7 +21,6 @@ namespace Friendica\Module\Api\Twitter\Friendships; -use Friendica\Core\System; use Friendica\Database\DBA; use Friendica\Module\Api\Twitter\ContactEndpoint; use Friendica\Module\BaseApi; @@ -81,7 +80,7 @@ class Incoming extends ContactEndpoint $return = self::ids($ids, $total_count, $cursor, $count, $stringify_ids); - self::setLinkHeader(); + $this->response->setHeader(self::getLinkHeader()); $this->response->exit('incoming', ['incoming' => $return]); } diff --git a/src/Module/BaseApi.php b/src/Module/BaseApi.php index 47557928a9..1d5249ac85 100644 --- a/src/Module/BaseApi.php +++ b/src/Module/BaseApi.php @@ -139,13 +139,13 @@ class BaseApi extends BaseModule } /** - * Set the "link" header with "next" and "prev" links - * @return void + * Get the "link" header with "next" and "prev" links + * @return string */ - protected static function setLinkHeader() + protected static function getLinkHeader(): string { if (empty(self::$boundaries)) { - return; + return ''; } $request = self::$request; @@ -164,7 +164,19 @@ class BaseApi extends BaseModule $prev = $command . '?' . http_build_query($prev_request); $next = $command . '?' . http_build_query($next_request); - header('Link: <' . $next . '>; rel="next", <' . $prev . '>; rel="prev"'); + return 'Link: <' . $next . '>; rel="next", <' . $prev . '>; rel="prev"'; + } + + /** + * Set the "link" header with "next" and "prev" links + * @return void + */ + protected static function setLinkHeader() + { + $header = self::getLinkHeader(); + if (!empty($header)) { + header($header); + } } /**