mirror of
https://github.com/flarum/core.git
synced 2025-10-10 22:44:25 +02:00
Massive refactor
- Use contextual namespaces within Flarum\Core - Clean up and docblock everything - Refactor Activity/Notification blueprint stuff - Refactor Formatter stuff - Refactor Search stuff - Upgrade to JSON-API 1.0 - Removed “addedPosts” and “removedPosts” relationships from discussion API. This was used for adding/removing event posts after renaming a discussion etc. Instead we should make an additional request to get all new posts Todo: - Fix Extenders and extensions - Get rid of repository interfaces - Fix other bugs I’ve inevitably introduced
This commit is contained in:
74
src/Core/Discussions/DiscussionsServiceProvider.php
Normal file
74
src/Core/Discussions/DiscussionsServiceProvider.php
Normal file
@@ -0,0 +1,74 @@
|
||||
<?php namespace Flarum\Core\Discussions;
|
||||
|
||||
use Flarum\Core\Search\GambitManager;
|
||||
use Flarum\Core\Users\User;
|
||||
use Flarum\Support\ServiceProvider;
|
||||
use Flarum\Extend;
|
||||
use Illuminate\Contracts\Container\Container;
|
||||
|
||||
class DiscussionsServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap the application events.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$this->extend([
|
||||
new Extend\EventSubscriber('Flarum\Core\Discussions\Listeners\DiscussionMetadataUpdater')
|
||||
]);
|
||||
|
||||
Discussion::allow('*', function (Discussion $discussion, User $user, $action) {
|
||||
return $user->hasPermission('discussion.'.$action) ?: null;
|
||||
});
|
||||
|
||||
// Allow a user to rename their own discussion.
|
||||
Discussion::allow('rename', function (Discussion $discussion, User $user) {
|
||||
return $discussion->start_user_id == $user->id ?: null;
|
||||
// TODO: add limitations to time etc. according to a config setting
|
||||
});
|
||||
|
||||
Discussion::allow('delete', function (Discussion $discussion, User $user) {
|
||||
return $discussion->start_user_id == $user->id && $discussion->participants_count == 1 ?: null;
|
||||
// TODO: add limitations to time etc. according to a config setting
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->app->bind(
|
||||
'Flarum\Core\Discussions\DiscussionRepositoryInterface',
|
||||
'Flarum\Core\Discussions\EloquentDiscussionRepository'
|
||||
);
|
||||
|
||||
$this->app->bind(
|
||||
'Flarum\Core\Discussions\Search\Fulltext\DriverInterface',
|
||||
'Flarum\Core\Discussions\Search\Fulltext\MySqlFulltextDriver'
|
||||
);
|
||||
|
||||
$this->app->instance('flarum.discussionGambits', [
|
||||
'Flarum\Core\Discussions\Search\Gambits\AuthorGambit',
|
||||
'Flarum\Core\Discussions\Search\Gambits\UnreadGambit'
|
||||
]);
|
||||
|
||||
$this->app->when('Flarum\Core\Discussions\Search\DiscussionSearcher')
|
||||
->needs('Flarum\Core\Search\GambitManager')
|
||||
->give(function (Container $app) {
|
||||
$gambits = new GambitManager($app);
|
||||
|
||||
foreach ($app->make('flarum.discussionGambits') as $gambit) {
|
||||
$gambits->add($gambit);
|
||||
}
|
||||
|
||||
$gambits->setFulltextGambit('Flarum\Core\Discussions\Search\Gambits\FulltextGambit');
|
||||
|
||||
return $gambits;
|
||||
});
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user