mirror of
https://github.com/friendica/friendica
synced 2025-04-24 23:10:11 +00:00
We now offer an endpoint for featured posts
This commit is contained in:
parent
ba1bdc6920
commit
d7df0825db
5 changed files with 126 additions and 4 deletions
|
@ -288,6 +288,69 @@ class Transmitter
|
|||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Public posts for the given owner
|
||||
*
|
||||
* @param array $owner Owner array
|
||||
* @param integer $page Page number
|
||||
*
|
||||
* @return array of posts
|
||||
* @throws \Friendica\Network\HTTPException\InternalServerErrorException
|
||||
* @throws \ImagickException
|
||||
*/
|
||||
public static function getFeatured($owner, $page = null)
|
||||
{
|
||||
$condition = ["`uri-id` IN (SELECT `uri-id` FROM `collection-view` WHERE `cid` = ? AND `type` = ?)",
|
||||
Contact::getIdForURL($owner['url'], 0, false), Post\Collection::FEATURED];
|
||||
|
||||
$condition = DBA::mergeConditions($condition,
|
||||
['uid' => $owner['uid'],
|
||||
'author-id' => Contact::getIdForURL($owner['url'], 0, false),
|
||||
'private' => [Item::PUBLIC, Item::UNLISTED],
|
||||
'gravity' => [GRAVITY_PARENT, GRAVITY_COMMENT],
|
||||
'network' => Protocol::FEDERATED,
|
||||
'parent-network' => Protocol::FEDERATED,
|
||||
'origin' => true,
|
||||
'deleted' => false,
|
||||
'visible' => true]);
|
||||
|
||||
$count = Post::count($condition);
|
||||
|
||||
$data = ['@context' => ActivityPub::CONTEXT];
|
||||
$data['id'] = DI::baseUrl() . '/featured/' . $owner['nickname'];
|
||||
$data['type'] = 'OrderedCollection';
|
||||
$data['totalItems'] = $count;
|
||||
|
||||
if (empty($page)) {
|
||||
$data['first'] = DI::baseUrl() . '/featured/' . $owner['nickname'] . '?page=1';
|
||||
} else {
|
||||
$data['type'] = 'OrderedCollectionPage';
|
||||
$list = [];
|
||||
|
||||
$items = Post::select(['id'], $condition, ['limit' => [($page - 1) * 20, 20], 'order' => ['created' => true]]);
|
||||
while ($item = Post::fetch($items)) {
|
||||
$activity = self::createActivityFromItem($item['id'], true);
|
||||
$activity['type'] = $activity['type'] == 'Update' ? 'Create' : $activity['type'];
|
||||
|
||||
// Only list "Create" activity objects here, no reshares
|
||||
if (!empty($activity['object']) && ($activity['type'] == 'Create')) {
|
||||
$list[] = $activity['object'];
|
||||
}
|
||||
}
|
||||
DBA::close($items);
|
||||
|
||||
if (!empty($list)) {
|
||||
$data['next'] = DI::baseUrl() . '/featured/' . $owner['nickname'] . '?page=' . ($page + 1);
|
||||
}
|
||||
|
||||
$data['partOf'] = DI::baseUrl() . '/featured/' . $owner['nickname'];
|
||||
|
||||
$data['orderedItems'] = $list;
|
||||
}
|
||||
|
||||
return $data;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the service array containing information the used software and it's url
|
||||
*
|
||||
|
@ -328,8 +391,9 @@ class Transmitter
|
|||
if ($uid != 0) {
|
||||
$data['following'] = DI::baseUrl() . '/following/' . $owner['nick'];
|
||||
$data['followers'] = DI::baseUrl() . '/followers/' . $owner['nick'];
|
||||
$data['inbox'] = DI::baseUrl() . '/inbox/' . $owner['nick'];
|
||||
$data['outbox'] = DI::baseUrl() . '/outbox/' . $owner['nick'];
|
||||
$data['inbox'] = DI::baseUrl() . '/inbox/' . $owner['nick'];
|
||||
$data['outbox'] = DI::baseUrl() . '/outbox/' . $owner['nick'];
|
||||
$data['featured'] = DI::baseUrl() . '/featured/' . $owner['nick'];
|
||||
} else {
|
||||
$data['inbox'] = DI::baseUrl() . '/friendica/inbox';
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue