diff --git a/app/Http/Controllers/LegacyInvoicePdfController.php b/app/Http/Controllers/LegacyInvoicePdfController.php index 68e1f268..93f1b351 100644 --- a/app/Http/Controllers/LegacyInvoicePdfController.php +++ b/app/Http/Controllers/LegacyInvoicePdfController.php @@ -5,7 +5,6 @@ namespace App\Http\Controllers; use App\Models\LegacyInvoice; use App\Services\Billing\LegacyInvoicePdfRenderer; use Illuminate\Support\Facades\Gate; -use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Storage; use Symfony\Component\HttpFoundation\Response; @@ -23,9 +22,7 @@ class LegacyInvoicePdfController extends Controller ]); } - if (Schema::hasColumn('legacy_invoices', 'pdf_generated_at')) { - $legacyInvoice->forceFill(['pdf_generated_at' => now()])->save(); - } + $legacyInvoice->forceFill(['pdf_generated_at' => now()])->save(); return $renderer->inlineResponse($legacyInvoice); } diff --git a/app/Http/Middleware/EnsureUserIsAdmin.php b/app/Http/Middleware/EnsureUserIsAdmin.php index 1233c1ee..813e4ece 100644 --- a/app/Http/Middleware/EnsureUserIsAdmin.php +++ b/app/Http/Middleware/EnsureUserIsAdmin.php @@ -13,10 +13,6 @@ class EnsureUserIsAdmin { $user = $request->user(); - if ($user !== null && $user->is_active && ! $user->is_super_admin) { - $user->loadMissing('roles'); - } - if (app(UserImpersonation::class)->isActive()) { if ($request->isMethod('GET') || $request->isMethod('HEAD')) { return redirect()->route('me.dashboard'); diff --git a/dev/optimize/entwicklungsplan.md b/dev/optimize/entwicklungsplan.md index 8a0328c1..8d48de2c 100644 --- a/dev/optimize/entwicklungsplan.md +++ b/dev/optimize/entwicklungsplan.md @@ -30,9 +30,9 @@ Latente Fehlerquellen und Sicherheitslücken. Klein, aber wichtig. Keine Fachlogik-Änderung. Reduziert erreichbare Demo-Komponenten und Altlasten. -- [ ] **1.1 Prototyp `admin/users/table` entfernen** — Route in `routes/admin.php` + `resources/views/livewire/admin/users/table.blade.php`. Filtert auf nicht existentes `users.status`, liest `$user->role` (statt Spatie), englische Demo-Menüs → kann SQL-Fehler/falsche UI erzeugen. Test für entfernte Route anpassen/ergänzen. -- [ ] **1.2 Tote Admin-Wrapper-Views prüfen & entfernen** — `resources/views/admin/*` werden außer `admin.dashboard` (via `DashboardController`) nicht produktiv gerendert. Wrapper mit alten Parametern (`request()->route('pressRelease')` vs. aktuelle `{id}`-Route) entfernen oder klar als Legacy markieren. `admin.dashboard` behalten. -- [ ] **1.3 Tote Helfer entfernen** — `EnsureUserIsAdmin:16-18` totes `loadMissing('roles')`; `statusColor` aus `with()` (admin/edit:558-564, admin/show:111-117) prüfen/entfernen; `LegacyInvoicePdfController:26` Laufzeit-`Schema::hasColumn` nach Migration entfernen. +- [x] **1.1 Prototyp `admin/users/table` entfernt** — Route aus `routes/admin.php` (war ohnehin durch `admin/users/{id}` unerreichbar) + `resources/views/livewire/admin/users/table.blade.php` gelöscht; Eintrag aus `routes/ADMIN_ROUTES.md` entfernt. Regressions-Test in `PanelConsolidationTest` (`Route::has('admin.users.table')` ist false). +- [x] **1.2 Tote Admin-Wrapper-Views entfernt** — verifiziert: kein `view()`/`@include`/`@extends`/`@livewire` rendert `resources/views/admin/*` außer `admin.dashboard` (via `DashboardController`); Wrapper nutzten alte Route-Parameter (`request()->route('company')`). 16 tote Wrapper-Blades gelöscht; `dashboard.blade.php` + die `.md`-Doku behalten. +- [x] **1.3 Tote Helfer entfernt** — `EnsureUserIsAdmin` redundantes `loadMissing('roles')` (Spatie `hasAnyRole()` lädt ohnehin); `statusColor`-Key aus `with()` in admin `edit`/`show` (Blade nutzt nur lokales `$statusClass`); `LegacyInvoicePdfController` Laufzeit-`Schema::hasColumn` (Spalte existiert seit Migration 2026_05_04) + unbenutzter `Schema`-Import. --- diff --git a/resources/views/admin/categories/index.blade.php b/resources/views/admin/categories/index.blade.php deleted file mode 100644 index b909bb6a..00000000 --- a/resources/views/admin/categories/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Kategorien') }} - - @livewire('admin.categories.index') - - diff --git a/resources/views/admin/companies/create.blade.php b/resources/views/admin/companies/create.blade.php deleted file mode 100644 index 7f2b8cc3..00000000 --- a/resources/views/admin/companies/create.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - {{ __('Neue Firma') }} - - @livewire('admin.companies.create') -
-
diff --git a/resources/views/admin/companies/edit.blade.php b/resources/views/admin/companies/edit.blade.php deleted file mode 100644 index a53344ba..00000000 --- a/resources/views/admin/companies/edit.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - {{ __('Firma bearbeiten') }} - - @livewire('admin.companies.edit', ['companyId' => request()->route('company')]) -
-
diff --git a/resources/views/admin/companies/index.blade.php b/resources/views/admin/companies/index.blade.php deleted file mode 100644 index a30af7e6..00000000 --- a/resources/views/admin/companies/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Firmen') }} - - @livewire('admin.companies.index') - - diff --git a/resources/views/admin/companies/show.blade.php b/resources/views/admin/companies/show.blade.php deleted file mode 100644 index 5fddf82b..00000000 --- a/resources/views/admin/companies/show.blade.php +++ /dev/null @@ -1,11 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - @livewire('admin.companies.show', ['companyId' => request()->route('company')]) -
-
diff --git a/resources/views/admin/contacts/index.blade.php b/resources/views/admin/contacts/index.blade.php deleted file mode 100644 index e1467289..00000000 --- a/resources/views/admin/contacts/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Kontakte') }} - - @livewire('admin.contacts.index') - - diff --git a/resources/views/admin/coupons/index.blade.php b/resources/views/admin/coupons/index.blade.php deleted file mode 100644 index 1afc4af5..00000000 --- a/resources/views/admin/coupons/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Gutscheine') }} - - @livewire('admin.coupons.index') - - diff --git a/resources/views/admin/invoices/index.blade.php b/resources/views/admin/invoices/index.blade.php deleted file mode 100644 index d9f4b71a..00000000 --- a/resources/views/admin/invoices/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Rechnungen') }} - - @livewire('admin.invoices.index') - - diff --git a/resources/views/admin/payments/index.blade.php b/resources/views/admin/payments/index.blade.php deleted file mode 100644 index 7ec653e0..00000000 --- a/resources/views/admin/payments/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Zahlungen') }} - - @livewire('admin.payments.index') - - diff --git a/resources/views/admin/press-releases/create.blade.php b/resources/views/admin/press-releases/create.blade.php deleted file mode 100644 index 6ca3454c..00000000 --- a/resources/views/admin/press-releases/create.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - {{ __('Neue Pressemitteilung') }} - - @livewire('admin.press-releases.create') -
-
diff --git a/resources/views/admin/press-releases/edit.blade.php b/resources/views/admin/press-releases/edit.blade.php deleted file mode 100644 index f9ffffc7..00000000 --- a/resources/views/admin/press-releases/edit.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - {{ __('Pressemitteilung bearbeiten') }} - - @livewire('admin.press-releases.edit', ['pressReleaseId' => request()->route('pressRelease')]) -
-
diff --git a/resources/views/admin/press-releases/index.blade.php b/resources/views/admin/press-releases/index.blade.php deleted file mode 100644 index af6b837f..00000000 --- a/resources/views/admin/press-releases/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Pressemitteilungen') }} - - @livewire('admin.press-releases.index') - - diff --git a/resources/views/admin/press-releases/show.blade.php b/resources/views/admin/press-releases/show.blade.php deleted file mode 100644 index ebc2f56e..00000000 --- a/resources/views/admin/press-releases/show.blade.php +++ /dev/null @@ -1,11 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - @livewire('admin.press-releases.show', ['pressReleaseId' => request()->route('pressRelease')]) -
-
diff --git a/resources/views/admin/roles/create.blade.php b/resources/views/admin/roles/create.blade.php deleted file mode 100644 index 61656ab6..00000000 --- a/resources/views/admin/roles/create.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - {{ __('Neue Rolle erstellen') }} - - @livewire('admin.roles.create') -
-
diff --git a/resources/views/admin/roles/edit.blade.php b/resources/views/admin/roles/edit.blade.php deleted file mode 100644 index 5920a52b..00000000 --- a/resources/views/admin/roles/edit.blade.php +++ /dev/null @@ -1,13 +0,0 @@ - - -
- - {{ __('Zurück zur Übersicht') }} - -
- - {{ __('Rolle bearbeiten') }} - - @livewire('admin.roles.edit', ['roleId' => request()->route('role')]) -
-
diff --git a/resources/views/admin/roles/index.blade.php b/resources/views/admin/roles/index.blade.php deleted file mode 100644 index d8a0f73a..00000000 --- a/resources/views/admin/roles/index.blade.php +++ /dev/null @@ -1,7 +0,0 @@ - - - {{ __('Rollen & Rechte') }} - - @livewire('admin.roles.index') - - diff --git a/resources/views/livewire/admin/press-releases/edit.blade.php b/resources/views/livewire/admin/press-releases/edit.blade.php index 1d758e40..9ccb7da8 100644 --- a/resources/views/livewire/admin/press-releases/edit.blade.php +++ b/resources/views/livewire/admin/press-releases/edit.blade.php @@ -555,13 +555,6 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] cl 'selectedCompany' => $selectedCompany, 'selectedCompanyContacts' => $selectedCompany ? $this->companyContacts((int) $selectedCompany->id) : Contact::query()->whereRaw('0 = 1')->get(), 'tagSuggestions' => $this->tagSuggestionsFor($selectedCompany), - 'statusColor' => match ($this->currentStatus) { - 'published' => 'green', - 'review' => 'yellow', - 'rejected' => 'red', - 'archived' => 'blue', - default => 'zinc', - }, ]; } diff --git a/resources/views/livewire/admin/press-releases/show.blade.php b/resources/views/livewire/admin/press-releases/show.blade.php index 86db104d..d46218cd 100644 --- a/resources/views/livewire/admin/press-releases/show.blade.php +++ b/resources/views/livewire/admin/press-releases/show.blade.php @@ -108,13 +108,6 @@ new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends 'categoryName' => $pr->category?->translations->firstWhere('locale', 'de')?->name ?? $pr->category?->translations->first()?->name ?? '–', - 'statusColor' => match ($pr->status->value) { - 'published' => 'green', - 'review' => 'yellow', - 'rejected' => 'red', - 'archived' => 'blue', - default => 'zinc', - }, ]; } }; ?> diff --git a/resources/views/livewire/admin/users/table.blade.php b/resources/views/livewire/admin/users/table.blade.php deleted file mode 100644 index bf675e84..00000000 --- a/resources/views/livewire/admin/users/table.blade.php +++ /dev/null @@ -1,146 +0,0 @@ -sortBy = 'name'; - $this->sortDirection = 'asc'; - } - - - public function sort($column) { - if ($this->sortBy === $column) { - $this->sortDirection = $this->sortDirection === 'asc' ? 'desc' : 'asc'; - } else { - $this->sortBy = $column; - $this->sortDirection = 'asc'; - } - } - - - /*public function orders() - { - return \App\Models\Order::query() - ->tap(fn ($query) => $this->sortBy ? $query->orderBy($this->sortBy, $this->sortDirection) : $query) - ->paginate(5); - }*/ - - - - // Die Hauptmethode, um Daten zu laden - #[\Livewire\Attributes\Computed] - public function users() - { - return User::query() - ->when($this->search, fn($query, $search) => - $query->where('name', 'like', '%' . $search . '%') - ->orWhere('email', 'like', '%' . $search . '%') - ) - ->when($this->statusFilter, fn($query, $status) => - $query->where('status', $status) - ) - ->when($this->roleFilter, fn($query, $role) => - $query->where('role', $role) // oder 'role_id' wenn du IDs verwendest - ) - ->orderBy($this->sortBy, $this->sortDirection) - ->paginate(10); // 10 Einträge pro Seite - } - - // Optional: Lifecycle hook für das Zurücksetzen der Paginierung bei Suche/Filterung - public function updatedSearch() { $this->resetPage(); } - public function updatedStatusFilter() { $this->resetPage(); } - public function updatedRoleFilter() { $this->resetPage(); } - - // Wird für die Paginierung mit Tailwind benötigt (Standard in Livewire 3) - // Wenn FluxUI Bootstrap-basierte Paginierung braucht, musst du das anpassen - // public function paginationView() - // { - // return 'vendor.livewire.tailwind'; // oder 'livewire::bootstrap' - // } - - // Wenn du mit Relationen arbeitest (z.B. user->role->name) - // public function with(): array - // { - // return [ - // 'users' => User::with(['role', 'group']) // Eager loading - // // ... deine Query-Logik von oben ... - // ->paginate(10), - // ]; - // } -}; ?> - - - Customer - Date - Status - Amount - - - - @foreach ($this->users as $user) - - - - - {{ $user->name }} - - - {{ $user->email }} - - - RTest - - - {{ $user->role }} - - - - - - New post - - - - Name - Date - Popularity - - - - Draft - Published - Archived - - - Delete - - - - - @endforeach - - - diff --git a/routes/ADMIN_ROUTES.md b/routes/ADMIN_ROUTES.md index 739bbe16..a242025d 100644 --- a/routes/ADMIN_ROUTES.md +++ b/routes/ADMIN_ROUTES.md @@ -53,7 +53,6 @@ - `GET /admin/users/create` → `admin.users.create` - `GET /admin/users/{id}` → `admin.users.show` - `GET /admin/users/{id}/edit` → `admin.users.edit` -- `GET /admin/users/table` → `admin.users.table` - `GET /admin/roles` → `admin.roles.index` - `GET /admin/roles/create` → `admin.roles.create` - `GET /admin/roles/{id}/edit` → `admin.roles.edit` diff --git a/routes/admin.php b/routes/admin.php index 7df5f850..e39397a3 100644 --- a/routes/admin.php +++ b/routes/admin.php @@ -81,7 +81,6 @@ Route::middleware(['auth', 'verified', EnsureUserIsAdmin::class, LogSlowAdminReq Volt::route('admin/users/create', 'admin.users.create')->name('admin.users.create'); Volt::route('admin/users/{id}', 'admin.users.show')->name('admin.users.show'); Volt::route('admin/users/{id}/edit', 'admin.users.edit')->name('admin.users.edit'); - Volt::route('admin/users/table', 'admin.users.table')->name('admin.users.table'); Volt::route('admin/roles', 'admin.roles.index')->name('admin.roles.index'); Volt::route('admin/roles/create', 'admin.roles.create')->name('admin.roles.create'); diff --git a/tests/Feature/PanelConsolidationTest.php b/tests/Feature/PanelConsolidationTest.php index f1f906fd..4a13ef3e 100644 --- a/tests/Feature/PanelConsolidationTest.php +++ b/tests/Feature/PanelConsolidationTest.php @@ -3,6 +3,7 @@ use App\Models\Plan; use App\Models\User; use Database\Seeders\RolesAndPermissionsSeeder; +use Illuminate\Support\Facades\Route; use Tests\TestCase; beforeEach(function (): void { @@ -10,6 +11,10 @@ beforeEach(function (): void { $this->seed(RolesAndPermissionsSeeder::class); }); +test('the removed admin users table prototype route no longer exists', function () { + expect(Route::has('admin.users.table'))->toBeFalse(); +}); + test('legacy customer dashboard URL redirects to me dashboard', function () { /** @var TestCase $this */ $this->get('/customer')