- Added standard Laravel directory structure and configuration. - Included Svelte and Tailwind configuration for the admin interface. - Added core PHPUnit and testing scripts.
219 lines
17 KiB
PHP
219 lines
17 KiB
PHP
<?php
|
|
|
|
use Illuminate\Support\Facades\Route;
|
|
use App\Http\Controllers\Auth\LoginFormController;
|
|
use App\Http\Controllers\Auth\LoginActionController;
|
|
use App\Http\Controllers\Auth\LogoutController;
|
|
use App\Http\Controllers\Auth\TwoFactorFormController;
|
|
use App\Http\Controllers\Auth\TwoFactorActionController;
|
|
use App\Http\Controllers\Admin\Profile\ProfileEditController;
|
|
use App\Http\Controllers\Admin\Profile\ProfileUpdateController;
|
|
use App\Http\Controllers\Admin\Pages\PageListController;
|
|
use App\Http\Controllers\Admin\Pages\PageCreateController;
|
|
use App\Http\Controllers\Admin\Pages\PageStoreController;
|
|
use App\Http\Controllers\Admin\Pages\PageEditController;
|
|
use App\Http\Controllers\Admin\Pages\PageUpdateController;
|
|
use App\Http\Controllers\Admin\Pages\PageDestroyController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeListController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeActivateController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeUploadController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeEditorIndexController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeEditorFileTreeController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeEditorFileReadController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeEditorFileSaveController;
|
|
use App\Http\Controllers\Admin\Themes\ThemeEditorFileCreateController;
|
|
use App\Http\Controllers\Admin\Users\UserIndexController;
|
|
use App\Http\Controllers\Admin\Users\UserCreateController;
|
|
use App\Http\Controllers\Admin\Users\UserStoreController;
|
|
use App\Http\Controllers\Admin\Users\UserEditController;
|
|
use App\Http\Controllers\Admin\Users\UserUpdateController;
|
|
use App\Http\Controllers\Admin\Users\UserDestroyController;
|
|
use App\Http\Controllers\Admin\Roles\RoleIndexController;
|
|
use App\Http\Controllers\Admin\Roles\RoleStoreController;
|
|
use App\Http\Controllers\Admin\Roles\RoleUpdateController;
|
|
use App\Http\Controllers\Admin\Roles\RoleDestroyController;
|
|
use App\Http\Controllers\Admin\Roles\RolePermissionUpdateController;
|
|
use App\Http\Controllers\Admin\Media\MediaIndexController;
|
|
use App\Http\Controllers\Admin\Media\MediaUploadController;
|
|
use App\Http\Controllers\Admin\Media\MediaUpdateController;
|
|
use App\Http\Controllers\Admin\Media\MediaDestroyController;
|
|
use App\Http\Controllers\Admin\Content\CustomPostTypeIndexController;
|
|
use App\Http\Controllers\Admin\Content\CustomPostTypeCreateController;
|
|
use App\Http\Controllers\Admin\Content\CustomPostTypeStoreController;
|
|
use App\Http\Controllers\Admin\Content\CustomPostTypeEditController;
|
|
use App\Http\Controllers\Admin\Content\CustomPostTypeUpdateController;
|
|
use App\Http\Controllers\Admin\Content\CustomPostTypeDestroyController;
|
|
use App\Http\Controllers\Admin\Content\CustomFieldStoreController;
|
|
use App\Http\Controllers\Admin\Content\CustomFieldUpdateController;
|
|
use App\Http\Controllers\Admin\Content\CustomFieldDestroyController;
|
|
use App\Http\Controllers\Admin\Content\CustomFieldReorderController;
|
|
use App\Http\Controllers\Admin\Posts\PostIndexController;
|
|
use App\Http\Controllers\Admin\Posts\PostCreateController;
|
|
use App\Http\Controllers\Admin\Posts\PostStoreController;
|
|
use App\Http\Controllers\Admin\Posts\PostEditController;
|
|
use App\Http\Controllers\Admin\Posts\PostUpdateController;
|
|
use App\Http\Controllers\Admin\Posts\PostDestroyController;
|
|
use App\Http\Controllers\Admin\Forms\FormIndexController;
|
|
use App\Http\Controllers\Admin\Forms\FormCreateController;
|
|
use App\Http\Controllers\Admin\Forms\FormStoreController;
|
|
use App\Http\Controllers\Admin\Forms\FormEditController;
|
|
use App\Http\Controllers\Admin\Forms\FormUpdateController;
|
|
use App\Http\Controllers\Admin\Forms\FormDestroyController;
|
|
use App\Http\Controllers\Admin\Forms\FormSubmissionIndexController;
|
|
use App\Http\Controllers\Admin\Forms\FormSubmissionShowController;
|
|
use App\Http\Controllers\Admin\Forms\FormSubmissionDestroyController;
|
|
use App\Http\Controllers\Admin\Analytics\AnalyticsIndexController;
|
|
use App\Http\Controllers\Admin\Navigation\NavigationIndexController;
|
|
use App\Http\Controllers\Admin\Navigation\NavigationStoreController;
|
|
use App\Http\Controllers\Admin\Navigation\NavigationReorderController;
|
|
use App\Http\Controllers\Admin\Navigation\NavigationDestroyController;
|
|
use App\Http\Controllers\Public\PageDisplayController;
|
|
use App\Http\Controllers\Public\FormSubmitController;
|
|
|
|
// Admin Route Group
|
|
Route::prefix(config('cms.admin_path', 'loom'))->group(function () {
|
|
// Auth Routes
|
|
Route::get('/login', LoginFormController::class)->name('login');
|
|
Route::post('/login', LoginActionController::class);
|
|
Route::get('/two-factor', TwoFactorFormController::class)->name('two-factor.login');
|
|
Route::post('/two-factor', TwoFactorActionController::class);
|
|
Route::post('/logout', LogoutController::class)->name('logout');
|
|
|
|
// Protected Admin Routes
|
|
Route::middleware(['sw.auth:can:view-themes,can:view-pages,can:view-media,can:view-users,can:view-roles,can:manage-backups,can:manage-settings'])->group(function () {
|
|
Route::get('/', function () {
|
|
return view('admin.dashboard');
|
|
})->name('admin.dashboard');
|
|
|
|
// Profile Management
|
|
Route::get('/profile', ProfileEditController::class)->name('admin.profile.edit');
|
|
Route::put('/profile', ProfileUpdateController::class)->name('admin.profile.update');
|
|
|
|
// Page Management
|
|
Route::get('/pages', PageListController::class)->name('admin.pages.index')->middleware('sw.auth:can:view-pages');
|
|
Route::get('/pages/create', PageCreateController::class)->name('admin.pages.create')->middleware('sw.auth:can:create-pages');
|
|
Route::post('/pages', PageStoreController::class)->name('admin.pages.store')->middleware('sw.auth:can:create-pages');
|
|
Route::get('/pages/{page}/edit', PageEditController::class)->name('admin.pages.edit')->middleware('sw.auth:can:edit-pages');
|
|
Route::put('/pages/{page}', PageUpdateController::class)->name('admin.pages.update')->middleware('sw.auth:can:edit-pages');
|
|
Route::delete('/pages/{page}', PageDestroyController::class)->name('admin.pages.destroy')->middleware('sw.auth:can:delete-pages');
|
|
|
|
// Theme Management
|
|
Route::get('/themes', ThemeListController::class)->name('admin.themes.index')->middleware('sw.auth:can:view-themes');
|
|
Route::post('/themes/activate', ThemeActivateController::class)->name('admin.themes.activate')->middleware('sw.auth:can:activate-themes');
|
|
Route::post('/themes/upload', ThemeUploadController::class)->name('admin.themes.upload')->middleware('sw.auth:can:upload-themes');
|
|
Route::get('/themes/editor', ThemeEditorIndexController::class)->name('admin.themes.editor.index')->middleware('sw.auth:can:edit-themes');
|
|
Route::get('/themes/editor/tree', ThemeEditorFileTreeController::class)->name('admin.themes.editor.tree')->middleware('sw.auth:can:edit-themes');
|
|
Route::get('/themes/editor/read', ThemeEditorFileReadController::class)->name('admin.themes.editor.read')->middleware('sw.auth:can:edit-themes');
|
|
Route::post('/themes/editor/save', ThemeEditorFileSaveController::class)->name('admin.themes.editor.save')->middleware('sw.auth:can:edit-themes');
|
|
Route::post('/themes/editor/create', ThemeEditorFileCreateController::class)->name('admin.themes.editor.create')->middleware('sw.auth:can:edit-themes');
|
|
|
|
// User Management
|
|
Route::get('/users', UserIndexController::class)->name('admin.users.index')->middleware('sw.auth:can:view-users');
|
|
Route::get('/users/create', UserCreateController::class)->name('admin.users.create')->middleware('sw.auth:can:create-users');
|
|
Route::post('/users', UserStoreController::class)->name('admin.users.store')->middleware('sw.auth:can:create-users');
|
|
Route::get('/users/{user}/edit', UserEditController::class)->name('admin.users.edit')->middleware('sw.auth:can:edit-users');
|
|
Route::put('/users/{user}', UserUpdateController::class)->name('admin.users.update')->middleware('sw.auth:can:edit-users');
|
|
Route::delete('/users/{user}', UserDestroyController::class)->name('admin.users.destroy')->middleware('sw.auth:can:delete-users');
|
|
|
|
// Role & Permission Management
|
|
Route::get('/roles', RoleIndexController::class)->name('admin.roles.index')->middleware('sw.auth:can:view-roles');
|
|
Route::post('/roles', RoleStoreController::class)->name('admin.roles.store')->middleware('sw.auth:can:create-roles');
|
|
Route::put('/roles/{role}', RoleUpdateController::class)->name('admin.roles.update')->middleware('sw.auth:can:edit-roles');
|
|
Route::delete('/roles/{role}', RoleDestroyController::class)->name('admin.roles.destroy')->middleware('sw.auth:can:delete-roles');
|
|
Route::post('/roles/{role}/permissions', RolePermissionUpdateController::class)->name('admin.roles.permissions.update')->middleware('sw.auth:can:assign-permissions');
|
|
|
|
// Media Management
|
|
Route::get('/media', MediaIndexController::class)->name('admin.media.index')->middleware('sw.auth:can:view-media');
|
|
Route::post('/media/upload', MediaUploadController::class)->name('admin.media.upload')->middleware('sw.auth:can:upload-media');
|
|
Route::put('/media', MediaUpdateController::class)->name('admin.media.update')->middleware('sw.auth:can:edit-media');
|
|
Route::delete('/media', MediaDestroyController::class)->name('admin.media.destroy')->middleware('sw.auth:can:delete-media');
|
|
|
|
// Backups
|
|
Route::get('/backups', \App\Http\Controllers\Admin\Backups\BackupIndexController::class)->name('admin.backups.index')->middleware('sw.auth:can:manage-backups');
|
|
Route::post('/backups', \App\Http\Controllers\Admin\Backups\BackupStoreController::class)->name('admin.backups.store')->middleware('sw.auth:can:manage-backups');
|
|
Route::post('/backups/restore', \App\Http\Controllers\Admin\Backups\BackupRestoreController::class)->name('admin.backups.restore')->middleware('sw.auth:can:manage-backups');
|
|
Route::get('/backups/restore/progress', function(\App\Services\BackupService $service) {
|
|
return response()->json($service->getProgress());
|
|
})->name('admin.backups.restore.progress')->middleware('sw.auth:can:manage-backups');
|
|
Route::post('/backups/upload', \App\Http\Controllers\Admin\Backups\BackupUploadController::class)->name('admin.backups.upload')->middleware('sw.auth:can:manage-backups');
|
|
Route::get('/backups/download', \App\Http\Controllers\Admin\Backups\BackupDownloadController::class)->name('admin.backups.download')->middleware('sw.auth:can:manage-backups');
|
|
|
|
// Custom Post Types
|
|
Route::prefix('custom-post-types')->group(function () {
|
|
Route::get('/', CustomPostTypeIndexController::class)->name('admin.custom-post-types.index')->middleware('sw.auth:can:view-cpt');
|
|
Route::get('/create', CustomPostTypeCreateController::class)->name('admin.custom-post-types.create')->middleware('sw.auth:can:create-cpt');
|
|
Route::post('/', CustomPostTypeStoreController::class)->name('admin.custom-post-types.store')->middleware('sw.auth:can:create-cpt');
|
|
Route::get('/{custom_post_type}/edit', CustomPostTypeEditController::class)->name('admin.custom-post-types.edit')->middleware('sw.auth:can:edit-cpt');
|
|
Route::put('/{custom_post_type}', CustomPostTypeUpdateController::class)->name('admin.custom-post-types.update')->middleware('sw.auth:can:edit-cpt');
|
|
Route::delete('/{custom_post_type}', CustomPostTypeDestroyController::class)->name('admin.custom-post-types.destroy')->middleware('sw.auth:can:delete-cpt');
|
|
});
|
|
Route::post('custom-post-types/{custom_post_type}/fields', CustomFieldStoreController::class)->name('admin.custom-fields.store')->middleware('sw.auth:can:edit-cpt');
|
|
Route::put('custom-post-types/{custom_post_type}/fields/{custom_field}', CustomFieldUpdateController::class)->name('admin.custom-fields.update')->middleware('sw.auth:can:edit-cpt');
|
|
Route::delete('custom-post-types/{custom_post_type}/fields/{custom_field}', CustomFieldDestroyController::class)->name('admin.custom-fields.destroy')->middleware('sw.auth:can:edit-cpt');
|
|
Route::post('custom-post-types/{custom_post_type}/fields/reorder', CustomFieldReorderController::class)->name('admin.custom-fields.reorder')->middleware('sw.auth:can:edit-cpt');
|
|
|
|
// CPT Posts (Dynamic routes based on CPT slug)
|
|
Route::prefix('content/{custom_post_type:slug}')->group(function () {
|
|
Route::get('/', PostIndexController::class)->name('admin.posts.index')->middleware('sw.auth:can:view-posts');
|
|
Route::get('/create', PostCreateController::class)->name('admin.posts.create')->middleware('sw.auth:can:create-posts');
|
|
Route::post('/', PostStoreController::class)->name('admin.posts.store')->middleware('sw.auth:can:create-posts');
|
|
Route::get('/{post}/edit', PostEditController::class)->name('admin.posts.edit')->middleware('sw.auth:can:edit-posts');
|
|
Route::put('/{post}', PostUpdateController::class)->name('admin.posts.update')->middleware('sw.auth:can:edit-posts');
|
|
Route::delete('/{post}', PostDestroyController::class)->name('admin.posts.destroy')->middleware('sw.auth:can:delete-posts');
|
|
});
|
|
|
|
// Form Builder
|
|
Route::prefix('forms')->group(function () {
|
|
Route::get('/', FormIndexController::class)->name('admin.forms.index')->middleware('sw.auth:can:view-forms');
|
|
Route::get('/create', FormCreateController::class)->name('admin.forms.create')->middleware('sw.auth:can:create-forms');
|
|
Route::post('/', FormStoreController::class)->name('admin.forms.store')->middleware('sw.auth:can:create-forms');
|
|
Route::get('/{form}/edit', FormEditController::class)->name('admin.forms.edit')->middleware('sw.auth:can:edit-forms');
|
|
Route::put('/{form}', FormUpdateController::class)->name('admin.forms.update')->middleware('sw.auth:can:edit-forms');
|
|
Route::delete('/{form}', FormDestroyController::class)->name('admin.forms.destroy')->middleware('sw.auth:can:delete-forms');
|
|
});
|
|
Route::get('forms/{form}/submissions', FormSubmissionIndexController::class)->name('admin.forms.submissions.index')->middleware('sw.auth:can:view-submissions');
|
|
Route::get('forms/{form}/submissions/{submission}', FormSubmissionShowController::class)->name('admin.forms.submissions.show')->middleware('sw.auth:can:view-submissions');
|
|
Route::delete('forms/{form}/submissions/{submission}', FormSubmissionDestroyController::class)->name('admin.forms.submissions.destroy')->middleware('sw.auth:can:view-submissions');
|
|
|
|
// Analytics
|
|
Route::get('/analytics', AnalyticsIndexController::class)->name('admin.analytics.index')->middleware('sw.auth:can:view-analytics');
|
|
|
|
// Navigation
|
|
Route::get('/navigation', NavigationIndexController::class)->name('admin.navigation.index')->middleware('sw.auth:can:manage-navigation');
|
|
Route::post('/navigation', NavigationStoreController::class)->name('admin.navigation.store')->middleware('sw.auth:can:manage-navigation');
|
|
Route::post('/navigation/reorder', NavigationReorderController::class)->name('admin.navigation.reorder')->middleware('sw.auth:can:manage-navigation');
|
|
Route::delete('/navigation/{navigation}', NavigationDestroyController::class)->name('admin.navigation.destroy')->middleware('sw.auth:can:manage-navigation');
|
|
|
|
// Settings
|
|
Route::get('/settings', App\Http\Controllers\Admin\Settings\SettingIndexController::class)->name('admin.settings.index')->middleware('sw.auth:can:manage-settings');
|
|
Route::post('/settings', App\Http\Controllers\Admin\Settings\SettingUpdateController::class)->name('admin.settings.update')->middleware('sw.auth:can:update-settings');
|
|
});
|
|
// Translations
|
|
Route::group(['middleware' => 'sw.auth:can:manage-translations'], function () {
|
|
Route::get('/translations', [App\Http\Controllers\Admin\Translations\TranslationController::class, 'index'])->name('admin.translations.index');
|
|
Route::post('/translations', [App\Http\Controllers\Admin\Translations\TranslationController::class, 'update'])->name('admin.translations.update');
|
|
Route::post('/translations/sync', [App\Http\Controllers\Admin\Translations\TranslationController::class, 'sync'])->name('admin.translations.sync');
|
|
Route::post('/translate', \App\Http\Controllers\Admin\Translations\TranslationActionController::class)->name('admin.translate');
|
|
});
|
|
});
|
|
|
|
// Media JIT Route
|
|
Route::get('/media/{path}', \App\Http\Controllers\MediaController::class)
|
|
->where('path', '.*')
|
|
->name('media.jit');
|
|
|
|
// Theme Asset Route
|
|
Route::get('/themes/{theme}/{path}', \App\Http\Controllers\ThemeAssetController::class)
|
|
->where('path', '.*')
|
|
->name('theme.asset');
|
|
|
|
// Public Routes with optional locale prefix
|
|
Route::get('/', PageDisplayController::class)->name('home');
|
|
Route::prefix('{locale}')->where(['locale' => '[a-z]{2}'])->group(function () {
|
|
Route::get('/', PageDisplayController::class);
|
|
Route::get('/{slug}', PageDisplayController::class)->name('page.show.localized')->where('slug', '.*');
|
|
});
|
|
Route::get('/{slug}', PageDisplayController::class)->name('page.show')->where('slug', '.*');
|
|
|
|
Route::post('/forms/{form:slug}/submit', FormSubmitController::class)->name('forms.submit');
|