mirror of
https://github.com/flarum/core.git
synced 2025-10-12 23:44:27 +02:00
Big front-end asset/filestructure refactor
- Extract shared Ember components into a “flarum-common” ember-cli addon. This can be used by both the forum + admin Ember apps, keeping things DRY - Move LESS styles into their own top-level directory and do a similar thing (extract common styles) - Add LESS/JS compilation and versioning to PHP (AssetManager) - Set up admin entry point (Theoretical) upgrade instructions: - Delete everything in [app_root]/public - Set up tooling in forum/admin Ember apps (npm install/update, bower install/update) and then build them (ember build) - php artisan vendor:publish - Upgrade flarum/flarum repo (slight change in a config file) - If you need to trigger a LESS/JS recompile, delete the .css/.js files in [app_root]/public/flarum. I set up LiveReload to do this for me when I change files in less/ or ember/ Todo: - Start writing admin app! - Remove bootstrap/font-awesome from repo and instead depend on their composer packages? Maybe? (Bower is not an option here)
This commit is contained in:
54
src/Admin/Actions/IndexAction.php
Normal file
54
src/Admin/Actions/IndexAction.php
Normal file
@@ -0,0 +1,54 @@
|
||||
<?php namespace Flarum\Admin\Actions;
|
||||
|
||||
use Flarum\Web\Actions\Action;
|
||||
use Illuminate\Http\Request;
|
||||
use Session;
|
||||
use Auth;
|
||||
use Cookie;
|
||||
use Config;
|
||||
use View;
|
||||
|
||||
class IndexAction extends Action
|
||||
{
|
||||
public function handle(Request $request, $params = [])
|
||||
{
|
||||
$config = [
|
||||
'modulePrefix' => 'flarum-admin',
|
||||
'environment' => 'production',
|
||||
'baseURL' => '/admin',
|
||||
'apiURL' => '/api',
|
||||
'locationType' => 'hash',
|
||||
'EmberENV' => [],
|
||||
'APP' => [],
|
||||
'forumTitle' => Config::get('flarum::forum_title', 'Flarum Demo Forum')
|
||||
];
|
||||
$data = [];
|
||||
$session = [];
|
||||
$alert = Session::get('alert');
|
||||
|
||||
if (($user = $this->actor->getUser()) && $user->exists) {
|
||||
$session = [
|
||||
'userId' => $user->id,
|
||||
'token' => Cookie::get('flarum_remember')
|
||||
];
|
||||
|
||||
$response = $this->callAction('Flarum\Api\Actions\Users\ShowAction', ['id' => $user->id]);
|
||||
$response = $response->getData();
|
||||
|
||||
$data = [$response->data];
|
||||
if (isset($response->included)) {
|
||||
$data = array_merge($data, $response->included);
|
||||
}
|
||||
}
|
||||
|
||||
return View::make('flarum.admin::index')
|
||||
->with('title', Config::get('flarum::forum_title', 'Flarum Demo Forum'))
|
||||
->with('styles', app('flarum.admin.assetManager')->getCSSFiles())
|
||||
->with('scripts', app('flarum.admin.assetManager')->getJSFiles())
|
||||
->with('config', $config)
|
||||
->with('content', '')
|
||||
->with('data', $data)
|
||||
->with('session', $session)
|
||||
->with('alert', $alert);
|
||||
}
|
||||
}
|
45
src/Admin/AdminServiceProvider.php
Normal file
45
src/Admin/AdminServiceProvider.php
Normal file
@@ -0,0 +1,45 @@
|
||||
<?php namespace Flarum\Admin;
|
||||
|
||||
use Illuminate\Support\ServiceProvider;
|
||||
use Flarum\Web\AssetManager;
|
||||
|
||||
class AdminServiceProvider extends ServiceProvider
|
||||
{
|
||||
/**
|
||||
* Bootstrap the application events.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function boot()
|
||||
{
|
||||
$root = __DIR__.'/../..';
|
||||
|
||||
$this->loadViewsFrom($root.'/views', 'flarum.admin');
|
||||
|
||||
$assetManager = $this->app['flarum.admin.assetManager'];
|
||||
|
||||
$assetManager->addFile([
|
||||
$root.'/ember/admin/dist/assets/vendor.js',
|
||||
$root.'/ember/admin/dist/assets/flarum-admin.js',
|
||||
$root.'/less/admin/app.less'
|
||||
]);
|
||||
|
||||
$this->publishes([
|
||||
$root.'/public/fonts' => public_path('flarum/fonts')
|
||||
]);
|
||||
|
||||
include __DIR__.'/routes.php';
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the service provider.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->app['flarum.admin.assetManager'] = $this->app->share(function ($app) {
|
||||
return new AssetManager($app['files'], $app['path.public'].'/flarum', 'admin');
|
||||
});
|
||||
}
|
||||
}
|
29
src/Admin/Middleware/LoginWithCookieAndCheckAdmin.php
Normal file
29
src/Admin/Middleware/LoginWithCookieAndCheckAdmin.php
Normal file
@@ -0,0 +1,29 @@
|
||||
<?php namespace Flarum\Admin\Middleware;
|
||||
|
||||
use Flarum\Core\Support\Actor;
|
||||
use Flarum\Core\Models\AccessToken;
|
||||
use Closure;
|
||||
|
||||
class LoginWithCookieAndCheckAdmin
|
||||
{
|
||||
protected $actor;
|
||||
|
||||
public function __construct(Actor $actor)
|
||||
{
|
||||
$this->actor = $actor;
|
||||
}
|
||||
|
||||
public function handle($request, Closure $next)
|
||||
{
|
||||
if (($token = $request->cookie('flarum_remember')) &&
|
||||
($accessToken = AccessToken::where('id', $token)->first())) {
|
||||
$user = $accessToken->user;
|
||||
if (! $user->isAdmin()) {
|
||||
die('ur not an admin');
|
||||
}
|
||||
$this->actor->setUser($user);
|
||||
}
|
||||
|
||||
return $next($request);
|
||||
}
|
||||
}
|
19
src/Admin/routes.php
Executable file
19
src/Admin/routes.php
Executable file
@@ -0,0 +1,19 @@
|
||||
<?php
|
||||
|
||||
$action = function ($class) {
|
||||
return function () use ($class) {
|
||||
$action = $this->app->make($class);
|
||||
$request = $this->app['request']->instance();
|
||||
$parameters = $this->app['router']->current()->parameters();
|
||||
return $action->handle($request, $parameters);
|
||||
};
|
||||
};
|
||||
|
||||
Route::group(['prefix' => 'admin', 'middleware' => 'Flarum\Admin\Middleware\LoginWithCookieAndCheckAdmin'], function () use ($action) {
|
||||
|
||||
Route::get('/', [
|
||||
'as' => 'flarum.admin.index',
|
||||
'uses' => $action('Flarum\Admin\Actions\IndexAction')
|
||||
]);
|
||||
|
||||
});
|
Reference in New Issue
Block a user