Skip to content

Commit

Permalink
actions on pages and others
Browse files Browse the repository at this point in the history
  • Loading branch information
matejkrenek committed Dec 31, 2022
1 parent 1af9c22 commit be0f58b
Show file tree
Hide file tree
Showing 28 changed files with 652 additions and 262 deletions.
130 changes: 87 additions & 43 deletions config/admin.php
Original file line number Diff line number Diff line change
Expand Up @@ -9,50 +9,8 @@

'favicon' => null,

'prefix' => 'admin',

'prefix_name' => 'admin',

'middleware' => ['api'],

'auth' => [
'guard' => 'admin',
'routes' => [
'login' => [
'url' => '/auth/login',
'name' => 'auth.login',
'middleware' => ['guest:admin']
],
'logout' => [
'url' => '/auth/logout',
'name' => 'auth.logout',
'middleware' => ['auth:admin']
],
'me' => [
'url' => '/auth/me',
'name' => 'auth.me',
'middleware' => ['auth:admin']
],
'token' => [
'url' => '/auth/token',
'name' => 'auth.token',
'middleware' => []
]
]
],

'builder' => [
'url' => '/builder',
'name' => 'builder',
'middleware' => [
Bengr\Admin\Http\Middleware\DispatchServingAdminEvent::class,
]
],

'resources' => [
'url' => '/resources',
'name' => 'resources',
'middleware' => []
],

'pages' => [
Expand All @@ -74,5 +32,91 @@
'sort_order' => 'sort_order'
]
]
]
],

'routes' => [
'url' => '/admin',
'name' => 'admin',
'middleware' => ['api'],
'routes' => [
'auth' => [
'url' => '/auth',
'name' => 'auth',
'middleware' => [],
'routes' => [
'login' => [
'url' => '/login',
'name' => 'login',
'middleware' => ['guest:admin']
],
'logout' => [
'url' => '/logout',
'name' => 'logout',
'middleware' => ['auth:admin']
],
'me' => [
'url' => '/me',
'name' => 'me',
'middleware' => ['auth:admin']
],
'me-avatar' => [
'url' => '/me/avatar',
'name' => 'me.avatar',
'middleware' => ['auth:admin']
],
'token' => [
'url' => '/token',
'name' => 'token',
'middleware' => []
]
]
],
'settings' => [
'url' => '/settings',
'name' => 'settings',
'middleware' => ['auth:admin'],
'routes' => [
'settings' => [
'url' => '/',
'name' => 'index',
'middleware' => []
],
'socials-delete' => [
'url' => '/socials/{id}',
'name' => 'socials.delete',
'middleware' => []
],
'languages-delete' => [
'url' => '/languages/{id}',
'name' => 'languages.delete',
'middleware' => []
]
]
],
'builder' => [
'url' => '/builder',
'name' => 'builder',
'middleware' => [
Bengr\Admin\Http\Middleware\DispatchServingAdminEvent::class,
],
'routes' => [
'pages' => [
'url' => '/pages',
'name' => 'pages',
'middleware' => []
],
'widgets' => [
'url' => '/widgets',
'name' => 'widgets',
'middleware' => []
],
'actions' => [
'url' => '/actions',
'name' => 'actions',
'middleware' => []
]
]
],
]
],
];
148 changes: 80 additions & 68 deletions routes/web.php
Original file line number Diff line number Diff line change
@@ -1,74 +1,86 @@
<?php

use Bengr\Admin\Http\Controllers\AdminUserController;
use Bengr\Admin\Http\Controllers\AuthController;
use Bengr\Admin\Http\Controllers\BuilderController;
use Bengr\Admin\Http\Controllers\PageController;
use Bengr\Admin\Http\Controllers\ResourceController;
use Bengr\Admin\Http\Controllers\SettingsController;
use Bengr\Admin\Http\Controllers\Auth\AuthController;
use Bengr\Admin\Http\Controllers\Auth\MeController;
use Bengr\Admin\Http\Controllers\Builder\ActionController;
use Bengr\Admin\Http\Controllers\Builder\PageController;
use Bengr\Admin\Http\Controllers\Builder\WidgetController;
use Bengr\Admin\Http\Controllers\Settings\SettingsController;
use Illuminate\Support\Facades\Route;

