1
0
mirror of https://github.com/flarum/core.git synced 2025-07-19 07:41:22 +02:00

Merge pull request #1308 from flarum/next-back

Next back > master
This commit is contained in:
Toby Zerner
2017-12-28 12:13:40 +10:30
committed by GitHub
351 changed files with 2815 additions and 2487 deletions

View File

@@ -1,9 +1,9 @@
language: php
php:
- 5.6
- 7.0
- 7.1
- 7.2
- hhvm
matrix:

View File

@@ -20,24 +20,24 @@
"docs": "http://flarum.org/docs"
},
"require": {
"php": ">=5.6.0",
"php": ">=7.0",
"dflydev/fig-cookies": "^1.0.2",
"doctrine/dbal": "^2.5",
"components/font-awesome": "^4.6",
"franzl/whoops-middleware": "^0.4.0",
"illuminate/bus": "5.1.*",
"illuminate/cache": "5.1.*",
"illuminate/config": "5.1.*",
"illuminate/container": "5.1.*",
"illuminate/contracts": "5.1.*",
"illuminate/database": "^5.1.31",
"illuminate/events": "5.1.*",
"illuminate/filesystem": "5.1.*",
"illuminate/hashing": "5.1.*",
"illuminate/mail": "5.1.*",
"illuminate/support": "5.1.*",
"illuminate/validation": "5.1.*",
"illuminate/view": "5.1.*",
"illuminate/bus": "5.5.*",
"illuminate/cache": "5.5.*",
"illuminate/config": "5.5.*",
"illuminate/container": "5.5.*",
"illuminate/contracts": "5.5.*",
"illuminate/database": "5.5.*",
"illuminate/events": "5.5.*",
"illuminate/filesystem": "5.5.*",
"illuminate/hashing": "5.5.*",
"illuminate/mail": "5.5.*",
"illuminate/support": "5.5.*",
"illuminate/validation": "5.5.*",
"illuminate/view": "5.5.*",
"intervention/image": "^2.3.0",
"league/flysystem": "^1.0.11",
"league/oauth2-client": "~1.0",
@@ -46,11 +46,11 @@
"nikic/fast-route": "^0.6",
"oyejorge/less.php": "~1.5",
"psr/http-message": "^1.0",
"symfony/config": "^2.7",
"symfony/console": "^2.7",
"symfony/http-foundation": "^2.7",
"symfony/translation": "^2.7",
"symfony/yaml": "^2.7",
"symfony/config": "^3.3",
"symfony/console": "^3.3",
"symfony/http-foundation": "^3.3",
"symfony/translation": "^3.3",
"symfony/yaml": "^3.3",
"s9e/text-formatter": "^0.8.1",
"tobscure/json-api": "^0.3.0",
"zendframework/zend-diactoros": "^1.6",
@@ -58,7 +58,7 @@
},
"require-dev": {
"mockery/mockery": "^0.9.4",
"phpunit/phpunit": "^4.8"
"phpunit/phpunit": "^6.0"
},
"autoload": {
"psr-4": {

View File

@@ -20,7 +20,7 @@ return [
});
// Store slugs for existing discussions
$schema->getConnection()->table('discussions')->chunk(100, function ($discussions) use ($schema) {
$schema->getConnection()->table('discussions')->chunkById(100, function ($discussions) use ($schema) {
foreach ($discussions as $discussion) {
$schema->getConnection()->table('discussions')->where('id', $discussion->id)->update([
'slug' => Str::slug($discussion->title)

View File

@@ -11,13 +11,23 @@
namespace Flarum\Admin;
use Flarum\Core\Listener\CheckCustomLessFormat;
use Flarum\Event\ExtensionWasDisabled;
use Flarum\Event\ExtensionWasEnabled;
use Flarum\Event\SettingWasSet;
use Flarum\Admin\Middleware\RequireAdministrateAbility;
use Flarum\Event\ConfigureMiddleware;
use Flarum\Extension\Event\Disabled;
use Flarum\Extension\Event\Enabled;
use Flarum\Foundation\AbstractServiceProvider;
use Flarum\Http\Handler\RouteHandlerFactory;
use Flarum\Http\Middleware\AuthenticateWithSession;
use Flarum\Http\Middleware\DispatchRoute;
use Flarum\Http\Middleware\HandleErrors;
use Flarum\Http\Middleware\ParseJsonBody;
use Flarum\Http\Middleware\RememberFromCookie;
use Flarum\Http\Middleware\SetLocale;
use Flarum\Http\Middleware\StartSession;
use Flarum\Http\RouteCollection;
use Flarum\Http\RouteHandlerFactory;
use Flarum\Http\UrlGenerator;
use Flarum\Settings\Event\Saved;
use Zend\Stratigility\MiddlewarePipe;
class AdminServiceProvider extends AbstractServiceProvider
{
@@ -26,13 +36,35 @@ class AdminServiceProvider extends AbstractServiceProvider
*/
public function register()
{
$this->app->singleton(UrlGenerator::class, function () {
return new UrlGenerator($this->app, $this->app->make('flarum.admin.routes'));
$this->app->extend(UrlGenerator::class, function (UrlGenerator $url) {
return $url->addCollection('admin', $this->app->make('flarum.admin.routes'), 'admin');
});
$this->app->singleton('flarum.admin.routes', function () {
return new RouteCollection;
});
$this->app->singleton('flarum.admin.middleware', function ($app) {
$pipe = new MiddlewarePipe;
$pipe->raiseThrowables();
// All requests should first be piped through our global error handler
$debugMode = ! $app->isUpToDate() || $app->inDebugMode();
$pipe->pipe($app->make(HandleErrors::class, ['debug' => $debugMode]));
$pipe->pipe($app->make(ParseJsonBody::class));
$pipe->pipe($app->make(StartSession::class));
$pipe->pipe($app->make(RememberFromCookie::class));
$pipe->pipe($app->make(AuthenticateWithSession::class));
$pipe->pipe($app->make(SetLocale::class));
$pipe->pipe($app->make(RequireAdministrateAbility::class));
event(new ConfigureMiddleware($pipe, 'admin'));
$pipe->pipe($app->make(DispatchRoute::class, ['routes' => $app->make('flarum.admin.routes')]));
return $pipe;
});
}
/**
@@ -58,18 +90,15 @@ class AdminServiceProvider extends AbstractServiceProvider
*/
protected function populateRoutes(RouteCollection $routes)
{
$route = $this->app->make(RouteHandlerFactory::class);
$factory = $this->app->make(RouteHandlerFactory::class);
$routes->get(
'/',
'index',
$route->toController(Controller\WebAppController::class)
);
$callback = include __DIR__.'/routes.php';
$callback($routes, $factory);
}
protected function flushWebAppAssetsWhenThemeChanged()
{
$this->app->make('events')->listen(SettingWasSet::class, function (SettingWasSet $event) {
$this->app->make('events')->listen(Saved::class, function (Saved $event) {
if (preg_match('/^theme_|^custom_less$/i', $event->key)) {
$this->getWebAppAssets()->flushCss();
}
@@ -80,8 +109,8 @@ class AdminServiceProvider extends AbstractServiceProvider
{
$events = $this->app->make('events');
$events->listen(ExtensionWasEnabled::class, [$this, 'flushWebAppAssets']);
$events->listen(ExtensionWasDisabled::class, [$this, 'flushWebAppAssets']);
$events->listen(Enabled::class, [$this, 'flushWebAppAssets']);
$events->listen(Disabled::class, [$this, 'flushWebAppAssets']);
}
public function flushWebAppAssets()
@@ -90,11 +119,11 @@ class AdminServiceProvider extends AbstractServiceProvider
}
/**
* @return \Flarum\Http\WebApp\WebAppAssets
* @return \Flarum\Frontend\FrontendAssets
*/
protected function getWebAppAssets()
{
return $this->app->make(WebApp::class)->getAssets();
return $this->app->make(Frontend::class)->getAssets();
}
protected function checkCustomLessFormat()

View File

@@ -9,10 +9,10 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Listener;
namespace Flarum\Admin;
use Flarum\Core\Exception\ValidationException;
use Flarum\Event\PrepareSerializedSetting;
use Flarum\Foundation\ValidationException;
use Flarum\Settings\Event\Serializing;
use Illuminate\Contracts\Events\Dispatcher;
use Less_Exception_Parser;
use Less_Parser;
@@ -21,10 +21,10 @@ class CheckCustomLessFormat
{
public function subscribe(Dispatcher $events)
{
$events->listen(PrepareSerializedSetting::class, [$this, 'check']);
$events->listen(Serializing::class, [$this, 'check']);
}
public function check(PrepareSerializedSetting $event)
public function check(Serializing $event)
{
if ($event->key === 'custom_less') {
$parser = new Less_Parser();

View File

@@ -11,17 +11,17 @@
namespace Flarum\Admin\Controller;
use Flarum\Admin\WebApp;
use Flarum\Core\Permission;
use Flarum\Event\PrepareUnserializedSettings;
use Flarum\Admin\Frontend;
use Flarum\Extension\ExtensionManager;
use Flarum\Http\Controller\AbstractWebAppController;
use Flarum\Frontend\AbstractFrontendController;
use Flarum\Group\Permission;
use Flarum\Settings\Event\Deserializing;
use Flarum\Settings\SettingsRepositoryInterface;
use Illuminate\Contracts\Events\Dispatcher;
use Illuminate\Database\ConnectionInterface;
use Psr\Http\Message\ServerRequestInterface;
class WebAppController extends AbstractWebAppController
class FrontendController extends AbstractFrontendController
{
/**
* @var SettingsRepositoryInterface
@@ -34,13 +34,18 @@ class WebAppController extends AbstractWebAppController
protected $extensions;
/**
* @param WebApp $webApp
* @var ConnectionInterface
*/
protected $db;
/**
* @param Frontend $webApp
* @param Dispatcher $events
* @param SettingsRepositoryInterface $settings
* @param ExtensionManager $extensions
* @param ConnectionInterface $db
*/
public function __construct(WebApp $webApp, Dispatcher $events, SettingsRepositoryInterface $settings, ExtensionManager $extensions, ConnectionInterface $db)
public function __construct(Frontend $webApp, Dispatcher $events, SettingsRepositoryInterface $settings, ExtensionManager $extensions, ConnectionInterface $db)
{
$this->webApp = $webApp;
$this->events = $events;
@@ -59,7 +64,7 @@ class WebAppController extends AbstractWebAppController
$settings = $this->settings->all();
$this->events->fire(
new PrepareUnserializedSettings($settings)
new Deserializing($settings)
);
$view->setVariable('settings', $settings);

View File

@@ -11,9 +11,9 @@
namespace Flarum\Admin;
use Flarum\Http\WebApp\AbstractWebApp;
use Flarum\Frontend\AbstractFrontend;
class WebApp extends AbstractWebApp
class Frontend extends AbstractFrontend
{
/**
* {@inheritdoc}

View File

@@ -11,7 +11,7 @@
namespace Flarum\Admin\Middleware;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\User\AssertPermissionTrait;
use Psr\Http\Message\ResponseInterface as Response;
use Psr\Http\Message\ServerRequestInterface as Request;
use Zend\Stratigility\MiddlewareInterface;

View File

@@ -1,54 +0,0 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Admin;
use Flarum\Event\ConfigureMiddleware;
use Flarum\Foundation\Application;
use Flarum\Http\AbstractServer;
use Zend\Stratigility\MiddlewarePipe;
class Server extends AbstractServer
{
/**
* {@inheritdoc}
*/
protected function getMiddleware(Application $app)
{
$pipe = new MiddlewarePipe;
$pipe->raiseThrowables();
if ($app->isInstalled()) {
$path = parse_url($app->url('admin'), PHP_URL_PATH);
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\HandleErrors', ['debug' => $app->inDebugMode() || ! $app->isUpToDate()]));
if ($app->isUpToDate()) {
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\ParseJsonBody'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\StartSession'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\RememberFromCookie'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\AuthenticateWithSession'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\SetLocale'));
$pipe->pipe($path, $app->make('Flarum\Admin\Middleware\RequireAdministrateAbility'));
event(new ConfigureMiddleware($pipe, $path, $this));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\DispatchRoute', ['routes' => $app->make('flarum.admin.routes')]));
} else {
$app->register('Flarum\Update\UpdateServiceProvider');
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\DispatchRoute', ['routes' => $app->make('flarum.update.routes')]));
}
}
return $pipe;
}
}

View File

@@ -0,0 +1,22 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Flarum\Admin\Controller;
use Flarum\Http\RouteCollection;
use Flarum\Http\RouteHandlerFactory;
return function (RouteCollection $map, RouteHandlerFactory $route) {
$map->get(
'/',
'index',
$route->toController(Controller\FrontendController::class)
);
};

View File

@@ -37,10 +37,8 @@ class ApiKey extends AbstractModel
*/
public static function generate()
{
$key = new static;
$key->id = str_random(40);
return $key;
return new static([
'id' => str_random(40)
]);
}
}

View File

@@ -12,16 +12,29 @@
namespace Flarum\Api;
use Flarum\Api\Controller\AbstractSerializeController;
use Flarum\Api\Middleware\FakeHttpMethods;
use Flarum\Api\Middleware\HandleErrors;
use Flarum\Api\Serializer\AbstractSerializer;
use Flarum\Api\Serializer\BasicDiscussionSerializer;
use Flarum\Api\Serializer\NotificationSerializer;
use Flarum\Event\ConfigureApiRoutes;
use Flarum\Event\ConfigureMiddleware;
use Flarum\Event\ConfigureNotificationTypes;
use Flarum\Foundation\AbstractServiceProvider;
use Flarum\Http\Handler\RouteHandlerFactory;
use Flarum\Http\Middleware\AuthenticateWithHeader;
use Flarum\Http\Middleware\AuthenticateWithSession;
use Flarum\Http\Middleware\DispatchRoute;
use Flarum\Http\Middleware\ParseJsonBody;
use Flarum\Http\Middleware\RememberFromCookie;
use Flarum\Http\Middleware\SetLocale;
use Flarum\Http\Middleware\StartSession;
use Flarum\Http\RouteCollection;
use Flarum\Http\RouteHandlerFactory;
use Flarum\Http\UrlGenerator;
use Tobscure\JsonApi\ErrorHandler;
use Tobscure\JsonApi\Exception\Handler\FallbackExceptionHandler;
use Tobscure\JsonApi\Exception\Handler\InvalidParameterExceptionHandler;
use Zend\Stratigility\MiddlewarePipe;
class ApiServiceProvider extends AbstractServiceProvider
{
@@ -30,27 +43,48 @@ class ApiServiceProvider extends AbstractServiceProvider
*/
public function register()
{
$this->app->singleton(UrlGenerator::class, function () {
return new UrlGenerator($this->app, $this->app->make('flarum.api.routes'));
$this->app->extend(UrlGenerator::class, function (UrlGenerator $url) {
return $url->addCollection('api', $this->app->make('flarum.api.routes'), 'api');
});
$this->app->singleton('flarum.api.routes', function () {
return new RouteCollection;
});
$this->app->singleton('flarum.api.middleware', function ($app) {
$pipe = new MiddlewarePipe;
$pipe->raiseThrowables();
$pipe->pipe($app->make(HandleErrors::class));
$pipe->pipe($app->make(ParseJsonBody::class));
$pipe->pipe($app->make(FakeHttpMethods::class));
$pipe->pipe($app->make(StartSession::class));
$pipe->pipe($app->make(RememberFromCookie::class));
$pipe->pipe($app->make(AuthenticateWithSession::class));
$pipe->pipe($app->make(AuthenticateWithHeader::class));
$pipe->pipe($app->make(SetLocale::class));
event(new ConfigureMiddleware($pipe, 'api'));
$pipe->pipe($app->make(DispatchRoute::class, ['routes' => $app->make('flarum.api.routes')]));
return $pipe;
});
$this->app->singleton(ErrorHandler::class, function () {
$handler = new ErrorHandler;
$handler->registerHandler(new Handler\FloodingExceptionHandler);
$handler->registerHandler(new Handler\IlluminateValidationExceptionHandler);
$handler->registerHandler(new Handler\InvalidAccessTokenExceptionHandler);
$handler->registerHandler(new Handler\InvalidConfirmationTokenExceptionHandler);
$handler->registerHandler(new Handler\MethodNotAllowedExceptionHandler);
$handler->registerHandler(new Handler\ModelNotFoundExceptionHandler);
$handler->registerHandler(new Handler\PermissionDeniedExceptionHandler);
$handler->registerHandler(new Handler\RouteNotFoundExceptionHandler);
$handler->registerHandler(new Handler\TokenMismatchExceptionHandler);
$handler->registerHandler(new Handler\ValidationExceptionHandler);
$handler->registerHandler(new ExceptionHandler\FloodingExceptionHandler);
$handler->registerHandler(new ExceptionHandler\IlluminateValidationExceptionHandler);
$handler->registerHandler(new ExceptionHandler\InvalidAccessTokenExceptionHandler);
$handler->registerHandler(new ExceptionHandler\InvalidConfirmationTokenExceptionHandler);
$handler->registerHandler(new ExceptionHandler\MethodNotAllowedExceptionHandler);
$handler->registerHandler(new ExceptionHandler\ModelNotFoundExceptionHandler);
$handler->registerHandler(new ExceptionHandler\PermissionDeniedExceptionHandler);
$handler->registerHandler(new ExceptionHandler\RouteNotFoundExceptionHandler);
$handler->registerHandler(new ExceptionHandler\TokenMismatchExceptionHandler);
$handler->registerHandler(new ExceptionHandler\ValidationExceptionHandler);
$handler->registerHandler(new InvalidParameterExceptionHandler);
$handler->registerHandler(new FallbackExceptionHandler($this->app->inDebugMode()));
@@ -81,7 +115,7 @@ class ApiServiceProvider extends AbstractServiceProvider
{
$blueprints = [];
$serializers = [
'discussionRenamed' => 'Flarum\Api\Serializer\DiscussionBasicSerializer'
'discussionRenamed' => BasicDiscussionSerializer::class
];
$this->app->make('events')->fire(
@@ -100,298 +134,13 @@ class ApiServiceProvider extends AbstractServiceProvider
*/
protected function populateRoutes(RouteCollection $routes)
{
$route = $this->app->make(RouteHandlerFactory::class);
$factory = $this->app->make(RouteHandlerFactory::class);
// Get forum information
$routes->get(
'/forum',
'forum.show',
$route->toController(Controller\ShowForumController::class)
);
// Retrieve authentication token
$routes->post(
'/token',
'token',
$route->toController(Controller\TokenController::class)
);
// Send forgot password email
$routes->post(
'/forgot',
'forgot',
$route->toController(Controller\ForgotPasswordController::class)
);
/*
|--------------------------------------------------------------------------
| Users
|--------------------------------------------------------------------------
*/
// List users
$routes->get(
'/users',
'users.index',
$route->toController(Controller\ListUsersController::class)
);
// Register a user
$routes->post(
'/users',
'users.create',
$route->toController(Controller\CreateUserController::class)
);
// Get a single user
$routes->get(
'/users/{id}',
'users.show',
$route->toController(Controller\ShowUserController::class)
);
// Edit a user
$routes->patch(
'/users/{id}',
'users.update',
$route->toController(Controller\UpdateUserController::class)
);
// Delete a user
$routes->delete(
'/users/{id}',
'users.delete',
$route->toController(Controller\DeleteUserController::class)
);
// Upload avatar
$routes->post(
'/users/{id}/avatar',
'users.avatar.upload',
$route->toController(Controller\UploadAvatarController::class)
);
// Remove avatar
$routes->delete(
'/users/{id}/avatar',
'users.avatar.delete',
$route->toController(Controller\DeleteAvatarController::class)
);
// send confirmation email
$routes->post(
'/users/{id}/send-confirmation',
'users.confirmation.send',
$route->toController(Controller\SendConfirmationEmailController::class)
);
/*
|--------------------------------------------------------------------------
| Notifications
|--------------------------------------------------------------------------
*/
// List notifications for the current user
$routes->get(
'/notifications',
'notifications.index',
$route->toController(Controller\ListNotificationsController::class)
);
// Mark all notifications as read
$routes->post(
'/notifications/read',
'notifications.readAll',
$route->toController(Controller\ReadAllNotificationsController::class)
);
// Mark a single notification as read
$routes->patch(
'/notifications/{id}',
'notifications.update',
$route->toController(Controller\UpdateNotificationController::class)
);
/*
|--------------------------------------------------------------------------
| Discussions
|--------------------------------------------------------------------------
*/
// List discussions
$routes->get(
'/discussions',
'discussions.index',
$route->toController(Controller\ListDiscussionsController::class)
);
// Create a discussion
$routes->post(
'/discussions',
'discussions.create',
$route->toController(Controller\CreateDiscussionController::class)
);
// Show a single discussion
$routes->get(
'/discussions/{id}',
'discussions.show',
$route->toController(Controller\ShowDiscussionController::class)
);
// Edit a discussion
$routes->patch(
'/discussions/{id}',
'discussions.update',
$route->toController(Controller\UpdateDiscussionController::class)
);
// Delete a discussion
$routes->delete(
'/discussions/{id}',
'discussions.delete',
$route->toController(Controller\DeleteDiscussionController::class)
);
/*
|--------------------------------------------------------------------------
| Posts
|--------------------------------------------------------------------------
*/
// List posts, usually for a discussion
$routes->get(
'/posts',
'posts.index',
$route->toController(Controller\ListPostsController::class)
);
// Create a post
$routes->post(
'/posts',
'posts.create',
$route->toController(Controller\CreatePostController::class)
);
// Show a single or multiple posts by ID
$routes->get(
'/posts/{id}',
'posts.show',
$route->toController(Controller\ShowPostController::class)
);
// Edit a post
$routes->patch(
'/posts/{id}',
'posts.update',
$route->toController(Controller\UpdatePostController::class)
);
// Delete a post
$routes->delete(
'/posts/{id}',
'posts.delete',
$route->toController(Controller\DeletePostController::class)
);
/*
|--------------------------------------------------------------------------
| Groups
|--------------------------------------------------------------------------
*/
// List groups
$routes->get(
'/groups',
'groups.index',
$route->toController(Controller\ListGroupsController::class)
);
// Create a group
$routes->post(
'/groups',
'groups.create',
$route->toController(Controller\CreateGroupController::class)
);
// Edit a group
$routes->patch(
'/groups/{id}',
'groups.update',
$route->toController(Controller\UpdateGroupController::class)
);
// Delete a group
$routes->delete(
'/groups/{id}',
'groups.delete',
$route->toController(Controller\DeleteGroupController::class)
);
/*
|--------------------------------------------------------------------------
| Administration
|--------------------------------------------------------------------------
*/
// Toggle an extension
$routes->patch(
'/extensions/{name}',
'extensions.update',
$route->toController(Controller\UpdateExtensionController::class)
);
// Uninstall an extension
$routes->delete(
'/extensions/{name}',
'extensions.delete',
$route->toController(Controller\UninstallExtensionController::class)
);
// Update settings
$routes->post(
'/settings',
'settings',
$route->toController(Controller\SetSettingsController::class)
);
// Update a permission
$routes->post(
'/permission',
'permission',
$route->toController(Controller\SetPermissionController::class)
);
// Upload a logo
$routes->post(
'/logo',
'logo',
$route->toController(Controller\UploadLogoController::class)
);
// Remove the logo
$routes->delete(
'/logo',
'logo.delete',
$route->toController(Controller\DeleteLogoController::class)
);
// Upload a favicon
$routes->post(
'/favicon',
'favicon',
$route->toController(Controller\UploadFaviconController::class)
);
// Remove the favicon
$routes->delete(
'/favicon',
'favicon.delete',
$route->toController(Controller\DeleteFaviconController::class)
);
$callback = include __DIR__.'/routes.php';
$callback($routes, $factory);
$this->app->make('events')->fire(
new ConfigureApiRoutes($routes, $route)
new ConfigureApiRoutes($routes, $factory)
);
}
}

View File

@@ -12,9 +12,9 @@
namespace Flarum\Api;
use Exception;
use Flarum\Core\User;
use Flarum\Foundation\Application;
use Flarum\Http\Controller\ControllerInterface;
use Flarum\User\User;
use InvalidArgumentException;
use Zend\Diactoros\ServerRequestFactory;

View File

@@ -13,7 +13,7 @@ namespace Flarum\Api\Controller;
use Psr\Http\Message\ServerRequestInterface;
abstract class AbstractCreateController extends AbstractResourceController
abstract class AbstractCreateController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -14,7 +14,7 @@ namespace Flarum\Api\Controller;
use Tobscure\JsonApi\Collection;
use Tobscure\JsonApi\SerializerInterface;
abstract class AbstractCollectionController extends AbstractSerializeController
abstract class AbstractListController extends AbstractSerializeController
{
/**
* {@inheritdoc}

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Api\Event\WillGetData;
use Flarum\Api\Event\WillSerializeData;
use Flarum\Api\JsonApiResponse;
use Flarum\Event\ConfigureApiController;
use Flarum\Event\PrepareApiData;
use Flarum\Http\Controller\ControllerInterface;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Events\Dispatcher;
@@ -91,13 +91,13 @@ abstract class AbstractSerializeController implements ControllerInterface
$document = new Document;
static::$events->fire(
new ConfigureApiController($this)
new WillGetData($this)
);
$data = $this->data($request, $document);
static::$events->fire(
new PrepareApiData($this, $data, $request, $document)
new WillSerializeData($this, $data, $request, $document)
);
$serializer = static::$container->make($this->serializer);

View File

@@ -14,7 +14,7 @@ namespace Flarum\Api\Controller;
use Tobscure\JsonApi\Resource;
use Tobscure\JsonApi\SerializerInterface;
abstract class AbstractResourceController extends AbstractSerializeController
abstract class AbstractShowController extends AbstractSerializeController
{
/**
* {@inheritdoc}

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\ReadDiscussion;
use Flarum\Core\Command\StartDiscussion;
use Flarum\Core\Post\Floodgate;
use Flarum\Discussion\Command\ReadDiscussion;
use Flarum\Discussion\Command\StartDiscussion;
use Flarum\Post\Floodgate;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\CreateGroup;
use Flarum\Group\Command\CreateGroup;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\PostReply;
use Flarum\Core\Command\ReadDiscussion;
use Flarum\Core\Post\Floodgate;
use Flarum\Discussion\Command\ReadDiscussion;
use Flarum\Post\Command\PostReply;
use Flarum\Post\Floodgate;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
@@ -41,13 +41,13 @@ class CreatePostController extends AbstractCreateController
protected $bus;
/**
* @var Floodgate
* @var \Flarum\Post\Floodgate
*/
protected $floodgate;
/**
* @param Dispatcher $bus
* @param Floodgate $floodgate
* @param \Flarum\Post\Floodgate $floodgate
*/
public function __construct(Dispatcher $bus, Floodgate $floodgate)
{
@@ -83,7 +83,7 @@ class CreatePostController extends AbstractCreateController
}
$discussion = $post->discussion;
$discussion->posts = $discussion->postsVisibleTo($actor)->orderBy('time')->lists('id');
$discussion->posts = $discussion->postsVisibleTo($actor)->orderBy('time')->pluck('id');
return $post;
}

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\RegisterUser;
use Flarum\User\Command\RegisterUser;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;

View File

@@ -11,12 +11,12 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\DeleteAvatar;
use Flarum\User\Command\DeleteAvatar;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class DeleteAvatarController extends AbstractResourceController
class DeleteAvatarController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\DeleteDiscussion;
use Flarum\Discussion\Command\DeleteDiscussion;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Foundation\Application;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\AssertPermissionTrait;
use League\Flysystem\Adapter\Local;
use League\Flysystem\Filesystem;
use Psr\Http\Message\ServerRequestInterface;

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\DeleteGroup;
use Flarum\Group\Command\DeleteGroup;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Foundation\Application;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\AssertPermissionTrait;
use League\Flysystem\Adapter\Local;
use League\Flysystem\Filesystem;
use Psr\Http\Message\ServerRequestInterface;

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\DeletePost;
use Flarum\Post\Command\DeletePost;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\DeleteUser;
use Flarum\User\Command\DeleteUser;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\RequestPasswordReset;
use Flarum\Core\Repository\UserRepository;
use Flarum\Http\Controller\ControllerInterface;
use Flarum\User\Command\RequestPasswordReset;
use Flarum\User\UserRepository;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\EmptyResponse;
@@ -21,7 +21,7 @@ use Zend\Diactoros\Response\EmptyResponse;
class ForgotPasswordController implements ControllerInterface
{
/**
* @var \Flarum\Core\Repository\UserRepository
* @var \Flarum\User\UserRepository
*/
protected $users;
@@ -31,7 +31,7 @@ class ForgotPasswordController implements ControllerInterface
protected $bus;
/**
* @param \Flarum\Core\Repository\UserRepository $users
* @param \Flarum\User\UserRepository $users
* @param Dispatcher $bus
*/
public function __construct(UserRepository $users, Dispatcher $bus)

View File

@@ -11,13 +11,13 @@
namespace Flarum\Api\Controller;
use Flarum\Api\UrlGenerator;
use Flarum\Core\Search\Discussion\DiscussionSearcher;
use Flarum\Core\Search\SearchCriteria;
use Flarum\Discussion\Search\DiscussionSearcher;
use Flarum\Http\UrlGenerator;
use Flarum\Search\SearchCriteria;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ListDiscussionsController extends AbstractCollectionController
class ListDiscussionsController extends AbstractListController
{
/**
* {@inheritdoc}
@@ -86,7 +86,7 @@ class ListDiscussionsController extends AbstractCollectionController
$results = $this->searcher->search($criteria, $limit, $offset, $load);
$document->addPaginationLinks(
$this->url->toRoute('discussions.index'),
$this->url->to('api')->route('discussions.index'),
$request->getQueryParams(),
$offset,
$limit,

View File

@@ -11,11 +11,11 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Group;
use Flarum\Group\Group;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ListGroupsController extends AbstractCollectionController
class ListGroupsController extends AbstractListController
{
/**
* {@inheritdoc}

View File

@@ -11,14 +11,14 @@
namespace Flarum\Api\Controller;
use Flarum\Api\UrlGenerator;
use Flarum\Core\Discussion;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Repository\NotificationRepository;
use Flarum\Discussion\Discussion;
use Flarum\Http\UrlGenerator;
use Flarum\Notification\NotificationRepository;
use Flarum\User\Exception\PermissionDeniedException;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ListNotificationsController extends AbstractCollectionController
class ListNotificationsController extends AbstractListController
{
/**
* {@inheritdoc}
@@ -92,7 +92,7 @@ class ListNotificationsController extends AbstractCollectionController
}
$document->addPaginationLinks(
$this->url->toRoute('notifications.index'),
$this->url->to('api')->route('notifications.index'),
$request->getQueryParams(),
$offset,
$limit,
@@ -111,7 +111,7 @@ class ListNotificationsController extends AbstractCollectionController
}
/**
* @param \Flarum\Core\Notification[] $notifications
* @param \Flarum\Notification\Notification[] $notifications
*/
private function loadSubjectDiscussions(array $notifications)
{

View File

@@ -11,14 +11,14 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Repository\PostRepository;
use Flarum\Event\ConfigurePostsQuery;
use Flarum\Post\PostRepository;
use Illuminate\Database\Eloquent\Builder;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
use Tobscure\JsonApi\Exception\InvalidParameterException;
class ListPostsController extends AbstractCollectionController
class ListPostsController extends AbstractListController
{
/**
* {@inheritdoc}
@@ -42,12 +42,12 @@ class ListPostsController extends AbstractCollectionController
public $sortFields = ['time'];
/**
* @var \Flarum\Core\Repository\PostRepository
* @var \Flarum\Post\PostRepository
*/
protected $posts;
/**
* @param \Flarum\Core\Repository\PostRepository $posts
* @param \Flarum\Post\PostRepository $posts
*/
public function __construct(PostRepository $posts)
{
@@ -122,7 +122,7 @@ class ListPostsController extends AbstractCollectionController
$query->orderBy($field, $order);
}
return $query->lists('id')->all();
return $query->pluck('id')->all();
}
/**

View File

@@ -11,14 +11,14 @@
namespace Flarum\Api\Controller;
use Flarum\Api\UrlGenerator;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Search\SearchCriteria;
use Flarum\Core\Search\User\UserSearcher;
use Flarum\Http\UrlGenerator;
use Flarum\Search\SearchCriteria;
use Flarum\User\Exception\PermissionDeniedException;
use Flarum\User\Search\UserSearcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ListUsersController extends AbstractCollectionController
class ListUsersController extends AbstractListController
{
/**
* {@inheritdoc}
@@ -84,7 +84,7 @@ class ListUsersController extends AbstractCollectionController
$results = $this->searcher->search($criteria, $limit, $offset, $load);
$document->addPaginationLinks(
$this->url->toRoute('users.index'),
$this->url->to('api')->route('users.index'),
$request->getQueryParams(),
$offset,
$limit,

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\ReadAllNotifications;
use Flarum\Notification\Command\ReadAllNotifications;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;

View File

@@ -11,12 +11,12 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\EmailToken;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Forum\UrlGenerator;
use Flarum\Http\Controller\ControllerInterface;
use Flarum\Http\UrlGenerator;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\AssertPermissionTrait;
use Flarum\User\EmailToken;
use Flarum\User\Exception\PermissionDeniedException;
use Illuminate\Contracts\Mail\Mailer;
use Illuminate\Mail\Message;
use Psr\Http\Message\ServerRequestInterface;
@@ -80,7 +80,7 @@ class SendConfirmationEmailController implements ControllerInterface
$data = [
'{username}' => $actor->username,
'{url}' => $this->url->toRoute('confirmEmail', ['token' => $token->id]),
'{url}' => $this->url->to('forum')->route('confirmEmail', ['token' => $token->id]),
'{forum}' => $this->settings->get('forum_title')
];

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Permission;
use Flarum\Group\Permission;
use Flarum\Http\Controller\ControllerInterface;
use Flarum\User\AssertPermissionTrait;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\EmptyResponse;

View File

@@ -11,11 +11,11 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Event\PrepareSerializedSetting;
use Flarum\Event\SettingWasSet;
use Flarum\Http\Controller\ControllerInterface;
use Flarum\Settings\Event\Saved;
use Flarum\Settings\Event\Serializing;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\AssertPermissionTrait;
use Illuminate\Contracts\Events\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Zend\Diactoros\Response\EmptyResponse;
@@ -53,11 +53,11 @@ class SetSettingsController implements ControllerInterface
$settings = $request->getParsedBody();
foreach ($settings as $k => $v) {
$this->dispatcher->fire(new PrepareSerializedSetting($k, $v));
$this->dispatcher->fire(new Serializing($k, $v));
$this->settings->set($k, $v);
$this->dispatcher->fire(new SettingWasSet($k, $v));
$this->dispatcher->fire(new Saved($k, $v));
}
return new EmptyResponse(204);

View File

@@ -11,17 +11,17 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Discussion;
use Flarum\Core\Repository\DiscussionRepository;
use Flarum\Core\Repository\PostRepository;
use Flarum\Core\User;
use Flarum\Discussion\Discussion;
use Flarum\Discussion\DiscussionRepository;
use Flarum\Post\PostRepository;
use Flarum\User\User;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ShowDiscussionController extends AbstractResourceController
class ShowDiscussionController extends AbstractShowController
{
/**
* @var DiscussionRepository
* @var \Flarum\Discussion\DiscussionRepository
*/
protected $discussions;
@@ -58,8 +58,8 @@ class ShowDiscussionController extends AbstractResourceController
];
/**
* @param \Flarum\Core\Repository\DiscussionRepository $discussions
* @param \Flarum\Core\Repository\PostRepository $posts
* @param \Flarum\Discussion\DiscussionRepository $discussions
* @param \Flarum\Post\PostRepository $posts
*/
public function __construct(DiscussionRepository $discussions, PostRepository $posts)
{
@@ -117,7 +117,7 @@ class ShowDiscussionController extends AbstractResourceController
*/
private function loadPostIds(Discussion $discussion, User $actor)
{
return $discussion->postsVisibleTo($actor)->orderBy('time')->lists('id')->all();
return $discussion->postsVisibleTo($actor)->orderBy('time')->pluck('id')->all();
}
/**

View File

@@ -11,11 +11,11 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Group;
use Flarum\Group\Group;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ShowForumController extends AbstractResourceController
class ShowForumController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -11,11 +11,11 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Repository\PostRepository;
use Flarum\Post\PostRepository;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ShowPostController extends AbstractResourceController
class ShowPostController extends AbstractShowController
{
/**
* {@inheritdoc}
@@ -34,12 +34,12 @@ class ShowPostController extends AbstractResourceController
];
/**
* @var \Flarum\Core\Repository\PostRepository
* @var \Flarum\Post\PostRepository
*/
protected $posts;
/**
* @param PostRepository $posts
* @param \Flarum\Post\PostRepository $posts
*/
public function __construct(PostRepository $posts)
{

View File

@@ -11,11 +11,11 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Repository\UserRepository;
use Flarum\User\UserRepository;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class ShowUserController extends AbstractResourceController
class ShowUserController extends AbstractShowController
{
/**
* {@inheritdoc}
@@ -28,12 +28,12 @@ class ShowUserController extends AbstractResourceController
public $include = ['groups'];
/**
* @var UserRepository
* @var \Flarum\User\UserRepository
*/
protected $users;
/**
* @param UserRepository $users
* @param \Flarum\User\UserRepository $users
*/
public function __construct(UserRepository $users)
{

View File

@@ -11,10 +11,10 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Repository\UserRepository;
use Flarum\Http\AccessToken;
use Flarum\Http\Controller\ControllerInterface;
use Flarum\User\Exception\PermissionDeniedException;
use Flarum\User\UserRepository;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Illuminate\Contracts\Events\Dispatcher as EventDispatcher;
use Psr\Http\Message\ServerRequestInterface;
@@ -23,7 +23,7 @@ use Zend\Diactoros\Response\JsonResponse;
class TokenController implements ControllerInterface
{
/**
* @var UserRepository
* @var \Flarum\User\UserRepository
*/
protected $users;

View File

@@ -11,8 +11,8 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Extension\ExtensionManager;
use Flarum\User\AssertPermissionTrait;
use Psr\Http\Message\ServerRequestInterface;
class UninstallExtensionController extends AbstractDeleteController

View File

@@ -11,14 +11,14 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\EditDiscussion;
use Flarum\Core\Command\ReadDiscussion;
use Flarum\Discussion\Command\EditDiscussion;
use Flarum\Discussion\Command\ReadDiscussion;
use Illuminate\Contracts\Bus\Dispatcher;
use Illuminate\Database\Eloquent\Collection;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class UpdateDiscussionController extends AbstractResourceController
class UpdateDiscussionController extends AbstractShowController
{
/**
* {@inheritdoc}
@@ -63,7 +63,7 @@ class UpdateDiscussionController extends AbstractResourceController
if ($posts = $discussion->getModifiedPosts()) {
$posts = (new Collection($posts))->load('discussion', 'user');
$discussionPosts = $discussion->postsVisibleTo($actor)->orderBy('time')->lists('id')->all();
$discussionPosts = $discussion->postsVisibleTo($actor)->orderBy('time')->pluck('id')->all();
foreach ($discussionPosts as &$id) {
foreach ($posts as $post) {

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Extension\ExtensionManager;
use Flarum\Http\Controller\ControllerInterface;
use Flarum\User\AssertPermissionTrait;
use Psr\Http\Message\ServerRequestInterface;
class UpdateExtensionController implements ControllerInterface

View File

@@ -11,12 +11,12 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\EditGroup;
use Flarum\Group\Command\EditGroup;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class UpdateGroupController extends AbstractResourceController
class UpdateGroupController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -11,12 +11,12 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\ReadNotification;
use Flarum\Notification\Command\ReadNotification;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class UpdateNotificationController extends AbstractResourceController
class UpdateNotificationController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -11,12 +11,12 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\EditPost;
use Flarum\Post\Command\EditPost;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class UpdatePostController extends AbstractResourceController
class UpdatePostController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -11,13 +11,13 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\EditUser;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\User\Command\EditUser;
use Flarum\User\Exception\PermissionDeniedException;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class UpdateUserController extends AbstractResourceController
class UpdateUserController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -11,12 +11,12 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Command\UploadAvatar;
use Flarum\User\Command\UploadAvatar;
use Illuminate\Contracts\Bus\Dispatcher;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class UploadAvatarController extends AbstractResourceController
class UploadAvatarController extends AbstractShowController
{
/**
* {@inheritdoc}

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Foundation\Application;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\AssertPermissionTrait;
use Illuminate\Support\Str;
use Intervention\Image\ImageManager;
use League\Flysystem\Adapter\Local;
@@ -80,7 +80,7 @@ class UploadFaviconController extends ShowForumController
$mount->delete($file);
}
$uploadName = 'favicon-'.Str::lower(Str::quickRandom(8)).'.'.$extension;
$uploadName = 'favicon-'.Str::lower(Str::random(8)).'.'.$extension;
$mount->move('source://'.pathinfo($tmpFile, PATHINFO_BASENAME), "target://$uploadName");

View File

@@ -11,9 +11,9 @@
namespace Flarum\Api\Controller;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Foundation\Application;
use Flarum\Settings\SettingsRepositoryInterface;
use Flarum\User\AssertPermissionTrait;
use Illuminate\Support\Str;
use Intervention\Image\ImageManager;
use League\Flysystem\Adapter\Local;
@@ -73,7 +73,7 @@ class UploadLogoController extends ShowForumController
$mount->delete($file);
}
$uploadName = 'logo-'.Str::lower(Str::quickRandom(8)).'.png';
$uploadName = 'logo-'.Str::lower(Str::random(8)).'.png';
$mount->move('source://'.pathinfo($tmpFile, PATHINFO_BASENAME), "target://$uploadName");

View File

@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Flarum\Event;
namespace Flarum\Api\Event;
use DateTime;
use Flarum\Api\Serializer\AbstractSerializer;
@@ -17,10 +17,10 @@ use Flarum\Api\Serializer\AbstractSerializer;
/**
* Prepare API attributes.
*
* This event is fired when a serialize is constructing an array of resource
* This event is fired when a serializer is constructing an array of resource
* attributes for API output.
*/
class PrepareApiAttributes
class Serializing
{
/**
* The class doing the serializing.
@@ -44,7 +44,7 @@ class PrepareApiAttributes
public $attributes;
/**
* @var \Flarum\Core\User
* @var \Flarum\User\User
*/
public $actor;

View File

@@ -9,11 +9,11 @@
* file that was distributed with this source code.
*/
namespace Flarum\Event;
namespace Flarum\Api\Event;
use Flarum\Api\Controller\AbstractSerializeController;
class ConfigureApiController
class WillGetData
{
/**
* @var AbstractSerializeController

View File

@@ -9,13 +9,13 @@
* file that was distributed with this source code.
*/
namespace Flarum\Event;
namespace Flarum\Api\Event;
use Flarum\Api\Controller\AbstractSerializeController;
use Psr\Http\Message\ServerRequestInterface;
use Tobscure\JsonApi\Document;
class PrepareApiData
class WillSerializeData
{
/**
* @var AbstractSerializeController
@@ -38,7 +38,7 @@ class PrepareApiData
public $document;
/**
* @var \Flarum\Core\User
* @var \Flarum\User\User
*/
public $actor;

View File

@@ -9,10 +9,10 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Core\Exception\FloodingException;
use Flarum\Post\Exception\FloodingException;
use Tobscure\JsonApi\Exception\Handler\ExceptionHandlerInterface;
use Tobscure\JsonApi\Exception\Handler\ResponseBag;

View File

@@ -9,10 +9,10 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Illuminate\Contracts\Validation\ValidationException;
use Illuminate\Validation\ValidationException;
use Tobscure\JsonApi\Exception\Handler\ExceptionHandlerInterface;
use Tobscure\JsonApi\Exception\Handler\ResponseBag;
@@ -32,7 +32,8 @@ class IlluminateValidationExceptionHandler implements ExceptionHandlerInterface
public function handle(Exception $e)
{
$status = 422;
$errors = $this->formatErrors($e->errors()->toArray());
$errors = $this->formatErrors($e->errors());
return new ResponseBag($status, $errors);
}

View File

@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Api\Exception\InvalidAccessTokenException;

View File

@@ -9,10 +9,10 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Core\Exception\InvalidConfirmationTokenException;
use Flarum\User\Exception\InvalidConfirmationTokenException;
use Tobscure\JsonApi\Exception\Handler\ExceptionHandlerInterface;
use Tobscure\JsonApi\Exception\Handler\ResponseBag;

View File

@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Http\Exception\MethodNotAllowedException;

View File

@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Illuminate\Database\Eloquent\ModelNotFoundException;

View File

@@ -9,10 +9,10 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\User\Exception\PermissionDeniedException;
use Tobscure\JsonApi\Exception\Handler\ExceptionHandlerInterface;
use Tobscure\JsonApi\Exception\Handler\ResponseBag;

View File

@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Http\Exception\RouteNotFoundException;

View File

@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Http\Exception\TokenMismatchException;

View File

@@ -9,10 +9,10 @@
* file that was distributed with this source code.
*/
namespace Flarum\Api\Handler;
namespace Flarum\Api\ExceptionHandler;
use Exception;
use Flarum\Core\Exception\ValidationException;
use Flarum\Foundation\ValidationException;
use Tobscure\JsonApi\Exception\Handler\ExceptionHandlerInterface;
use Tobscure\JsonApi\Exception\Handler\ResponseBag;

View File

@@ -13,9 +13,9 @@ namespace Flarum\Api\Serializer;
use Closure;
use DateTime;
use Flarum\Core\User;
use Flarum\Api\Event\Serializing;
use Flarum\Event\GetApiRelationship;
use Flarum\Event\PrepareApiAttributes;
use Flarum\User\User;
use Illuminate\Contracts\Container\Container;
use Illuminate\Contracts\Events\Dispatcher;
use InvalidArgumentException;
@@ -71,7 +71,7 @@ abstract class AbstractSerializer extends BaseAbstractSerializer
$attributes = $this->getDefaultAttributes($model);
static::$dispatcher->fire(
new PrepareApiAttributes($this, $model, $attributes)
new Serializing($this, $model, $attributes)
);
return $attributes;

View File

@@ -11,10 +11,10 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\Discussion;
use Flarum\Discussion\Discussion;
use InvalidArgumentException;
class DiscussionBasicSerializer extends AbstractSerializer
class BasicDiscussionSerializer extends AbstractSerializer
{
/**
* {@inheritdoc}
@@ -46,7 +46,7 @@ class DiscussionBasicSerializer extends AbstractSerializer
*/
protected function startUser($discussion)
{
return $this->hasOne($discussion, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($discussion, BasicUserSerializer::class);
}
/**
@@ -54,7 +54,7 @@ class DiscussionBasicSerializer extends AbstractSerializer
*/
protected function startPost($discussion)
{
return $this->hasOne($discussion, 'Flarum\Api\Serializer\PostBasicSerializer');
return $this->hasOne($discussion, BasicPostSerializer::class);
}
/**
@@ -62,7 +62,7 @@ class DiscussionBasicSerializer extends AbstractSerializer
*/
protected function lastUser($discussion)
{
return $this->hasOne($discussion, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($discussion, BasicUserSerializer::class);
}
/**
@@ -70,7 +70,7 @@ class DiscussionBasicSerializer extends AbstractSerializer
*/
protected function lastPost($discussion)
{
return $this->hasOne($discussion, 'Flarum\Api\Serializer\PostBasicSerializer');
return $this->hasOne($discussion, BasicPostSerializer::class);
}
/**
@@ -78,7 +78,7 @@ class DiscussionBasicSerializer extends AbstractSerializer
*/
protected function posts($discussion)
{
return $this->hasMany($discussion, 'Flarum\Api\Serializer\PostSerializer');
return $this->hasMany($discussion, PostSerializer::class);
}
/**
@@ -86,7 +86,7 @@ class DiscussionBasicSerializer extends AbstractSerializer
*/
protected function relevantPosts($discussion)
{
return $this->hasMany($discussion, 'Flarum\Api\Serializer\PostBasicSerializer');
return $this->hasMany($discussion, BasicPostSerializer::class);
}
/**
@@ -94,6 +94,6 @@ class DiscussionBasicSerializer extends AbstractSerializer
*/
protected function hideUser($discussion)
{
return $this->hasOne($discussion, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($discussion, BasicUserSerializer::class);
}
}

View File

@@ -11,11 +11,11 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\Post;
use Flarum\Core\Post\CommentPost;
use Flarum\Post\CommentPost;
use Flarum\Post\Post;
use InvalidArgumentException;
class PostBasicSerializer extends AbstractSerializer
class BasicPostSerializer extends AbstractSerializer
{
/**
* {@inheritdoc}
@@ -25,7 +25,7 @@ class PostBasicSerializer extends AbstractSerializer
/**
* {@inheritdoc}
*
* @param \Flarum\Core\Post $post
* @param \Flarum\Post\Post $post
* @throws InvalidArgumentException
*/
protected function getDefaultAttributes($post)
@@ -57,7 +57,7 @@ class PostBasicSerializer extends AbstractSerializer
*/
protected function user($post)
{
return $this->hasOne($post, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($post, BasicUserSerializer::class);
}
/**
@@ -65,6 +65,6 @@ class PostBasicSerializer extends AbstractSerializer
*/
protected function discussion($post)
{
return $this->hasOne($post, 'Flarum\Api\Serializer\DiscussionBasicSerializer');
return $this->hasOne($post, BasicDiscussionSerializer::class);
}
}

View File

@@ -11,10 +11,10 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\User;
use Flarum\User\User;
use InvalidArgumentException;
class UserBasicSerializer extends AbstractSerializer
class BasicUserSerializer extends AbstractSerializer
{
/**
* {@inheritdoc}
@@ -47,6 +47,6 @@ class UserBasicSerializer extends AbstractSerializer
*/
protected function groups($user)
{
return $this->hasMany($user, 'Flarum\Api\Serializer\GroupSerializer');
return $this->hasMany($user, GroupSerializer::class);
}
}

View File

@@ -11,18 +11,18 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\Access\Gate;
use Flarum\Core\Discussion;
use Flarum\Discussion\Discussion;
use Flarum\User\Gate;
class DiscussionSerializer extends DiscussionBasicSerializer
class DiscussionSerializer extends BasicDiscussionSerializer
{
/**
* @var Gate
* @var \Flarum\User\Gate
*/
protected $gate;
/**
* @param \Flarum\Core\Access\Gate $gate
* @param \Flarum\User\Gate $gate
*/
public function __construct(Gate $gate)
{

View File

@@ -11,8 +11,8 @@
namespace Flarum\Api\Serializer;
use Flarum\Forum\UrlGenerator;
use Flarum\Foundation\Application;
use Flarum\Http\UrlGenerator;
use Flarum\Settings\SettingsRepositoryInterface;
class ForumSerializer extends AbstractSerializer
@@ -97,7 +97,7 @@ class ForumSerializer extends AbstractSerializer
*/
protected function groups($model)
{
return $this->hasMany($model, 'Flarum\Api\Serializer\GroupSerializer');
return $this->hasMany($model, GroupSerializer::class);
}
/**
@@ -107,7 +107,7 @@ class ForumSerializer extends AbstractSerializer
{
$logoPath = $this->settings->get('logo_path');
return $logoPath ? $this->url->toPath('assets/'.$logoPath) : null;
return $logoPath ? $this->url->to('forum')->path('assets/'.$logoPath) : null;
}
/**
@@ -117,6 +117,6 @@ class ForumSerializer extends AbstractSerializer
{
$faviconPath = $this->settings->get('favicon_path');
return $faviconPath ? $this->url->toPath('assets/'.$faviconPath) : null;
return $faviconPath ? $this->url->to('forum')->path('assets/'.$faviconPath) : null;
}
}

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\Group;
use Flarum\Group\Group;
use InvalidArgumentException;
use Symfony\Component\Translation\TranslatorInterface;
@@ -57,14 +57,6 @@ class GroupSerializer extends AbstractSerializer
];
}
/**
* @return \Tobscure\JsonApi\Relationship
*/
protected function permissions($group)
{
return $this->hasMany($group, 'Flarum\Api\Serializers\PermissionSerializer');
}
/**
* @param string $name
* @return string

View File

@@ -11,7 +11,7 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\Notification;
use Flarum\Notification\Notification;
use InvalidArgumentException;
class NotificationSerializer extends AbstractSerializer
@@ -32,7 +32,7 @@ class NotificationSerializer extends AbstractSerializer
/**
* {@inheritdoc}
*
* @param \Flarum\Core\Notification $notification
* @param \Flarum\Notification\Notification $notification
* @throws InvalidArgumentException
*/
protected function getDefaultAttributes($notification)
@@ -57,7 +57,7 @@ class NotificationSerializer extends AbstractSerializer
*/
protected function user($notification)
{
return $this->hasOne($notification, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($notification, BasicUserSerializer::class);
}
/**
@@ -65,7 +65,7 @@ class NotificationSerializer extends AbstractSerializer
*/
protected function sender($notification)
{
return $this->hasOne($notification, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($notification, BasicUserSerializer::class);
}
/**

View File

@@ -11,18 +11,18 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\Access\Gate;
use Flarum\Core\Post\CommentPost;
use Flarum\Post\CommentPost;
use Flarum\User\Gate;
class PostSerializer extends PostBasicSerializer
class PostSerializer extends BasicPostSerializer
{
/**
* @var \Flarum\Core\Access\Gate
* @var \Flarum\User\Gate
*/
protected $gate;
/**
* @param \Flarum\Core\Access\Gate $gate
* @param \Flarum\User\Gate $gate
*/
public function __construct(Gate $gate)
{
@@ -77,7 +77,7 @@ class PostSerializer extends PostBasicSerializer
*/
protected function user($post)
{
return $this->hasOne($post, 'Flarum\Api\Serializer\UserSerializer');
return $this->hasOne($post, UserSerializer::class);
}
/**
@@ -85,7 +85,7 @@ class PostSerializer extends PostBasicSerializer
*/
protected function discussion($post)
{
return $this->hasOne($post, 'Flarum\Api\Serializer\DiscussionBasicSerializer');
return $this->hasOne($post, BasicDiscussionSerializer::class);
}
/**
@@ -93,7 +93,7 @@ class PostSerializer extends PostBasicSerializer
*/
protected function editUser($post)
{
return $this->hasOne($post, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($post, BasicUserSerializer::class);
}
/**
@@ -101,6 +101,6 @@ class PostSerializer extends PostBasicSerializer
*/
protected function hideUser($post)
{
return $this->hasOne($post, 'Flarum\Api\Serializer\UserBasicSerializer');
return $this->hasOne($post, BasicUserSerializer::class);
}
}

View File

@@ -11,12 +11,12 @@
namespace Flarum\Api\Serializer;
use Flarum\Core\Access\Gate;
use Flarum\User\Gate;
class UserSerializer extends UserBasicSerializer
class UserSerializer extends BasicUserSerializer
{
/**
* @var Gate
* @var \Flarum\User\Gate
*/
protected $gate;

View File

@@ -1,62 +0,0 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Api;
use Flarum\Event\ConfigureMiddleware;
use Flarum\Foundation\Application;
use Flarum\Http\AbstractServer;
use Tobscure\JsonApi\Document;
use Zend\Stratigility\MiddlewarePipe;
class Server extends AbstractServer
{
/**
* {@inheritdoc}
*/
protected function getMiddleware(Application $app)
{
$pipe = new MiddlewarePipe;
$pipe->raiseThrowables();
$path = parse_url($app->url('api'), PHP_URL_PATH);
if ($app->isInstalled() && $app->isUpToDate()) {
$pipe->pipe($path, $app->make('Flarum\Api\Middleware\HandleErrors'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\ParseJsonBody'));
$pipe->pipe($path, $app->make('Flarum\Api\Middleware\FakeHttpMethods'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\StartSession'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\RememberFromCookie'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\AuthenticateWithSession'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\AuthenticateWithHeader'));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\SetLocale'));
event(new ConfigureMiddleware($pipe, $path, $this));
$pipe->pipe($path, $app->make('Flarum\Http\Middleware\DispatchRoute', ['routes' => $app->make('flarum.api.routes')]));
} else {
$pipe->pipe($path, function () {
$document = new Document;
$document->setErrors([
[
'code' => 503,
'title' => 'Service Unavailable'
]
]);
return new JsonApiResponse($document, 503);
});
}
return $pipe;
}
}

View File

@@ -0,0 +1,304 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
use Flarum\Api\Controller;
use Flarum\Http\RouteCollection;
use Flarum\Http\RouteHandlerFactory;
return function (RouteCollection $map, RouteHandlerFactory $route) {
// Get forum information
$map->get(
'/forum',
'forum.show',
$route->toController(Controller\ShowForumController::class)
);
// Retrieve authentication token
$map->post(
'/token',
'token',
$route->toController(Controller\TokenController::class)
);
// Send forgot password email
$map->post(
'/forgot',
'forgot',
$route->toController(Controller\ForgotPasswordController::class)
);
/*
|--------------------------------------------------------------------------
| Users
|--------------------------------------------------------------------------
*/
// List users
$map->get(
'/users',
'users.index',
$route->toController(Controller\ListUsersController::class)
);
// Register a user
$map->post(
'/users',
'users.create',
$route->toController(Controller\CreateUserController::class)
);
// Get a single user
$map->get(
'/users/{id}',
'users.show',
$route->toController(Controller\ShowUserController::class)
);
// Edit a user
$map->patch(
'/users/{id}',
'users.update',
$route->toController(Controller\UpdateUserController::class)
);
// Delete a user
$map->delete(
'/users/{id}',
'users.delete',
$route->toController(Controller\DeleteUserController::class)
);
// Upload avatar
$map->post(
'/users/{id}/avatar',
'users.avatar.upload',
$route->toController(Controller\UploadAvatarController::class)
);
// Remove avatar
$map->delete(
'/users/{id}/avatar',
'users.avatar.delete',
$route->toController(Controller\DeleteAvatarController::class)
);
// send confirmation email
$map->post(
'/users/{id}/send-confirmation',
'users.confirmation.send',
$route->toController(Controller\SendConfirmationEmailController::class)
);
/*
|--------------------------------------------------------------------------
| Notifications
|--------------------------------------------------------------------------
*/
// List notifications for the current user
$map->get(
'/notifications',
'notifications.index',
$route->toController(Controller\ListNotificationsController::class)
);
// Mark all notifications as read
$map->post(
'/notifications/read',
'notifications.readAll',
$route->toController(Controller\ReadAllNotificationsController::class)
);
// Mark a single notification as read
$map->patch(
'/notifications/{id}',
'notifications.update',
$route->toController(Controller\UpdateNotificationController::class)
);
/*
|--------------------------------------------------------------------------
| Discussions
|--------------------------------------------------------------------------
*/
// List discussions
$map->get(
'/discussions',
'discussions.index',
$route->toController(Controller\ListDiscussionsController::class)
);
// Create a discussion
$map->post(
'/discussions',
'discussions.create',
$route->toController(Controller\CreateDiscussionController::class)
);
// Show a single discussion
$map->get(
'/discussions/{id}',
'discussions.show',
$route->toController(Controller\ShowDiscussionController::class)
);
// Edit a discussion
$map->patch(
'/discussions/{id}',
'discussions.update',
$route->toController(Controller\UpdateDiscussionController::class)
);
// Delete a discussion
$map->delete(
'/discussions/{id}',
'discussions.delete',
$route->toController(Controller\DeleteDiscussionController::class)
);
/*
|--------------------------------------------------------------------------
| Posts
|--------------------------------------------------------------------------
*/
// List posts, usually for a discussion
$map->get(
'/posts',
'posts.index',
$route->toController(Controller\ListPostsController::class)
);
// Create a post
$map->post(
'/posts',
'posts.create',
$route->toController(Controller\CreatePostController::class)
);
// Show a single or multiple posts by ID
$map->get(
'/posts/{id}',
'posts.show',
$route->toController(Controller\ShowPostController::class)
);
// Edit a post
$map->patch(
'/posts/{id}',
'posts.update',
$route->toController(Controller\UpdatePostController::class)
);
// Delete a post
$map->delete(
'/posts/{id}',
'posts.delete',
$route->toController(Controller\DeletePostController::class)
);
/*
|--------------------------------------------------------------------------
| Groups
|--------------------------------------------------------------------------
*/
// List groups
$map->get(
'/groups',
'groups.index',
$route->toController(Controller\ListGroupsController::class)
);
// Create a group
$map->post(
'/groups',
'groups.create',
$route->toController(Controller\CreateGroupController::class)
);
// Edit a group
$map->patch(
'/groups/{id}',
'groups.update',
$route->toController(Controller\UpdateGroupController::class)
);
// Delete a group
$map->delete(
'/groups/{id}',
'groups.delete',
$route->toController(Controller\DeleteGroupController::class)
);
/*
|--------------------------------------------------------------------------
| Administration
|--------------------------------------------------------------------------
*/
// Toggle an extension
$map->patch(
'/extensions/{name}',
'extensions.update',
$route->toController(Controller\UpdateExtensionController::class)
);
// Uninstall an extension
$map->delete(
'/extensions/{name}',
'extensions.delete',
$route->toController(Controller\UninstallExtensionController::class)
);
// Update settings
$map->post(
'/settings',
'settings',
$route->toController(Controller\SetSettingsController::class)
);
// Update a permission
$map->post(
'/permission',
'permission',
$route->toController(Controller\SetPermissionController::class)
);
// Upload a logo
$map->post(
'/logo',
'logo',
$route->toController(Controller\UploadLogoController::class)
);
// Remove the logo
$map->delete(
'/logo',
'logo.delete',
$route->toController(Controller\DeleteLogoController::class)
);
// Upload a favicon
$map->post(
'/favicon',
'favicon',
$route->toController(Controller\UploadFaviconController::class)
);
// Remove the favicon
$map->delete(
'/favicon',
'favicon.delete',
$route->toController(Controller\DeleteFaviconController::class)
);
};

View File

@@ -0,0 +1,28 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Bus;
use Flarum\Foundation\AbstractServiceProvider;
use Illuminate\Contracts\Bus\Dispatcher as BusContract;
use Illuminate\Contracts\Queue\Factory as QueueFactoryContract;
class BusServiceProvider extends AbstractServiceProvider
{
public function register()
{
$this->app->bind(BusContract::class, function ($app) {
return new Dispatcher($app, function ($connection = null) use ($app) {
return $app[QueueFactoryContract::class]->connection($connection);
});
});
}
}

View File

@@ -0,0 +1,28 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Bus;
use Illuminate\Bus\Dispatcher as BaseDispatcher;
class Dispatcher extends BaseDispatcher
{
public function getCommandHandler($command)
{
$handler = get_class($command).'Handler';
if (class_exists($handler)) {
return $this->container->make($handler);
}
return parent::getCommandHandler($command);
}
}

View File

@@ -9,7 +9,7 @@
* file that was distributed with this source code.
*/
namespace Flarum\Console\Command;
namespace Flarum\Console;
use Symfony\Component\Console\Command\Command;
use Symfony\Component\Console\Input\InputInterface;

View File

@@ -11,16 +11,32 @@
namespace Flarum\Console;
use Flarum\Console\Command\GenerateMigrationCommand;
use Flarum\Debug\Console\CacheClearCommand;
use Flarum\Debug\Console\InfoCommand;
use Flarum\Foundation\AbstractServer;
use Flarum\Database\Console\GenerateMigrationCommand;
use Flarum\Database\Console\MigrateCommand;
use Flarum\Foundation\Application;
use Flarum\Foundation\Console\CacheClearCommand;
use Flarum\Foundation\Console\InfoCommand;
use Flarum\Foundation\Site;
use Flarum\Install\Console\InstallCommand;
use Flarum\Update\Console\MigrateCommand;
use Symfony\Component\Console\Application;
use Flarum\Install\InstallServiceProvider;
use Symfony\Component\Console\Application as ConsoleApplication;
class Server extends AbstractServer
class Server
{
/**
* @param Site $site
* @return Server
*/
public static function fromSite(Site $site)
{
return new static($site->boot());
}
public function __construct(Application $app)
{
$this->app = $app;
}
public function listen()
{
$console = $this->getConsoleApplication();
@@ -29,14 +45,13 @@ class Server extends AbstractServer
}
/**
* @return Application
* @return ConsoleApplication
*/
protected function getConsoleApplication()
{
$app = $this->getApp();
$console = new Application('Flarum', $app->version());
$console = new ConsoleApplication('Flarum', $this->app->version());
$app->register('Flarum\Install\InstallServiceProvider');
$this->app->register(InstallServiceProvider::class);
$commands = [
InstallCommand::class,
@@ -44,7 +59,7 @@ class Server extends AbstractServer
GenerateMigrationCommand::class,
];
if ($app->isInstalled()) {
if ($this->app->isInstalled()) {
$commands = array_merge($commands, [
InfoCommand::class,
CacheClearCommand::class
@@ -52,9 +67,9 @@ class Server extends AbstractServer
}
foreach ($commands as $command) {
$console->add($app->make(
$console->add($this->app->make(
$command,
['config' => $app->isInstalled() ? $app->make('flarum.config') : []]
['config' => $this->app->isInstalled() ? $this->app->make('flarum.config') : []]
));
}

View File

@@ -1,78 +0,0 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Core\Post;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\ScopeInterface;
class RegisteredTypesScope implements ScopeInterface
{
/**
* The index at which we added a where clause.
*
* @var int
*/
protected $whereIndex;
/**
* The index at which we added where bindings.
*
* @var int
*/
protected $bindingIndex;
/**
* The number of where bindings we added.
*
* @var int
*/
protected $bindingCount;
/**
* Apply the scope to a given Eloquent query builder.
*
* @param Builder $builder
* @param Model $post
* @return void
*/
public function apply(Builder $builder, Model $post)
{
$query = $builder->getQuery();
$this->whereIndex = count($query->wheres ?: []);
$this->bindingIndex = count($query->getRawBindings()['where']);
$types = array_keys($post::getModels());
$this->bindingCount = count($types);
$query->whereIn('type', $types);
}
/**
* Remove the scope from the given Eloquent query builder.
*
* @param Builder $builder
* @param Model $post
* @return void
*/
public function remove(Builder $builder, Model $post)
{
$query = $builder->getQuery();
unset($query->wheres[$this->whereIndex]);
$query->wheres = array_values($query->wheres);
$whereBindings = $query->getRawBindings()['where'];
array_splice($whereBindings, $this->bindingIndex, $this->bindingCount);
$query->setBindings(array_values($whereBindings));
}
}

View File

@@ -9,8 +9,9 @@
* file that was distributed with this source code.
*/
namespace Flarum\Console\Command;
namespace Flarum\Database\Console;
use Flarum\Console\AbstractCommand;
use Flarum\Database\MigrationCreator;
use Symfony\Component\Console\Input\InputArgument;
use Symfony\Component\Console\Input\InputOption;

View File

@@ -9,9 +9,9 @@
* file that was distributed with this source code.
*/
namespace Flarum\Update\Console;
namespace Flarum\Database\Console;
use Flarum\Console\Command\AbstractCommand;
use Flarum\Console\AbstractCommand;
use Illuminate\Contracts\Container\Container;
class MigrateCommand extends AbstractCommand

View File

@@ -58,7 +58,8 @@ class DatabaseMigrationRepository implements MigrationRepositoryInterface
return $this->table()
->where('extension', $extension)
->orderBy('migration', 'asc')
->lists('migration');
->pluck('migration')
->toArray();
}
/**

View File

@@ -12,10 +12,8 @@
namespace Flarum\Database;
use Flarum\Foundation\AbstractServiceProvider;
use Flarum\Foundation\Application;
use Illuminate\Database\ConnectionResolver;
use Illuminate\Database\Connectors\ConnectionFactory;
use PDO;
class DatabaseServiceProvider extends AbstractServiceProvider
{
@@ -29,7 +27,6 @@ class DatabaseServiceProvider extends AbstractServiceProvider
$connection = $factory->make($this->app->config('database'));
$connection->setEventDispatcher($this->app->make('Illuminate\Contracts\Events\Dispatcher'));
$connection->setFetchMode(PDO::FETCH_CLASS);
return $connection;
});
@@ -46,14 +43,6 @@ class DatabaseServiceProvider extends AbstractServiceProvider
});
$this->app->alias('Illuminate\Database\ConnectionResolverInterface', 'db');
$this->app->singleton('Flarum\Database\MigrationRepositoryInterface', function ($app) {
return new DatabaseMigrationRepository($app['db'], 'migrations');
});
$this->app->bind(MigrationCreator::class, function (Application $app) {
return new MigrationCreator($app->make('Illuminate\Filesystem\Filesystem'), $app->basePath());
});
}
/**

View File

@@ -0,0 +1,32 @@
<?php
/*
* This file is part of Flarum.
*
* (c) Toby Zerner <toby.zerner@gmail.com>
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
*/
namespace Flarum\Database;
use Flarum\Foundation\AbstractServiceProvider;
use Flarum\Foundation\Application;
class MigrationServiceProvider extends AbstractServiceProvider
{
/**
* {@inheritdoc}
*/
public function register()
{
$this->app->singleton('Flarum\Database\MigrationRepositoryInterface', function ($app) {
return new DatabaseMigrationRepository($app['db'], 'migrations');
});
$this->app->bind(MigrationCreator::class, function (Application $app) {
return new MigrationCreator($app->make('Illuminate\Filesystem\Filesystem'), $app->basePath());
});
}
}

View File

@@ -299,7 +299,7 @@ class Migrator
/**
* Get the migration repository instance.
*
* @return \Illuminate\Database\Migrations\MigrationRepositoryInterface
* @return MigrationRepositoryInterface
*/
public function getRepository()
{

View File

@@ -9,10 +9,10 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Support;
namespace Flarum\Database;
use Flarum\Core\User;
use Flarum\Event\ScopeModelVisibility;
use Flarum\User\User;
use Illuminate\Database\Eloquent\Builder;
trait ScopeVisibilityTrait

View File

@@ -9,9 +9,9 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Flarum\Core\User;
use Flarum\User\User;
class DeleteDiscussion
{

View File

@@ -9,13 +9,13 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Repository\DiscussionRepository;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Event\DiscussionWillBeDeleted;
use Flarum\Discussion\DiscussionRepository;
use Flarum\Discussion\Event\Deleting;
use Flarum\Foundation\DispatchEventsTrait;
use Flarum\User\AssertPermissionTrait;
use Flarum\User\Exception\PermissionDeniedException;
use Illuminate\Contracts\Events\Dispatcher;
class DeleteDiscussionHandler
@@ -24,7 +24,7 @@ class DeleteDiscussionHandler
use AssertPermissionTrait;
/**
* @var DiscussionRepository
* @var \Flarum\Discussion\DiscussionRepository
*/
protected $discussions;
@@ -40,7 +40,7 @@ class DeleteDiscussionHandler
/**
* @param DeleteDiscussion $command
* @return \Flarum\Core\Discussion
* @return \Flarum\Discussion\Discussion
* @throws PermissionDeniedException
*/
public function handle(DeleteDiscussion $command)
@@ -52,7 +52,7 @@ class DeleteDiscussionHandler
$this->assertCan($actor, 'delete', $discussion);
$this->events->fire(
new DiscussionWillBeDeleted($discussion, $actor, $command->data)
new Deleting($discussion, $actor, $command->data)
);
$discussion->delete();

View File

@@ -9,9 +9,9 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Flarum\Core\User;
use Flarum\User\User;
class EditDiscussion
{
@@ -25,7 +25,7 @@ class EditDiscussion
/**
* The user performing the action.
*
* @var \Flarum\Core\User
* @var \Flarum\User\User
*/
public $actor;
@@ -38,7 +38,7 @@ class EditDiscussion
/**
* @param int $discussionId The ID of the discussion to edit.
* @param \Flarum\Core\User $actor The user performing the action.
* @param \Flarum\User\User $actor The user performing the action.
* @param array $data The attributes to update on the discussion.
*/
public function __construct($discussionId, User $actor, array $data)

View File

@@ -9,14 +9,13 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Exception\PermissionDeniedException;
use Flarum\Core\Repository\DiscussionRepository;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Core\Validator\DiscussionValidator;
use Flarum\Event\DiscussionWillBeSaved;
use Flarum\Discussion\DiscussionRepository;
use Flarum\Discussion\DiscussionValidator;
use Flarum\Discussion\Event\Saving;
use Flarum\Foundation\DispatchEventsTrait;
use Flarum\User\AssertPermissionTrait;
use Illuminate\Contracts\Events\Dispatcher;
class EditDiscussionHandler
@@ -48,8 +47,8 @@ class EditDiscussionHandler
/**
* @param EditDiscussion $command
* @return \Flarum\Core\Discussion
* @throws PermissionDeniedException
* @return \Flarum\Discussion\Discussion
* @throws \Flarum\User\Exception\PermissionDeniedException
*/
public function handle(EditDiscussion $command)
{
@@ -76,7 +75,7 @@ class EditDiscussionHandler
}
$this->events->fire(
new DiscussionWillBeSaved($discussion, $actor, $data)
new Saving($discussion, $actor, $data)
);
$this->validator->assertValid($discussion->getDirty());

View File

@@ -9,9 +9,9 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Flarum\Core\User;
use Flarum\User\User;
class ReadDiscussion
{

View File

@@ -9,12 +9,12 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Repository\DiscussionRepository;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Event\DiscussionStateWillBeSaved;
use Flarum\Discussion\DiscussionRepository;
use Flarum\Discussion\Event\UserDataSaving;
use Flarum\Foundation\DispatchEventsTrait;
use Flarum\User\AssertPermissionTrait;
use Illuminate\Contracts\Events\Dispatcher;
class ReadDiscussionHandler
@@ -39,8 +39,8 @@ class ReadDiscussionHandler
/**
* @param ReadDiscussion $command
* @return \Flarum\Core\DiscussionState
* @throws \Flarum\Core\Exception\PermissionDeniedException
* @return \Flarum\Discussion\UserState
* @throws \Flarum\User\Exception\PermissionDeniedException
*/
public function handle(ReadDiscussion $command)
{
@@ -54,7 +54,7 @@ class ReadDiscussionHandler
$state->read($command->readNumber);
$this->events->fire(
new DiscussionStateWillBeSaved($state)
new UserDataSaving($state)
);
$state->save();

View File

@@ -9,9 +9,9 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Flarum\Core\User;
use Flarum\User\User;
class StartDiscussion
{

View File

@@ -9,14 +9,15 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Command;
namespace Flarum\Discussion\Command;
use Exception;
use Flarum\Core\Access\AssertPermissionTrait;
use Flarum\Core\Discussion;
use Flarum\Core\Support\DispatchEventsTrait;
use Flarum\Core\Validator\DiscussionValidator;
use Flarum\Event\DiscussionWillBeSaved;
use Flarum\Discussion\Discussion;
use Flarum\Discussion\DiscussionValidator;
use Flarum\Discussion\Event\Saving;
use Flarum\Foundation\DispatchEventsTrait;
use Flarum\Post\Command\PostReply;
use Flarum\User\AssertPermissionTrait;
use Illuminate\Contracts\Bus\Dispatcher as BusDispatcher;
use Illuminate\Contracts\Events\Dispatcher as EventDispatcher;
@@ -31,14 +32,14 @@ class StartDiscussionHandler
protected $bus;
/**
* @var DiscussionValidator
* @var \Flarum\Discussion\DiscussionValidator
*/
protected $validator;
/**
* @param EventDispatcher $events
* @param BusDispatcher $bus
* @param DiscussionValidator $validator
* @param \Flarum\Discussion\DiscussionValidator $validator
*/
public function __construct(EventDispatcher $events, BusDispatcher $bus, DiscussionValidator $validator)
{
@@ -70,7 +71,7 @@ class StartDiscussionHandler
);
$this->events->fire(
new DiscussionWillBeSaved($discussion, $actor, $data)
new Saving($discussion, $actor, $data)
);
$this->validator->assertValid($discussion->getAttributes());

View File

@@ -9,19 +9,22 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core;
namespace Flarum\Discussion;
use Flarum\Core\Post\MergeableInterface;
use Flarum\Core\Support\EventGeneratorTrait;
use Flarum\Core\Support\ScopeVisibilityTrait;
use Flarum\Database\AbstractModel;
use Flarum\Event\DiscussionWasDeleted;
use Flarum\Event\DiscussionWasHidden;
use Flarum\Event\DiscussionWasRenamed;
use Flarum\Event\DiscussionWasRestored;
use Flarum\Event\DiscussionWasStarted;
use Flarum\Event\PostWasDeleted;
use Flarum\Database\ScopeVisibilityTrait;
use Flarum\Discussion\Event\Deleted;
use Flarum\Discussion\Event\Hidden;
use Flarum\Discussion\Event\Renamed;
use Flarum\Discussion\Event\Restored;
use Flarum\Discussion\Event\Started;
use Flarum\Event\ScopePostVisibility;
use Flarum\Foundation\EventGeneratorTrait;
use Flarum\Post\Event\Deleted as PostDeleted;
use Flarum\Post\MergeableInterface;
use Flarum\Post\Post;
use Flarum\User\Guest;
use Flarum\User\User;
use Flarum\Util\Str;
/**
@@ -40,7 +43,7 @@ use Flarum\Util\Str;
* @property int|null $last_post_number
* @property \Carbon\Carbon|null $hide_time
* @property int|null $hide_user_id
* @property DiscussionState|null $state
* @property UserState|null $state
* @property \Illuminate\Database\Eloquent\Collection $posts
* @property \Illuminate\Database\Eloquent\Collection $comments
* @property \Illuminate\Database\Eloquent\Collection $participants
@@ -99,7 +102,7 @@ class Discussion extends AbstractModel
parent::boot();
static::deleted(function ($discussion) {
$discussion->raise(new DiscussionWasDeleted($discussion));
$discussion->raise(new Deleted($discussion));
// Delete all of the posts in the discussion. Before we delete them
// in a big batch query, we will loop through them and raise a
@@ -107,7 +110,7 @@ class Discussion extends AbstractModel
$posts = $discussion->posts()->allTypes();
foreach ($posts->get() as $post) {
$discussion->raise(new PostWasDeleted($post));
$discussion->raise(new PostDeleted($post));
}
$posts->delete();
@@ -135,7 +138,7 @@ class Discussion extends AbstractModel
$discussion->setRelation('startUser', $user);
$discussion->raise(new DiscussionWasStarted($discussion));
$discussion->raise(new Started($discussion));
return $discussion;
}
@@ -152,7 +155,7 @@ class Discussion extends AbstractModel
$oldTitle = $this->title;
$this->title = $title;
$this->raise(new DiscussionWasRenamed($this, $oldTitle));
$this->raise(new Renamed($this, $oldTitle));
}
return $this;
@@ -170,7 +173,7 @@ class Discussion extends AbstractModel
$this->hide_time = time();
$this->hide_user_id = $actor ? $actor->id : null;
$this->raise(new DiscussionWasHidden($this));
$this->raise(new Hidden($this));
}
return $this;
@@ -187,7 +190,7 @@ class Discussion extends AbstractModel
$this->hide_time = null;
$this->hide_user_id = null;
$this->raise(new DiscussionWasRestored($this));
$this->raise(new Restored($this));
}
return $this;
@@ -270,7 +273,7 @@ class Discussion extends AbstractModel
* DiscussionRenamedPost, and delete if the title has been reverted
* completely.)
*
* @param MergeableInterface $post The post to save.
* @param \Flarum\Post\MergeableInterface $post The post to save.
* @return Post The resulting post. It may or may not be the same post as
* was originally intended to be saved. It also may not exist, if the
* merge logic resulted in deletion.
@@ -301,7 +304,7 @@ class Discussion extends AbstractModel
*/
public function posts()
{
return $this->hasMany('Flarum\Core\Post');
return $this->hasMany('Flarum\Post\Post');
}
/**
@@ -353,7 +356,7 @@ class Discussion extends AbstractModel
*/
public function startPost()
{
return $this->belongsTo('Flarum\Core\Post', 'start_post_id');
return $this->belongsTo('Flarum\Post\Post', 'start_post_id');
}
/**
@@ -363,7 +366,7 @@ class Discussion extends AbstractModel
*/
public function startUser()
{
return $this->belongsTo('Flarum\Core\User', 'start_user_id');
return $this->belongsTo('Flarum\User\User', 'start_user_id');
}
/**
@@ -373,7 +376,7 @@ class Discussion extends AbstractModel
*/
public function lastPost()
{
return $this->belongsTo('Flarum\Core\Post', 'last_post_id');
return $this->belongsTo('Flarum\Post\Post', 'last_post_id');
}
/**
@@ -383,7 +386,7 @@ class Discussion extends AbstractModel
*/
public function lastUser()
{
return $this->belongsTo('Flarum\Core\User', 'last_user_id');
return $this->belongsTo('Flarum\User\User', 'last_user_id');
}
/**
@@ -393,7 +396,7 @@ class Discussion extends AbstractModel
*/
public function readers()
{
return $this->belongsToMany('Flarum\Core\User', 'users_discussions');
return $this->belongsToMany('Flarum\User\User', 'users_discussions');
}
/**
@@ -412,7 +415,7 @@ class Discussion extends AbstractModel
{
$user = $user ?: static::$stateUser;
return $this->hasOne('Flarum\Core\DiscussionState')->where('user_id', $user ? $user->id : null);
return $this->hasOne('Flarum\Discussion\UserState')->where('user_id', $user ? $user->id : null);
}
/**
@@ -420,14 +423,14 @@ class Discussion extends AbstractModel
* exist.
*
* @param User $user
* @return \Flarum\Core\DiscussionState
* @return \Flarum\Discussion\UserState
*/
public function stateFor(User $user)
{
$state = $this->state($user)->first();
if (! $state) {
$state = new DiscussionState;
$state = new UserState;
$state->discussion_id = $this->id;
$state->user_id = $user->id;
}

View File

@@ -9,13 +9,13 @@
* file that was distributed with this source code.
*/
namespace Flarum\Core\Listener;
namespace Flarum\Discussion;
use Flarum\Core\Post;
use Flarum\Event\PostWasDeleted;
use Flarum\Event\PostWasHidden;
use Flarum\Event\PostWasPosted;
use Flarum\Event\PostWasRestored;
use Flarum\Post\Event\Deleted;
use Flarum\Post\Event\Hidden;
use Flarum\Post\Event\Posted;
use Flarum\Post\Event\Restored;
use Flarum\Post\Post;
use Illuminate\Contracts\Events\Dispatcher;
class DiscussionMetadataUpdater
@@ -25,16 +25,16 @@ class DiscussionMetadataUpdater
*/
public function subscribe(Dispatcher $events)
{
$events->listen(PostWasPosted::class, [$this, 'whenPostWasPosted']);
$events->listen(PostWasDeleted::class, [$this, 'whenPostWasDeleted']);
$events->listen(PostWasHidden::class, [$this, 'whenPostWasHidden']);
$events->listen(PostWasRestored::class, [$this, 'whenPostWasRestored']);
$events->listen(Posted::class, [$this, 'whenPostWasPosted']);
$events->listen(Deleted::class, [$this, 'whenPostWasDeleted']);
$events->listen(Hidden::class, [$this, 'whenPostWasHidden']);
$events->listen(Restored::class, [$this, 'whenPostWasRestored']);
}
/**
* @param PostWasPosted $event
* @param Posted $event
*/
public function whenPostWasPosted(PostWasPosted $event)
public function whenPostWasPosted(Posted $event)
{
$discussion = $event->post->discussion;
@@ -47,9 +47,9 @@ class DiscussionMetadataUpdater
}
/**
* @param \Flarum\Event\PostWasDeleted $event
* @param \Flarum\Post\Event\Deleted $event
*/
public function whenPostWasDeleted(PostWasDeleted $event)
public function whenPostWasDeleted(Deleted $event)
{
$this->removePost($event->post);
@@ -61,17 +61,17 @@ class DiscussionMetadataUpdater
}
/**
* @param PostWasHidden $event
* @param \Flarum\Post\Event\Hidden $event
*/
public function whenPostWasHidden(PostWasHidden $event)
public function whenPostWasHidden(Hidden $event)
{
$this->removePost($event->post);
}
/**
* @param PostWasRestored $event
* @param Restored $event
*/
public function whenPostWasRestored(PostWasRestored $event)
public function whenPostWasRestored(Restored $event)
{
$discussion = $event->post->discussion;

Some files were not shown because too many files have changed in this diff Show More