$followers = DBA::select('contact-relation', ['relation-cid'], $condition, $parameters);
while ($follower = DBA::fetch($followers)) {
+ self::setBoundaries($follower['relation-cid']);
$accounts[] = DI::mstdnAccount()->createFromContactId($follower['relation-cid'], $uid);
}
DBA::close($followers);
array_reverse($accounts);
}
+ self::setLinkHeader();
System::jsonExit($accounts);
}
}
$followers = DBA::select('contact-relation', ['cid'], $condition, $parameters);
while ($follower = DBA::fetch($followers)) {
+ self::setBoundaries($follower['cid']);
$accounts[] = DI::mstdnAccount()->createFromContactId($follower['cid'], $uid);
}
DBA::close($followers);
array_reverse($accounts);
}
+ self::setLinkHeader();
System::jsonExit($accounts);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
$followers = DBA::select('user-contact', ['cid'], $condition, $parameters);
while ($follower = DBA::fetch($followers)) {
+ self::setBoundaries($follower['cid']);
$accounts[] = DI::mstdnAccount()->createFromContactId($follower['cid'], $uid);
}
DBA::close($followers);
array_reverse($accounts);
}
+ self::setLinkHeader();
System::jsonExit($accounts);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
$conversations = [];
while ($conv = DBA::fetch($convs)) {
+ self::setBoundaries($conv['id']);
$conversations[] = DI::mstdnConversation()->CreateFromConvId($conv['id']);
}
array_reverse($conversations);
}
+ self::setLinkHeader();
System::jsonExit($conversations);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['thr-parent-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['thr-parent-id'], $uid);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
'limit' => 40, // Maximum number of results to return. Defaults to 40. Paginate using the HTTP Link header.
]);
- $baseUrl = DI::baseUrl();
-
$introductions = DI::intro()->selectByBoundaries(
['`uid` = ? AND NOT `ignore`', $uid],
['order' => ['id' => 'DESC']],
foreach ($introductions as $key => $introduction) {
try {
+ self::setBoundaries($introduction->id);
$return[] = DI::mstdnFollowRequest()->createFromIntroduction($introduction);
} catch (HTTPException\InternalServerErrorException $exception) {
DI::intro()->delete($introduction);
}
}
- $base_query = [];
- if (isset($_GET['limit'])) {
- $base_query['limit'] = $request['limit'];
- }
-
- $links = [];
- if ($introductions->getTotalCount() > $request['limit']) {
- $links[] = '<' . $baseUrl->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['max_id' => $introductions[count($introductions) - 1]->id]) . '>; rel="next"';
- }
-
- if (count($introductions)) {
- $links[] = '<' . $baseUrl->get() . '/api/v1/follow_requests?' . http_build_query($base_query + ['min_id' => $introductions[0]->id]) . '>; rel="prev"';
- }
-
- header('Link: ' . implode(', ', $links));
-
+ self::setLinkHeader();
System::jsonExit($return);
}
}
$members = DBA::select('group_member', ['contact-id'], $condition, $params);
while ($member = DBA::fetch($members)) {
+ self::setBoundaries($member['contact-id']);
$accounts[] = DI::mstdnAccount()->createFromContactId($member['contact-id'], $uid);
}
DBA::close($members);
array_reverse($accounts);
}
+ self::setLinkHeader();
System::jsonExit($accounts);
}
}
$followers = DBA::select('user-contact', ['cid'], $condition, $parameters);
while ($follower = DBA::fetch($followers)) {
+ self::setBoundaries($follower['cid']);
$accounts[] = DI::mstdnAccount()->createFromContactId($follower['cid'], $uid);
}
DBA::close($followers);
array_reverse($accounts);
}
+ self::setLinkHeader();
System::jsonExit($accounts);
}
}
$notify = DBA::select('notification', ['id'], $condition, $params);
while ($notification = DBA::fetch($notify)) {
+ self::setBoundaries($notification['id']);
$entry = DI::mstdnNotification()->createFromNotificationId($notification['id']);
if (!empty($entry)) {
$notifications[] = $entry;
array_reverse($notifications);
}
+ self::setLinkHeader();
System::jsonExit($notifications);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
return $statuses;
}
$statuses = [];
while ($mail = DBA::fetch($mails)) {
+ self::setBoundaries($mail['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromMailId($mail['id']);
}
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $item['uid']);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
$statuses = [];
while ($item = Post::fetch($items)) {
+ self::setBoundaries($item['uri-id']);
$statuses[] = DI::mstdnStatus()->createFromUriId($item['uri-id'], $uid);
}
DBA::close($items);
array_reverse($statuses);
}
+ self::setLinkHeader();
System::jsonExit($statuses);
}
}
*/
protected static $format = 'json';
+ /**
+ * @var array
+ */
+ protected static $boundaries = [];
+
+ /**
+ * @var array
+ */
+ protected static $request = [];
+
public static function init(array $parameters = [])
{
$arguments = DI::args();
$httpinput = HTTPInputData::process();
$input = array_merge($httpinput['variables'], $httpinput['files'], $_REQUEST);
+ self::$request = $input;
+ self::$boundaries = [];
+
+ unset(self::$request['pagename']);
+
$request = [];
foreach ($defaults as $parameter => $defaultvalue) {
return $request;
}
+ /**
+ * Set boundaries for the "link" header
+ * @param array $boundaries
+ * @param int $id
+ * @return array
+ */
+ protected static function setBoundaries(int $id)
+ {
+ if (!isset(self::$boundaries['min'])) {
+ self::$boundaries['min'] = $id;
+ }
+
+ if (!isset(self::$boundaries['max'])) {
+ self::$boundaries['max'] = $id;
+ }
+
+ self::$boundaries['min'] = min(self::$boundaries['min'], $id);
+ self::$boundaries['max'] = max(self::$boundaries['max'], $id);
+ }
+
+ /**
+ * Set the "link" header with "next" and "prev" links
+ * @return void
+ */
+ protected static function setLinkHeader()
+ {
+ if (empty(self::$boundaries)) {
+ return;
+ }
+
+ $request = self::$request;
+
+ unset($request['min_id']);
+ unset($request['max_id']);
+ unset($request['since_id']);
+
+ $prev_request = $next_request = $request;
+
+ $prev_request['min_id'] = self::$boundaries['max'] + 1;
+ $next_request['max_id'] = self::$boundaries['min'] - 1;
+
+ $command = DI::baseUrl() . '/' . DI::args()->getCommand();
+
+ $prev = $command . '?' . http_build_query($prev_request);
+ $next = $command . '?' . http_build_query($next_request);
+
+ header('Link: <' . $next . '>; rel="next", <' . $prev . '>; rel="prev"');
+ }
+
/**
* Get current application token
*