b2in/routes/web.php

211 lines
7.5 KiB
PHP
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
use App\Livewire\Cabinet\QuickStatus;
use App\Models\CmsProject;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
use Livewire\Volt\Volt;
// Gemeinsame Web-Routes für alle Pages)
// Jede Landing-Page hat das gleiche Gerüst, aber unterschiedliches Styling
// Hauptseite - lädt automatisch das richtige Theme basierend auf der Domain
Route::get('/', function () {
$theme = config('app.theme', 'b2in');
// Use theme-specific view if it exists (e.g., web.b2a, web.stileigentum)
// The view name for b2in theme is 'web.b2in' and not 'web.home'
if ($theme === 'b2in') {
return view('web.home');
}
if (view()->exists('web.'.$theme)) {
return view('web.'.$theme);
}
// Fallback to the default home view
return view('web.home');
})->name('home');
// Willkommensseite
Route::get('/welcome', function () {
return view('web.welcome');
})->name('welcome');
// Weitere gemeinsame Webseiten hier...
Route::get('/about', function () {
return view('web.about');
})->name('about');
Route::get('/ecosystem', function () {
return redirect('/partner', 301);
})->name('ecosystem');
$loadAziziContent = fn (): array => json_decode(
file_get_contents(resource_path('lang/de/immobilien-azizi.json')),
true,
512,
JSON_THROW_ON_ERROR,
);
$isAziziSourcePreview = function (Request $request): bool {
if (! $request->query->has('dev')) {
return false;
}
return ! in_array(strtolower((string) $request->query('dev')), ['0', 'false', 'off', 'no'], true);
};
Route::get('/immobilien', function (Request $request) use ($isAziziSourcePreview, $loadAziziContent) {
$content = $loadAziziContent();
$dev = $isAziziSourcePreview($request);
$devQuery = $dev;
$overviewRouteName = 'immobilien';
$detailRouteName = 'immobilien.show';
return view('web.dev.immobilien-azizi', compact('content', 'dev', 'devQuery', 'overviewRouteName', 'detailRouteName'));
})->name('immobilien');
Route::get('/immobilien/{slug}', function (Request $request, string $slug) use ($isAziziSourcePreview, $loadAziziContent) {
$content = $loadAziziContent();
$dev = $isAziziSourcePreview($request);
$devQuery = $dev;
$overviewRouteName = 'immobilien';
$project = collect($content['projects'] ?? [])->firstWhere('slug', $slug);
abort_unless($project, 404);
return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName'));
})->name('immobilien.show');
Route::get('/netzwerk', function () {
return view('web.netzwerk');
})->name('netzwerk');
Route::get('/interior', function () {
return redirect('/netzwerk', 301);
})->name('interior');
/*Route::get('/immobilien/{slug}', function (string $slug) {
$cmsProject = CmsProject::query()->published()->where('slug', $slug)->first();
if ($cmsProject) {
$project = $cmsProject->toFrontendArray();
return view('web.immobilien-show', compact('project'));
}
$theme = config('app.theme', 'b2in');
$immobilienProjects = cms_theme_section('immobilien_projects', $theme);
$project = is_array($immobilienProjects) ? data_get($immobilienProjects, "projects.{$slug}") : null;
abort_unless($project, 404);
return view('web.immobilien-show', compact('project'));
})->name('immobilien.show');
*/
Route::get('/partner', function () {
return redirect('/netzwerk', 301);
})->name('partner');
Route::get('/magazin', function () {
return view('web.magazin');
})->name('magazin');
Route::get('/magazin/{id}', function ($id) {
return view('web.magazin-detail', compact('id'));
})->name('magazin.detail');
Route::get('/contact', function () {
return view('web.contact');
})->name('contact');
Route::get('/service', function () {
return view('web.service');
})->name('service');
Route::get('/portfolio', function () {
return view('web.portfolio');
})->name('portfolio');
Route::get('/faq', function () {
return view('web.faq');
})->name('faq');
// Rechtliche Seiten
Route::get('/impressum', function () {
return view('web.impressum');
})->name('impressum');
Route::get('/privacy', function () {
return view('web.privacy');
})->name('privacy');
Route::get('/terms', function () {
return view('web.terms');
})->name('terms');
Route::get('/cookie-policy', function () {
return view('web.cookie-policy');
})->name('cookie-policy');
// Theme Demo Route
Route::get('/theme-demo', function () {
return view('web.theme-demo');
})->name('theme-demo');
// Dev: Sitemap & Archiv-Versionen
Route::prefix('dev')->group(function () use ($loadAziziContent) {
Route::get('/sitemap', fn () => view('web.dev.sitemap'))->name('dev.sitemap');
Route::get('/immobilien-v1', fn () => view('web.dev.immobilien-v1'))->name('dev.immobilien-v1');
Route::get('/immobilien-azizi', function () use ($loadAziziContent) {
$content = $loadAziziContent();
$dev = true;
$devQuery = false;
$overviewRouteName = 'dev.immobilien-azizi';
$detailRouteName = 'dev.immobilien-azizi.show';
return view('web.dev.immobilien-azizi', compact('content', 'dev', 'devQuery', 'overviewRouteName', 'detailRouteName'));
})->name('dev.immobilien-azizi');
Route::get('/immobilien-azizi/{slug}', function (string $slug) use ($loadAziziContent) {
$content = $loadAziziContent();
$project = collect($content['projects'] ?? [])->firstWhere('slug', $slug);
abort_unless($project, 404);
$dev = true;
$devQuery = false;
$overviewRouteName = 'dev.immobilien-azizi';
return view('web.dev.immobilien-azizi-show', compact('content', 'project', 'dev', 'devQuery', 'overviewRouteName'));
})->name('dev.immobilien-azizi.show');
Route::get('/interior-v1', fn () => view('web.dev.interior-v1'))->name('dev.interior-v1');
Route::get('/partner-v1', fn () => view('web.dev.partner-v1'))->name('dev.partner-v1');
});
// Pfad-basierte Theme-Routen für lokale Entwicklung wurden entfernt
// Die Themensauswahl wird nun über den ThemeServiceProvider gesteuert (Domain oder ?theme=... GET-Parameter)
Route::get('/partner/invitation/expired/{token}', function (string $token) {
$invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail();
return view('partner.invitation-expired', compact('invitation'));
})->name('partner.invitation.expired');
Route::get('/partner/invitation/used/{token}', function (string $token) {
$invitation = \App\Models\PartnerInvitation::with('role')->where('token', $token)->firstOrFail();
return view('partner.invitation-used', compact('invitation'));
})->name('partner.invitation.used');
Volt::route('/partner/invitation/{token}', 'partner.invitation-accept')
->name('partner.invitation.accept');
Volt::route('/partner/create-account', 'partner.create-account')
->name('partner.create.account');
// Öffentliche Registrierung per QR-/Code (Landing, code-check)
Volt::route('/reg/{role}', 'reg.landing')
->name('registration.landing');
Volt::route('/registration/thank-you', 'reg.thank-you')
->name('registration.thank-you');
// Partner Setup Wizard & Daten
Route::middleware('auth')->group(function () {
Volt::route('/partner/setup', 'partner.setup-wizard')
->name('partner.setup.wizard');
});
// Cabinet Quick-Status key-geschützte Mini-App für schnellen Statuswechsel
Route::get('/info/status', QuickStatus::class)->name('cabinet.quick-status');
// Authentifizierungs-Routen werden in domains.php eingebunden
// require __DIR__ . '/auth.php';