1
0
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:
Toby Zerner
2015-07-04 12:24:48 +09:30
parent 12dd550a14
commit a74b40fe47
324 changed files with 6443 additions and 4197 deletions

View 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;
});
}
}