X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=src%2FModule%2FApi%2FMastodon%2FFollowRequests.php;h=fc384f79793d959b0aa787ed9150cef47bfb82a9;hb=7db4c7ea02cdf2c5a1a6e6314aebf206ca25319f;hp=6cafb44a667a9b422788ce23f821849fdc8cc1dc;hpb=df0c05d6356c8e06cd07be5bf81eb1d860b3d9a5;p=friendica.git diff --git a/src/Module/Api/Mastodon/FollowRequests.php b/src/Module/Api/Mastodon/FollowRequests.php index 6cafb44a66..fc384f7979 100644 --- a/src/Module/Api/Mastodon/FollowRequests.php +++ b/src/Module/Api/Mastodon/FollowRequests.php @@ -2,18 +2,16 @@ namespace Friendica\Module\Api\Mastodon; -use Friendica\Api\Mastodon; +use Friendica\Api\Entity\Mastodon; +use Friendica\Api\Entity\Mastodon\Relationship; use Friendica\Core\System; -use Friendica\Database\DBA; -use Friendica\Model\APContact; use Friendica\DI; use Friendica\Model\Contact; -use Friendica\Model\Introduction; use Friendica\Module\Base\Api; use Friendica\Network\HTTPException; /** - * @see https://docs.joinmastodon.org/api/rest/follow-requests/ + * @see https://docs.joinmastodon.org/methods/accounts/follow_requests */ class FollowRequests extends Api { @@ -26,27 +24,41 @@ class FollowRequests extends Api } } + /** + * @param array $parameters + * @throws HTTPException\BadRequestException + * @throws HTTPException\ForbiddenException + * @throws HTTPException\InternalServerErrorException + * @throws HTTPException\NotFoundException + * @throws HTTPException\UnauthorizedException + * @throws \ImagickException + * + * @see https://docs.joinmastodon.org/methods/accounts/follow_requests#accept-follow + * @see https://docs.joinmastodon.org/methods/accounts/follow_requests#reject-follow + */ public static function post(array $parameters = []) { parent::post($parameters); - $Intro = DI::intro()->fetch(['id' => $parameters['id'], 'uid' => self::$current_user_id]); - - $contactId = $Intro->{'contact-id'}; + $introduction = DI::intro()->selectFirst(['id' => $parameters['id'], 'uid' => self::$current_user_id]); - $relationship = new Mastodon\Relationship(); - $relationship->id = $contactId; + $contactId = $introduction->{'contact-id'}; switch ($parameters['action']) { case 'authorize': - $Intro->confirm(); - $relationship = Mastodon\Relationship::createFromContact(Contact::getById($contactId)); + $introduction->confirm(); + + $relationship = DI::mstdnRelationship()->createFromContactId($contactId); break; case 'ignore': - $Intro->ignore(); + $introduction->ignore(); + + $relationship = DI::mstdnRelationship()->createDefaultFromContactId($contactId); break; case 'reject': - $Intro->discard(); + $introduction->discard(); + + $relationship = DI::mstdnRelationship()->createDefaultFromContactId($contactId); break; default: throw new HTTPException\BadRequestException('Unexpected action parameter, expecting "authorize", "ignore" or "reject"'); @@ -58,7 +70,8 @@ class FollowRequests extends Api /** * @param array $parameters * @throws HTTPException\InternalServerErrorException - * @see https://docs.joinmastodon.org/api/rest/follow-requests/#get-api-v1-follow-requests + * @throws \ImagickException + * @see https://docs.joinmastodon.org/methods/accounts/follow_requests#pending-follows */ public static function rawContent(array $parameters = []) { @@ -66,35 +79,25 @@ class FollowRequests extends Api $max_id = $_GET['max_id'] ?? null; $limit = intval($_GET['limit'] ?? 40); - if (isset($since_id) && isset($max_id)) { - $condition = ['`uid` = ? AND NOT `ignore` AND `id` > ? AND `id` < ?', self::$current_user_id, $since_id, $max_id]; - } elseif (isset($since_id)) { - $condition = ['`uid` = ? AND NOT `ignore` AND `id` > ?', self::$current_user_id, $since_id]; - } elseif (isset($max_id)) { - $condition = ['`uid` = ? AND NOT `ignore` AND `id` < ?', self::$current_user_id, $max_id]; - } else { - $condition = ['`uid` = ? AND NOT `ignore`', self::$current_user_id]; - } - - $count = DBA::count('intro', $condition); + $baseUrl = DI::baseUrl(); - $intros = DBA::selectToArray( - 'intro', - [], - $condition, - ['order' => ['id' => 'DESC'], 'limit' => $limit] + $introductions = DI::intro()->selectByBoundaries( + ['`uid` = ? AND NOT `ignore`', self::$current_user_id], + ['order' => ['id' => 'DESC']], + $since_id, + $max_id, + $limit ); $return = []; - foreach ($intros as $intro) { - $contact = Contact::getById($intro['contact-id']); - $apcontact = APContact::getByURL($contact['url'], false); - $account = Mastodon\Account::createFromContact($contact, $apcontact); - - // Not ideal, the same "account" can have multiple ids depending on the context - $account->id = $intro['id']; - $return[] = $account; + foreach ($introductions as $key => $introduction) { + try { + $return[] = DI::mstdnFollowRequest()->createFromIntroduction($introduction); + } catch (HTTPException\InternalServerErrorException $exception) { + DI::intro()->delete($introduction); + unset($introductions[$key]); + } } $base_query = []; @@ -102,13 +105,11 @@ class FollowRequests extends Api $base_query['limit'] = $limit; } - $BaseURL = DI::baseUrl(); - $links = []; - if ($count > $limit) { - $links[] = '<' . $BaseURL->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['max_id' => $intros[count($intros) - 1]['id']]) . '>; rel="next"'; + if ($introductions->getTotalCount() > $limit) { + $links[] = '<' . $baseUrl->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['max_id' => $introductions[count($introductions) - 1]->id]) . '>; rel="next"'; } - $links[] = '<' . $BaseURL->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['since_id' => $intros[0]['id']]) . '>; rel="prev"'; + $links[] = '<' . $baseUrl->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['since_id' => $introductions[0]->id]) . '>; rel="prev"'; header('Link: ' . implode(', ', $links));