Route::prefix(config('admin.prefix'))
->middleware(config('admin.middleware'))
->name(config('admin.prefix_name') . '.')
Route::prefix(config('admin.routes.url'))
->name(config('admin.routes.name') . '.')
->middleware(config('admin.routes.middleware'))
->group(function () {
Route::get(config('admin.builder.url'), BuilderController::class)
->name(config('admin.builder.name'))
->middleware(config('admin.builder.middleware'));

Route::get(config('admin.resources.url'), [ResourceController::class, 'get'])
->name(config('admin.resources.name'))
->middleware(config('admin.resources.middleware'));

Route::post(config('admin.auth.routes.login.url'), [AuthController::class, 'login'])
->name(config('admin.auth.routes.login.name'))
->middleware(config('admin.auth.routes.login.middleware'));

Route::post(config('admin.auth.routes.logout.url'), [AuthController::class, 'logout'])
->name(config('admin.auth.routes.logout.name'))
->middleware(config('admin.auth.routes.logout.middleware'));

Route::get(config('admin.auth.routes.me.url'), [AdminUserController::class, 'me'])
->name(config('admin.auth.routes.me.name'))
->middleware(config('admin.auth.routes.me.middleware'));

Route::post(config('admin.auth.routes.me.url'), [AdminUserController::class, 'update'])
->name(config('admin.auth.routes.me.name'))
->middleware(config('admin.auth.routes.me.middleware'));

Route::post(config('admin.auth.routes.me.url') . '/avatar', [AdminUserController::class, 'uploadAvatar'])
->name(config('admin.auth.routes.me.name') . '.avatar')
->middleware(config('admin.auth.routes.me.middleware'));

Route::delete(config('admin.auth.routes.me.url') . '/avatar', [AdminUserController::class, 'deleteAvatar'])
->name(config('admin.auth.routes.me.name') . '.avatar')
->middleware(config('admin.auth.routes.me.middleware'));

Route::get(config('admin.auth.routes.token.url'), [AuthController::class, 'token'])
->name(config('admin.auth.routes.token.name'))
->middleware(config('admin.auth.routes.token.middleware'));

Route::get('/settings', [SettingsController::class, 'index'])
->name('admin.settings')
->middleware(['auth:admin']);

Route::post('/settings', [SettingsController::class, 'update'])
->name('admin.settings')
->middleware(['auth:admin']);

Route::get('/pages', [PageController::class, 'build'])
->name('admin.pages.build')
->middleware();

Route::get('/pages', [PageController::class, 'performAction'])
->name('admin.pages.action')
->middleware();

Route::delete('/settings/socials/{social}', [SettingsController::class, 'deleteSocial'])
->name('admin.settings.socials.detail')
->middleware(['auth:admin']);

Route::delete('/settings/languages/{language}', [SettingsController::class, 'deleteLanguage'])
->name('admin.settings.languages.detail')
->middleware(['auth:admin']);
Route::prefix(config('admin.routes.routes.auth.url'))
->name(config('admin.routes.routes.auth.name') . '.')
->middleware(config('admin.routes.routes.auth.middleware'))
->group(function () {

Route::post(config('admin.routes.routes.auth.routes.login.url'), [AuthController::class, 'login'])
->name(config('admin.routes.routes.auth.routes.login.name'))
->middleware(config('admin.routes.routes.auth.routes.login.middleware'));

Route::post(config('admin.routes.routes.auth.routes.logout.url'), [AuthController::class, 'logout'])
->name(config('admin.routes.routes.auth.routes.logout.name'))
->middleware(config('admin.routes.routes.auth.routes.logout.middleware'));

Route::get(config('admin.routes.routes.auth.routes.token.url'), [AuthController::class, 'token'])
->name(config('admin.routes.routes.auth.routes.token.name'))
->middleware(config('admin.routes.routes.auth.routes.token.middleware'));

Route::get(config('admin.routes.routes.auth.routes.me.url'), [MeController::class, 'me'])
->name(config('admin.routes.routes.auth.routes.me.name'))
->middleware(config('admin.routes.routes.auth.routes.me.middleware'));

Route::put(config('admin.routes.routes.auth.routes.me.url'), [MeController::class, 'update'])
->name(config('admin.routes.routes.auth.routes.me.name'))
->middleware(config('admin.routes.routes.auth.routes.me.middleware'));

Route::post(config('admin.routes.routes.auth.routes.me-avatar.url'), [MeController::class, 'uploadAvatar'])
->name(config('admin.routes.routes.auth.routes.me-avatar.name'))
->middleware(config('admin.routes.routes.auth.routes.me-avatar.middleware'));

Route::delete(config('admin.routes.routes.auth.routes.me-avatar.url'), [MeController::class, 'deleteAvatar'])
->name(config('admin.routes.routes.auth.routes.me-avatar.name'))
->middleware(config('admin.routes.routes.auth.routes.me-avatar.middleware'));
});

Route::prefix(config('admin.routes.routes.settings.url'))
->name(config('admin.routes.routes.settings.name') . '.')
->middleware(config('admin.routes.routes.settings.middleware'))
->group(function () {
Route::get(config('admin.routes.routes.settings.routes.settings.url'), [SettingsController::class, 'index'])
->name(config('admin.routes.routes.settings.routes.settings.name'))
->middleware(config('admin.routes.routes.settings.routes.settings.middleware'));

Route::put(config('admin.routes.routes.settings.routes.settings.url'), [SettingsController::class, 'update'])
->name(config('admin.routes.routes.settings.routes.settings.name'))
->middleware(config('admin.routes.routes.settings.routes.settings.middleware'));

Route::delete(config('admin.routes.routes.settings.routes.socials-delete.url'), [SettingsController::class, 'deleteSocial'])
->name(config('admin.routes.routes.settings.routes.socials-delete.name'))
->middleware(config('admin.routes.routes.settings.routes.socials-delete.middleware'));

Route::delete(config('admin.routes.routes.settings.routes.languages-delete.url'), [SettingsController::class, 'deleteLanguage'])
->name(config('admin.routes.routes.settings.routes.languages-delete.name'))
->middleware(config('admin.routes.routes.settings.routes.languages-delete.middleware'));
});

Route::prefix(config('admin.routes.routes.builder.url'))
->name(config('admin.routes.routes.builder.name') . '.')
->middleware(config('admin.routes.routes.builder.middleware'))
->group(function () {
Route::get(config('admin.routes.routes.builder.routes.pages.url'), [PageController::class, 'build'])
->name(config('admin.routes.routes.builder.routes.pages.name'))
->middleware(config('admin.routes.routes.builder.routes.pages.middleware'));

Route::get(config('admin.routes.routes.builder.routes.widgets.url'), [WidgetController::class, 'build'])
->name(config('admin.routes.routes.builder.routes.widgets.name'))
->middleware(config('admin.routes.routes.builder.routes.widgets.middleware'));

Route::post(config('admin.routes.routes.builder.routes.actions.url'), [ActionController::class, 'call'])
->name(config('admin.routes.routes.builder.routes.actions.name'))
->middleware(config('admin.routes.routes.builder.routes.actions.middleware'));
});
});
6 changes: 5 additions & 1 deletion src/Actions/Concerns/CanHandleAction.php
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@

