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');