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 () { $routes = new RouteCollection; $this->populateRoutes($routes); return $routes; }); $this->app->singleton('flarum.admin.middleware', function () { return [ HttpMiddleware\ParseJsonBody::class, HttpMiddleware\StartSession::class, HttpMiddleware\RememberFromCookie::class, HttpMiddleware\AuthenticateWithSession::class, HttpMiddleware\CheckCsrfToken::class, HttpMiddleware\SetLocale::class, Middleware\RequireAdministrateAbility::class, ]; }); $this->app->singleton('flarum.admin.handler', function (Application $app) { $pipe = new MiddlewarePipe; // All requests should first be piped through our global error handler $pipe->pipe(new HttpMiddleware\HandleErrors( $app->make(Registry::class), $app->inDebugMode() ? $app->make(WhoopsFormatter::class) : $app->make(ViewFormatter::class), $app->tagged(Reporter::class) )); foreach ($this->app->make('flarum.admin.middleware') as $middleware) { $pipe->pipe($this->app->make($middleware)); } $pipe->pipe(new HttpMiddleware\DispatchRoute($this->app->make('flarum.admin.routes'))); return $pipe; }); $this->app->bind('flarum.assets.admin', function () { /** @var \Flarum\Frontend\Assets $assets */ $assets = $this->app->make('flarum.assets.factory')('admin'); $assets->js(function (SourceCollector $sources) { $sources->addFile(__DIR__.'/../../js/dist/admin.js'); }); $assets->css(function (SourceCollector $sources) { $sources->addFile(__DIR__.'/../../less/admin.less'); }); $this->app->make(AddTranslations::class)->forFrontend('admin')->to($assets); $this->app->make(AddLocaleAssets::class)->to($assets); return $assets; }); $this->app->bind('flarum.frontend.admin', function () { /** @var \Flarum\Frontend\Frontend $frontend */ $frontend = $this->app->make('flarum.frontend.factory')('admin'); $frontend->content($this->app->make(Content\AdminPayload::class)); return $frontend; }); } /** * {@inheritdoc} */ public function boot() { $this->loadViewsFrom(__DIR__.'/../../views', 'flarum.admin'); $events = $this->app->make('events'); $events->listen( [Enabled::class, Disabled::class, ClearingCache::class], function () { $recompile = new RecompileFrontendAssets( $this->app->make('flarum.assets.admin'), $this->app->make(LocaleManager::class) ); $recompile->flush(); } ); $events->listen( Saved::class, function (Saved $event) { $recompile = new RecompileFrontendAssets( $this->app->make('flarum.assets.admin'), $this->app->make(LocaleManager::class) ); $recompile->whenSettingsSaved($event); } ); } /** * @param RouteCollection $routes */ protected function populateRoutes(RouteCollection $routes) { $factory = $this->app->make(RouteHandlerFactory::class); $callback = include __DIR__.'/routes.php'; $callback($routes, $factory); } }