js(__DIR__.'/js/dist/forum.js') ->css(__DIR__.'/less/forum.less'), (new Extend\Model(Discussion::class)) ->cast('is_sticky', 'bool'), (new Extend\Post()) ->type(DiscussionStickiedPost::class), (new Extend\ApiSerializer(DiscussionSerializer::class)) ->attribute('isSticky', function (DiscussionSerializer $serializer, Discussion $discussion) { return (bool) $discussion->is_sticky; }) ->attribute('canSticky', function (DiscussionSerializer $serializer, $discussion) { return (bool) $serializer->getActor()->can('sticky', $discussion); }), (new Extend\ApiController(ListDiscussionsController::class)) ->addInclude('firstPost'), (new Extend\Frontend('admin')) ->js(__DIR__.'/js/dist/admin.js'), new Extend\Locales(__DIR__.'/locale'), (new Extend\Event()) ->listen(Saving::class, SaveStickyToDatabase::class) ->listen(DiscussionWasStickied::class, [Listener\CreatePostWhenDiscussionIsStickied::class, 'whenDiscussionWasStickied']) ->listen(DiscussionWasUnstickied::class, [Listener\CreatePostWhenDiscussionIsStickied::class, 'whenDiscussionWasUnstickied']), (new Extend\SearchDriver(DatabaseSearchDriver::class)) ->addFilter(DiscussionSearcher::class, StickyFilter::class) ->addMutator(DiscussionSearcher::class, PinStickiedDiscussionsToTop::class), ];