trait CanHandleAction
{

protected ?\Closure $handleMethod = null;

public function handle(\Closure $method): static
Expand All @@ -14,6 +13,11 @@ public function handle(\Closure $method): static
return $this;
}

public function hasHandle()
{
return $this->handleMethod ? true : false;
}

public function getHandleMethod(): ?\Closure
{
return $this->handleMethod;
Expand Down
2 changes: 1 addition & 1 deletion src/AdminManager.php
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ public function authUserModel(): string

public function prefix(): string
{
return config('admin.prefix');
return Str::of(config('admin.routes.url'))->ltrim('/')->value();
}

public function loginPage(): ?Page
Expand Down
23 changes: 23 additions & 0 deletions src/Exceptions/ActionNotFoundException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Bengr\Admin\Exceptions;

use Bengr\Admin\Facades\Admin as BengrAdmin;

use function Bengr\Support\response;

class ActionNotFoundException extends \Exception
{
public function render($request)
{
$dashboard = BengrAdmin::dashboardPage();

return response()->json([
'message' => 'Action not found',
'redirect' => $dashboard ? [
'url' => $dashboard->getRouteUrl(),
'name' => $dashboard->getRouteName()
] : null
])->status(404);
}
}
23 changes: 23 additions & 0 deletions src/Exceptions/WidgetNotFoundException.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<?php

namespace Bengr\Admin\Exceptions;

use Bengr\Admin\Facades\Admin as BengrAdmin;

use function Bengr\Support\response;

class WidgetNotFoundException extends \Exception
{
public function render($request)
{
$dashboard = BengrAdmin::dashboardPage();

return response()->json([
'message' => 'Widget not found',
'redirect' => $dashboard ? [
'url' => $dashboard->getRouteUrl(),
'name' => $dashboard->getRouteName()
] : null
])->status(404);
}
}
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
<?php

namespace Bengr\Admin\Http\Controllers;
namespace Bengr\Admin\Http\Controllers\Auth;

use Bengr\Admin\Facades\Admin as BengrAdmin;
use Bengr\Admin\Http\Requests\LoginRequest;
use Bengr\Admin\Http\Controllers\Controller;
use Bengr\Admin\Http\Requests\Auth\LoginRequest;
use Bengr\Auth\NewToken;
use Illuminate\Http\Request;
use Illuminate\Support\Str;
Expand All @@ -23,6 +24,7 @@ class AuthController extends Controller
*/
public function login(LoginRequest $request)
{
/** @var AdminUser $admin */
$admin = $request->authenticate();
$token = $admin->createToken('bengr-admin-token');

Expand Down
Loading

0 comments on commit be0f58b

Please sign in to comment.