2022-11-28 21:19:57 +01:00
< ? php
/**
2023-01-01 15:36:24 +01:00
* @ copyright Copyright ( C ) 2010 - 2023 , the Friendica project
2022-11-28 21:19:57 +01:00
*
* @ license GNU AGPL version 3 or any later version
*
* This program is free software : you can redistribute it and / or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation , either version 3 of the
* License , or ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU Affero General Public License for more details .
*
* You should have received a copy of the GNU Affero General Public License
* along with this program . If not , see < https :// www . gnu . org / licenses />.
*
*/
namespace Friendica\Module\Api\Mastodon\Trends ;
use Friendica\Core\Protocol ;
use Friendica\Core\System ;
use Friendica\Database\DBA ;
use Friendica\DI ;
use Friendica\Model\Post ;
use Friendica\Module\BaseApi ;
use Friendica\Util\DateTimeFormat ;
/**
* @ see https :// docs . joinmastodon . org / methods / trends / #links
*/
class Links extends BaseApi
{
/**
* @ throws \Friendica\Network\HTTPException\InternalServerErrorException
*/
protected function rawContent ( array $request = [])
{
$request = $this -> getRequest ([
'limit' => 10 , // Maximum number of results to return. Defaults to 10.
2023-02-17 19:24:11 +01:00
'offset' => 0 , // Offset in set, Defaults to 0.
2022-11-28 21:19:57 +01:00
], $request );
$condition = [ " EXISTS(SELECT `id` FROM `post-media` WHERE `post-media`.`uri-id` = `post-thread-view`.`uri-id` AND `type` = ? AND NOT `name` IS NULL AND NOT `description` IS NULL) AND NOT `private` AND `commented` > ? AND `created` > ? " ,
Post\Media :: HTML , DateTimeFormat :: utc ( 'now -1 day' ), DateTimeFormat :: utc ( 'now -1 week' )];
$condition = DBA :: mergeConditions ( $condition , [ 'network' => Protocol :: FEDERATED ]);
$trending = [];
2023-02-17 17:59:30 +01:00
$statuses = Post :: selectPostThread ([ 'uri-id' , 'total-comments' , 'total-actors' ], $condition , [ 'limit' => [ $request [ 'offset' ], $request [ 'limit' ]], 'offset' => $request [ 'offset' ], 'order' => [ 'total-actors' => true ]]);
2022-11-28 21:19:57 +01:00
while ( $status = Post :: fetch ( $statuses )) {
2022-11-28 21:42:34 +01:00
$history = [[ 'day' => ( string ) time (), 'uses' => ( string ) $status [ 'total-comments' ], 'accounts' => ( string ) $status [ 'total-actors' ]]];
2022-11-28 21:19:57 +01:00
$trending [] = DI :: mstdnCard () -> createFromUriId ( $status [ 'uri-id' ], $history ) -> toArray ();
}
DBA :: close ( $statuses );
2023-02-17 19:24:11 +01:00
if ( ! empty ( $trending )) {
self :: setLinkHeaderByOffsetLimit ( $request [ 'offset' ], $request [ 'limit' ]);
}
2023-09-21 18:16:17 +02:00
$this -> jsonExit ( $trending );
2022-11-28 21:19:57 +01:00
}
}