mirror of
https://github.com/pixelfed/pixelfed.git
synced 2024-12-30 17:03:16 +00:00
49 lines
1.4 KiB
PHP
49 lines
1.4 KiB
PHP
<?php
|
|
|
|
namespace App\Util\ActivityPub;
|
|
|
|
use App\Http\Controllers\ProfileController;
|
|
use App\Status;
|
|
use App\Transformer\ActivityPub\Verb\CreateNote;
|
|
use League\Fractal;
|
|
|
|
class Outbox
|
|
{
|
|
public static function get($profile)
|
|
{
|
|
abort_if(! (bool) config_cache('federation.activitypub.enabled'), 404);
|
|
abort_if(! config('federation.activitypub.outbox'), 404);
|
|
|
|
if ($profile->status != null) {
|
|
return ProfileController::accountCheck($profile);
|
|
}
|
|
|
|
if ($profile->is_private) {
|
|
return ['error' => '403', 'msg' => 'private profile'];
|
|
}
|
|
|
|
$timeline = $profile
|
|
->statuses()
|
|
->whereScope('public')
|
|
->orderBy('created_at', 'desc')
|
|
->take(10)
|
|
->get();
|
|
|
|
$count = Status::whereProfileId($profile->id)->count();
|
|
|
|
$fractal = new Fractal\Manager();
|
|
$resource = new Fractal\Resource\Collection($timeline, new CreateNote());
|
|
$res = $fractal->createData($resource)->toArray();
|
|
|
|
$outbox = [
|
|
'@context' => 'https://www.w3.org/ns/activitystreams',
|
|
'_debug' => 'Outbox only supports latest 10 objects, pagination is not supported',
|
|
'id' => $profile->permalink('/outbox'),
|
|
'type' => 'OrderedCollection',
|
|
'totalItems' => $count,
|
|
'orderedItems' => $res['data'],
|
|
];
|
|
|
|
return $outbox;
|
|
}
|
|
}
|