Skip to content

Commit

Permalink
Use new extenders (#34)
Browse files Browse the repository at this point in the history
  • Loading branch information
SychO9 authored Dec 8, 2020
1 parent 6490417 commit 00e34a8
Show file tree
Hide file tree
Showing 8 changed files with 260 additions and 220 deletions.
47 changes: 40 additions & 7 deletions extend.php
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,28 @@
* LICENSE file that was distributed with this source code.
*/

use Flarum\Api\Event\Serializing;
use Flarum\Api\Controller\AbstractSerializeController;
use Flarum\Api\Controller\ListPostsController;
use Flarum\Api\Controller\ShowDiscussionController;
use Flarum\Api\Controller\ShowPostController;
use Flarum\Api\Serializer\CurrentUserSerializer;
use Flarum\Api\Serializer\ForumSerializer;
use Flarum\Api\Serializer\PostSerializer;
use Flarum\Extend;
use Flarum\Flags\AddCanFlagAttribute;
use Flarum\Flags\AddFlagsApiAttributes;
use Flarum\Flags\AddNewFlagCountAttribute;
use Flarum\Flags\Api\Controller\CreateFlagController;
use Flarum\Flags\Api\Controller\DeleteFlagsController;
use Flarum\Flags\Api\Controller\ListFlagsController;
use Flarum\Flags\Api\Serializer\FlagSerializer;
use Flarum\Flags\Flag;
use Flarum\Flags\Listener;
use Flarum\Flags\PrepareFlagsApiData;
use Flarum\Forum\Content\AssertRegistered;
use Flarum\Post\Event\Deleted;
use Flarum\Post\Post;
use Flarum\User\User;
use Illuminate\Contracts\Events\Dispatcher;

return [
(new Extend\Frontend('forum'))
Expand All @@ -39,11 +50,33 @@
(new Extend\Model(Post::class))
->hasMany('flags', Flag::class, 'post_id'),

new Extend\Locales(__DIR__.'/locale'),
(new Extend\ApiSerializer(PostSerializer::class))
->hasMany('flags', FlagSerializer::class)
->attribute('canFlag', AddCanFlagAttribute::class),

(new Extend\ApiSerializer(CurrentUserSerializer::class))
->attribute('newFlagCount', AddNewFlagCountAttribute::class),

(new Extend\ApiSerializer(ForumSerializer::class))
->mutate(AddFlagsApiAttributes::class),

(new Extend\ApiController(ShowDiscussionController::class))
->addInclude(['posts.flags', 'posts.flags.user']),

(new Extend\ApiController(ListPostsController::class))
->addInclude(['flags', 'flags.user']),

function (Dispatcher $events) {
$events->listen(Serializing::class, Listener\AddFlagsApiAttributes::class);
(new Extend\ApiController(ShowPostController::class))
->addInclude(['flags', 'flags.user']),

$events->subscribe(Listener\AddPostFlagsRelationship::class);
},
(new Extend\ApiController(AbstractSerializeController::class))
->prepareDataForSerialization(PrepareFlagsApiData::class),

(new Extend\Settings())
->serializeToForum('guidelinesUrl', 'flarum-flags.guidelines_url'),

(new Extend\Event())
->listen(Deleted::class, Listener\DeleteFlags::class),

new Extend\Locales(__DIR__.'/locale'),
];
46 changes: 46 additions & 0 deletions src/AddCanFlagAttribute.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
<?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\Flags;

use Flarum\Api\Serializer\PostSerializer;
use Flarum\Post\Post;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\User;

class AddCanFlagAttribute
{
/**
* @var SettingsRepositoryInterface
*/
protected $settings;

/**
* @param SettingsRepositoryInterface $settings
*/
public function __construct(SettingsRepositoryInterface $settings)
{
$this->settings = $settings;
}

public function __invoke(PostSerializer $serializer, Post $post)
{
return $serializer->getActor()->can('flag', $post) && $this->checkFlagOwnPostSetting($serializer->getActor(), $post);
}

protected function checkFlagOwnPostSetting(User $actor, Post $post): bool
{
if ($actor->id === $post->user_id) {
// If $actor is the post author, check to see if the setting is enabled
return (bool) $this->settings->get('flarum-flags.can_flag_own');
}
// $actor is not the post author
return true;
}
}
52 changes: 52 additions & 0 deletions src/AddFlagsApiAttributes.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
<?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\Flags;

use Flarum\Api\Serializer\ForumSerializer;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\User;

class AddFlagsApiAttributes
{
/**
* @var SettingsRepositoryInterface
*/
protected $settings;

/**
* @param SettingsRepositoryInterface $settings
*/
public function __construct(SettingsRepositoryInterface $settings)
{
$this->settings = $settings;
}

public function __invoke(ForumSerializer $serializer)
{
$attributes = [
'canViewFlags' => $serializer->getActor()->hasPermissionLike('discussion.viewFlags')
];

if ($attributes['canViewFlags']) {
$attributes['flagCount'] = (int) $this->getFlagCount($serializer->getActor());
}

return $attributes;
}

/**
* @param User $actor
* @return int
*/
protected function getFlagCount(User $actor)
{
return Flag::whereVisibleTo($actor)->distinct()->count('flags.post_id');
}
}
36 changes: 36 additions & 0 deletions src/AddNewFlagCountAttribute.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
<?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\Flags;

use Flarum\Api\Serializer\CurrentUserSerializer;
use Flarum\User\User;

class AddNewFlagCountAttribute
{
public function __invoke(CurrentUserSerializer $serializer, User $user)
{
return (int) $this->getNewFlagCount($user);
}

/**
* @param User $actor
* @return int
*/
protected function getNewFlagCount(User $actor)
{
$query = Flag::whereVisibleTo($actor);

if ($time = $actor->read_flags_at) {
$query->where('flags.created_at', '>', $time);
}

return $query->distinct()->count('flags.post_id');
}
}
90 changes: 0 additions & 90 deletions src/Listener/AddFlagsApiAttributes.php

This file was deleted.

Loading

0 comments on commit 00e34a8

Please sign in to comment.