|
11 | 11 |
|
12 | 12 | namespace FoF\OnlineUsers; |
13 | 13 |
|
14 | | -use Flarum\Api\Serializer as FlarumSerializer; |
15 | | -use Flarum\Api\Controller\ShowForumController; |
| 14 | +use Flarum\Api\Context; |
| 15 | +use Flarum\Api\Endpoint; |
| 16 | +use Flarum\Api\Resource; |
| 17 | +use Flarum\Api\Schema; |
16 | 18 | use Flarum\Extend; |
17 | 19 |
|
18 | 20 | return [ |
|
26 | 28 |
|
27 | 29 | new Extend\Locales(__DIR__.'/locale'), |
28 | 30 |
|
29 | | - (new Extend\ApiSerializer(FlarumSerializer\ForumSerializer::class)) |
30 | | - ->attribute('canViewOnlineUsersWidget', function ($serializer) { |
31 | | - return $serializer->getActor()->hasPermission('viewOnlineUsersWidget'); |
32 | | - }) |
33 | | - ->attribute('totalOnlineUsers', function (FlarumSerializer\ForumSerializer $serializer) { |
34 | | - return resolve(UserRepository::class)->getOnlineUsers($serializer->getActor())['count'] ?? 0; |
35 | | - }) |
36 | | - ->hasMany('onlineUsers', FlarumSerializer\UserSerializer::class), |
37 | | - |
38 | | - (new Extend\ApiController(ShowForumController::class)) |
39 | | - ->addInclude(['onlineUsers']) |
40 | | - ->prepareDataForSerialization(LoadForumOnlineUsersRelationship::class), |
| 31 | + (new Extend\ApiResource(Resource\ForumResource::class)) |
| 32 | + ->fields(fn () => [ |
| 33 | + Schema\Boolean::make('canViewOnlineUsersWidget') |
| 34 | + ->get(fn ($model, Context $context) => $context->getActor()->hasPermission('viewOnlineUsersWidget')), |
| 35 | + |
| 36 | + Schema\Integer::make('totalOnlineUsers') |
| 37 | + ->get(fn ($model, Context $context) => resolve(UserRepository::class)->getOnlineUsers($context->getActor())['count'] ?? 0), |
| 38 | + |
| 39 | + Schema\Relationship\ToMany::make('onlineUsers') |
| 40 | + ->type('users') |
| 41 | + ->includable() |
| 42 | + ->get(fn ($model, Context $context) => resolve(UserRepository::class)->getOnlineUsers($context->getActor())['users'] ?? []), |
| 43 | + ]) |
| 44 | + ->endpoint(Endpoint\Show::class, fn (Endpoint\Show $endpoint) => $endpoint->addDefaultInclude(['onlineUsers'])), |
41 | 45 |
|
42 | 46 | (new Extend\Settings) |
43 | 47 | ->default('fof-online-users-widget.max_users', 15) |
|
0 commit comments