Use new extenders (#25)

This commit is contained in:
Sami Mazouz 2020-12-08 16:59:03 +01:00 committed by GitHub
parent 78288cfbae
commit 99e73a38a9
2 changed files with 25 additions and 74 deletions

View File

@ -7,6 +7,8 @@
* LICENSE file that was distributed with this source code.
*/
use Flarum\Api\Controller;
use Flarum\Api\Serializer\BasicUserSerializer;
use Flarum\Api\Serializer\PostSerializer;
use Flarum\Extend;
use Flarum\Likes\Event\PostWasLiked;
@ -33,11 +35,29 @@ return [
(new Extend\Notification())
->type(PostLikedBlueprint::class, PostSerializer::class, ['alert']),
function (Dispatcher $events) {
$events->subscribe(Listener\AddPostLikesRelationship::class);
$events->subscribe(Listener\SaveLikesToDatabase::class);
(new Extend\ApiSerializer(PostSerializer::class))
->hasMany('likes', BasicUserSerializer::class)
->attribute('canLike', function (PostSerializer $serializer, $model) {
return (bool) $serializer->getActor()->can('like', $model);
}),
$events->listen(PostWasLiked::class, Listener\SendNotificationWhenPostIsLiked::class);
$events->listen(PostWasUnliked::class, Listener\SendNotificationWhenPostIsUnliked::class);
(new Extend\ApiController(Controller\ShowDiscussionController::class))
->addInclude('posts.likes'),
(new Extend\ApiController(Controller\ListPostsController::class))
->addInclude('likes'),
(new Extend\ApiController(Controller\ShowPostController::class))
->addInclude('likes'),
(new Extend\ApiController(Controller\CreatePostController::class))
->addInclude('likes'),
(new Extend\ApiController(Controller\UpdatePostController::class))
->addInclude('likes'),
(new Extend\Event())
->listen(PostWasLiked::class, Listener\SendNotificationWhenPostIsLiked::class)
->listen(PostWasUnliked::class, Listener\SendNotificationWhenPostIsUnliked::class),
function (Dispatcher $events) {
$events->subscribe(Listener\SaveLikesToDatabase::class);
},
];

View File

@ -1,69 +0,0 @@
<?php
/*
* This file is part of Flarum.
*
* For detailed copyright and license information, please view the
* LICENSE file that was distributed with this source code.
*/
namespace Flarum\Likes\Listener;
use Flarum\Api\Controller;
use Flarum\Api\Event\Serializing;
use Flarum\Api\Event\WillGetData;
use Flarum\Api\Serializer\BasicUserSerializer;
use Flarum\Api\Serializer\PostSerializer;
use Flarum\Event\GetApiRelationship;
use Illuminate\Contracts\Events\Dispatcher;
class AddPostLikesRelationship
{
/**
* @param Dispatcher $events
*/
public function subscribe(Dispatcher $events)
{
$events->listen(GetApiRelationship::class, [$this, 'getApiAttributes']);
$events->listen(Serializing::class, [$this, 'prepareApiAttributes']);
$events->listen(WillGetData::class, [$this, 'includeLikes']);
}
/**
* @param GetApiRelationship $event
* @return \Tobscure\JsonApi\Relationship|null
*/
public function getApiAttributes(GetApiRelationship $event)
{
if ($event->isRelationship(PostSerializer::class, 'likes')) {
return $event->serializer->hasMany($event->model, BasicUserSerializer::class, 'likes');
}
}
/**
* @param Serializing $event
*/
public function prepareApiAttributes(Serializing $event)
{
if ($event->isSerializer(PostSerializer::class)) {
$event->attributes['canLike'] = (bool) $event->actor->can('like', $event->model);
}
}
/**
* @param WillGetData $event
*/
public function includeLikes(WillGetData $event)
{
if ($event->isController(Controller\ShowDiscussionController::class)) {
$event->addInclude('posts.likes');
}
if ($event->isController(Controller\ListPostsController::class)
|| $event->isController(Controller\ShowPostController::class)
|| $event->isController(Controller\CreatePostController::class)
|| $event->isController(Controller\UpdatePostController::class)) {
$event->addInclude('likes');
}
}
}