livewire: Volt entfernt — Komponenten als Livewire-4-Single-File-Components, Route::livewire(), Livewire::test(); livewire/volt deinstalliert
- 83 Komponenten: Livewire\Volt\Component → Livewire\Component
- 73 Routen (admin, auth, customer): Volt::route() → Route::livewire()
- 88 Testdateien: Volt::test/actingAs → Livewire::test/actingAs
- VoltServiceProvider gelöscht; composer remove livewire/volt
- config/livewire.php auf v4-Schlüssel (component_layout, component_placeholder,
component_locations, make_command: SFC ohne ⚡). Der alte Schlüssel layout war
wirkungslos; alle gerouteten Komponenten setzen ihr Layout selbst.
- CLAUDE.md, AGENTS.md, boost.json, .cursorrules, Skill volt-development
- Roadmap: erledigt; Larastan erfasst SFCs weiterhin nicht (Blade-Dateien)
Suite 2.325 grün, einer übersprungen; Larastan und Pint ohne Meldung;
route:cache und view:cache laufen.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
5782297dca
commit
2cde7284a1
186 changed files with 889 additions and 1075 deletions
|
|
@ -1,88 +0,0 @@
|
||||||
---
|
|
||||||
name: volt-development
|
|
||||||
description: "Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files."
|
|
||||||
license: MIT
|
|
||||||
metadata:
|
|
||||||
author: laravel
|
|
||||||
---
|
|
||||||
|
|
||||||
# Volt Development
|
|
||||||
|
|
||||||
## Documentation
|
|
||||||
|
|
||||||
Use `search-docs` for detailed Volt patterns and documentation.
|
|
||||||
|
|
||||||
## Basic Usage
|
|
||||||
|
|
||||||
Create components with `vendor/bin/sail artisan make:volt [name] [--test] [--pest]`.
|
|
||||||
|
|
||||||
Important: Check existing Volt components to determine if they use functional or class-based style before creating new ones.
|
|
||||||
|
|
||||||
### Functional Components
|
|
||||||
|
|
||||||
<!-- Volt Functional Component -->
|
|
||||||
```php
|
|
||||||
@@volt
|
|
||||||
<?php
|
|
||||||
use function Livewire\Volt\{state, computed};
|
|
||||||
|
|
||||||
state(['count' => 0]);
|
|
||||||
|
|
||||||
$increment = fn () => $this->count++;
|
|
||||||
$double = computed(fn () => $this->count * 2);
|
|
||||||
?>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<h1>Count: @{{ $count }} (Double: @{{ $this->double }})</h1>
|
|
||||||
<button wire:click="increment">+</button>
|
|
||||||
</div>
|
|
||||||
@@endvolt
|
|
||||||
```
|
|
||||||
|
|
||||||
### Class-Based Components
|
|
||||||
|
|
||||||
<!-- Volt Class-based Component -->
|
|
||||||
```php
|
|
||||||
use Livewire\Volt\Component;
|
|
||||||
|
|
||||||
new class extends Component {
|
|
||||||
public int $count = 0;
|
|
||||||
|
|
||||||
public function increment(): void
|
|
||||||
{
|
|
||||||
$this->count++;
|
|
||||||
}
|
|
||||||
} ?>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<h1>@{{ $count }}</h1>
|
|
||||||
<button wire:click="increment">+</button>
|
|
||||||
</div>
|
|
||||||
```
|
|
||||||
|
|
||||||
## Testing
|
|
||||||
|
|
||||||
Tests go in existing Volt test directory or `tests/Feature/Volt`:
|
|
||||||
|
|
||||||
<!-- Volt Test Example -->
|
|
||||||
```php
|
|
||||||
use Livewire\Volt\Volt;
|
|
||||||
|
|
||||||
test('counter increments', function () {
|
|
||||||
Volt::test('counter')
|
|
||||||
->assertSee('Count: 0')
|
|
||||||
->call('increment')
|
|
||||||
->assertSee('Count: 1');
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
## Verification
|
|
||||||
|
|
||||||
1. Check existing components for functional vs class-based style
|
|
||||||
2. Test component with `Volt::test()`
|
|
||||||
|
|
||||||
## Common Pitfalls
|
|
||||||
|
|
||||||
- Not checking existing style (functional vs class-based) before creating
|
|
||||||
- Forgetting `@volt` directive wrapper
|
|
||||||
- Missing `--test` or `--pest` flag when tests are needed
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
## Tech Stack & Paradigmen
|
## Tech Stack & Paradigmen
|
||||||
- **Framework:** Laravel 12 (PHP 8.4+)
|
- **Framework:** Laravel 12 (PHP 8.4+)
|
||||||
- **Frontend-Architektur:** Livewire Volt (ausschließlich Functional API).
|
- **Frontend-Architektur:** Livewire 4 Single-File-Components (klassenbasiert, `new class extends Livewire\Component`); Volt ist seit 06.10.2026 entfernt.
|
||||||
- **UI-Komponenten:** FluxUI (nutze `<flux:...>` statt Standard-Blade/HTML).
|
- **UI-Komponenten:** FluxUI (nutze `<flux:...>` statt Standard-Blade/HTML).
|
||||||
- **Styling:** Tailwind CSS (für Layout) & FluxUI (für Komponenten).
|
- **Styling:** Tailwind CSS (für Layout) & FluxUI (für Komponenten).
|
||||||
- **Backend:** Klassisches MVC für das Admin-System, Services für Business-Logik.
|
- **Backend:** Klassisches MVC für das Admin-System, Services für Business-Logik.
|
||||||
|
|
|
||||||
11
AGENTS.md
11
AGENTS.md
|
|
@ -17,7 +17,6 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
||||||
- livewire/flux (FLUXUI_FREE) - v2
|
- livewire/flux (FLUXUI_FREE) - v2
|
||||||
- livewire/flux-pro (FLUXUI_PRO) - v2
|
- livewire/flux-pro (FLUXUI_PRO) - v2
|
||||||
- livewire/livewire (LIVEWIRE) - v4
|
- livewire/livewire (LIVEWIRE) - v4
|
||||||
- livewire/volt (VOLT) - v1
|
|
||||||
- larastan/larastan (LARASTAN) - v3
|
- larastan/larastan (LARASTAN) - v3
|
||||||
- laravel/boost (BOOST) - v2
|
- laravel/boost (BOOST) - v2
|
||||||
- laravel/mcp (MCP) - v0
|
- laravel/mcp (MCP) - v0
|
||||||
|
|
@ -36,7 +35,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
||||||
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
|
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
|
||||||
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
|
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
|
||||||
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
|
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
|
||||||
- `volt-development` — Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files.
|
|
||||||
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
|
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
|
||||||
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
|
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
|
||||||
|
|
||||||
|
|
@ -199,15 +197,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
||||||
|
|
||||||
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
||||||
|
|
||||||
=== volt/core rules ===
|
|
||||||
|
|
||||||
# Livewire Volt
|
|
||||||
|
|
||||||
- Single-file Livewire components: PHP logic and Blade templates in one file.
|
|
||||||
- Always check existing Volt components to determine functional vs class-based style.
|
|
||||||
- IMPORTANT: Always use `search-docs` tool for version-specific Volt documentation and updated code examples.
|
|
||||||
- IMPORTANT: Activate `volt-development` every time you're working with a Volt or single-file component-related task.
|
|
||||||
|
|
||||||
=== pint/core rules ===
|
=== pint/core rules ===
|
||||||
|
|
||||||
# Laravel Pint Code Formatter
|
# Laravel Pint Code Formatter
|
||||||
|
|
|
||||||
15
CLAUDE.md
15
CLAUDE.md
|
|
@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||||
|
|
||||||
## Project Overview
|
## Project Overview
|
||||||
|
|
||||||
This is a multi-domain Laravel application ("Pressekonto") that supports different domains with distinct themes and styling. The application uses Laravel with Livewire, Volt, and Fortify for authentication, along with Flux UI components.
|
This is a multi-domain Laravel application ("Pressekonto") that supports different domains with distinct themes and styling. The application uses Laravel with Livewire 4 (single-file components) and Fortify for authentication, along with Flux UI components.
|
||||||
|
|
||||||
### Supported Domains
|
### Supported Domains
|
||||||
|
|
||||||
|
|
@ -85,7 +85,7 @@ The application uses a sophisticated domain-based theme system that determines s
|
||||||
- Settings components in `resources/views/livewire/settings/` (profile, password, appearance)
|
- Settings components in `resources/views/livewire/settings/` (profile, password, appearance)
|
||||||
- Admin components in `resources/views/livewire/admin/` (users management)
|
- Admin components in `resources/views/livewire/admin/` (users management)
|
||||||
- Web components in `resources/views/livewire/web/` (frontend features)
|
- Web components in `resources/views/livewire/web/` (frontend features)
|
||||||
- **Volt Components**: Single-file Livewire components using functional API for rapid development
|
- **Single-file components (Livewire 4)**: PHP class (`new class extends Livewire\Component`) and Blade template in one file under `resources/views/livewire/`; the name follows the path (`admin/users/index.blade.php` → `admin.users.index`). Full-page routes use `Route::livewire()`, tests `Livewire::test()`. Volt was removed on 06.10.2026 — do not reintroduce it.
|
||||||
- **Flux UI**: Premium UI component library for consistent design (Portal only)
|
- **Flux UI**: Premium UI component library for consistent design (Portal only)
|
||||||
- **Multi-Build System**: Separate Vite configurations for different asset bundles
|
- **Multi-Build System**: Separate Vite configurations for different asset bundles
|
||||||
|
|
||||||
|
|
@ -232,7 +232,6 @@ This application is a Laravel application and its main Laravel ecosystems packag
|
||||||
- livewire/flux (FLUXUI_FREE) - v2
|
- livewire/flux (FLUXUI_FREE) - v2
|
||||||
- livewire/flux-pro (FLUXUI_PRO) - v2
|
- livewire/flux-pro (FLUXUI_PRO) - v2
|
||||||
- livewire/livewire (LIVEWIRE) - v4
|
- livewire/livewire (LIVEWIRE) - v4
|
||||||
- livewire/volt (VOLT) - v1
|
|
||||||
- larastan/larastan (LARASTAN) - v3
|
- larastan/larastan (LARASTAN) - v3
|
||||||
- laravel/boost (BOOST) - v2
|
- laravel/boost (BOOST) - v2
|
||||||
- laravel/mcp (MCP) - v0
|
- laravel/mcp (MCP) - v0
|
||||||
|
|
@ -251,7 +250,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
||||||
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
|
- `fortify-development` — ACTIVATE when the user works on authentication in Laravel. This includes login, registration, password reset, email verification, two-factor authentication (2FA/TOTP/QR codes/recovery codes), profile updates, password confirmation, or any auth-related routes and controllers. Activate when the user mentions Fortify, auth, authentication, login, register, signup, forgot password, verify email, 2FA, or references app/Actions/Fortify/, CreateNewUser, UpdateUserProfileInformation, FortifyServiceProvider, config/fortify.php, or auth guards. Fortify is the frontend-agnostic authentication backend for Laravel that registers all auth routes and controllers. Also activate when building SPA or headless authentication, customizing login redirects, overriding response contracts like LoginResponse, or configuring login throttling. Do NOT activate for Laravel Passport (OAuth2 API tokens), Socialite (OAuth social login), or non-auth Laravel features.
|
||||||
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
|
- `laravel-best-practices` — Apply this skill whenever writing, reviewing, or refactoring Laravel PHP code. This includes creating or modifying controllers, models, migrations, form requests, policies, jobs, scheduled commands, service classes, and Eloquent queries. Triggers for N+1 and query performance issues, caching strategies, authorization and security patterns, validation, error handling, queue and job configuration, route definitions, and architectural decisions. Also use for Laravel code reviews and refactoring existing Laravel code to follow best practices. Covers any task involving Laravel backend PHP code patterns.
|
||||||
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
|
- `fluxui-development` — Use this skill for Flux UI development in Livewire applications only. Trigger when working with <flux:*> components, building or customizing Livewire component UIs, creating forms, modals, tables, or other interactive elements. Covers: flux: components (buttons, inputs, modals, forms, tables, date-pickers, kanban, badges, tooltips, etc.), component composition, Tailwind CSS styling, Heroicons/Lucide icon integration, validation patterns, responsive design, and theming. Do not use for non-Livewire frameworks or non-component styling.
|
||||||
- `volt-development` — Develops single-file Livewire components with Volt. Activates when creating Volt components, converting Livewire to Volt, working with @volt directive, functional or class-based Volt APIs; or when the user mentions Volt, single-file components, functional Livewire, or inline component logic in Blade files.
|
|
||||||
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
|
- `pest-testing` — Use this skill for Pest PHP testing in Laravel projects only. Trigger whenever any test is being written, edited, fixed, or refactored — including fixing tests that broke after a code change, adding assertions, converting PHPUnit to Pest, adding datasets, and TDD workflows. Always activate when the user asks how to write something in Pest, mentions test files or directories (tests/Feature, tests/Unit) or architecture tests. Covers: test()/it()/expect() syntax, datasets, mocking, browser testing, arch(), Livewire component tests, RefreshDatabase, and all Pest 3 features. Do not use for editing factories, seeders, migrations, controllers, models, or non-test PHP code.
|
||||||
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
|
- `tailwindcss-development` — Always invoke when the user's message includes 'tailwind' in any form. Also invoke for: building responsive grid layouts (multi-column card grids, product grids), flex/grid page structures (dashboards with sidebars, fixed topbars, mobile-toggle navs), styling UI components (cards, tables, navbars, pricing sections, forms, inputs, badges), adding dark mode variants, fixing spacing or typography, and Tailwind v3/v4 work. The core use case: writing or fixing Tailwind utility classes in HTML templates (Blade, JSX, Vue). Skip for backend PHP logic, database queries, API routes, JavaScript with no HTML/CSS component, CSS file audits, build tool configuration, and vanilla CSS.
|
||||||
|
|
||||||
|
|
@ -414,15 +412,6 @@ This project has domain-specific skills available. You MUST activate the relevan
|
||||||
|
|
||||||
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
- Casts can and likely should be set in a `casts()` method on a model rather than the `$casts` property. Follow existing conventions from other models.
|
||||||
|
|
||||||
=== volt/core rules ===
|
|
||||||
|
|
||||||
# Livewire Volt
|
|
||||||
|
|
||||||
- Single-file Livewire components: PHP logic and Blade templates in one file.
|
|
||||||
- Always check existing Volt components to determine functional vs class-based style.
|
|
||||||
- IMPORTANT: Always use `search-docs` tool for version-specific Volt documentation and updated code examples.
|
|
||||||
- IMPORTANT: Activate `volt-development` every time you're working with a Volt or single-file component-related task.
|
|
||||||
|
|
||||||
=== pint/core rules ===
|
=== pint/core rules ===
|
||||||
|
|
||||||
# Laravel Pint Code Formatter
|
# Laravel Pint Code Formatter
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,6 @@ use Laravel\Fortify\Contracts\FailedTwoFactorLoginResponse;
|
||||||
use Laravel\Fortify\Contracts\LoginResponse;
|
use Laravel\Fortify\Contracts\LoginResponse;
|
||||||
use Laravel\Fortify\Contracts\TwoFactorLoginResponse;
|
use Laravel\Fortify\Contracts\TwoFactorLoginResponse;
|
||||||
use Laravel\Fortify\Fortify;
|
use Laravel\Fortify\Fortify;
|
||||||
use Livewire\Volt\Volt;
|
|
||||||
|
|
||||||
class FortifyServiceProvider extends ServiceProvider
|
class FortifyServiceProvider extends ServiceProvider
|
||||||
{
|
{
|
||||||
|
|
@ -29,7 +28,7 @@ class FortifyServiceProvider extends ServiceProvider
|
||||||
$this->app->singleton(LoginResponse::class, RoleAwareLoginResponse::class);
|
$this->app->singleton(LoginResponse::class, RoleAwareLoginResponse::class);
|
||||||
$this->app->singleton(TwoFactorLoginResponse::class, RoleAwareLoginResponse::class);
|
$this->app->singleton(TwoFactorLoginResponse::class, RoleAwareLoginResponse::class);
|
||||||
// Fortifys Default leitet auf die nicht registrierte Route
|
// Fortifys Default leitet auf die nicht registrierte Route
|
||||||
// `two-factor.login` (views => false) – zurück zur Volt-Challenge.
|
// `two-factor.login` (views => false) – zurück zur Livewire-Challenge.
|
||||||
$this->app->singleton(FailedTwoFactorLoginResponse::class, FailedTwoFactorChallengeResponse::class);
|
$this->app->singleton(FailedTwoFactorLoginResponse::class, FailedTwoFactorChallengeResponse::class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -44,7 +43,7 @@ class FortifyServiceProvider extends ServiceProvider
|
||||||
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
Fortify::resetUserPasswordsUsing(ResetUserPassword::class);
|
||||||
Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class);
|
Fortify::redirectUserForTwoFactorAuthenticationUsing(RedirectIfTwoFactorAuthenticatable::class);
|
||||||
|
|
||||||
// Keine View-Definitionen, da wir Volt verwenden
|
// Keine View-Definitionen, die Auth-Seiten sind Livewire-Komponenten
|
||||||
|
|
||||||
RateLimiter::for('login', function (Request $request) {
|
RateLimiter::for('login', function (Request $request) {
|
||||||
$throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip());
|
$throttleKey = Str::transliterate(Str::lower($request->input(Fortify::username())).'|'.$request->ip());
|
||||||
|
|
|
||||||
|
|
@ -1,28 +0,0 @@
|
||||||
<?php
|
|
||||||
|
|
||||||
namespace App\Providers;
|
|
||||||
|
|
||||||
use Illuminate\Support\ServiceProvider;
|
|
||||||
use Livewire\Volt\Volt;
|
|
||||||
|
|
||||||
class VoltServiceProvider extends ServiceProvider
|
|
||||||
{
|
|
||||||
/**
|
|
||||||
* Register services.
|
|
||||||
*/
|
|
||||||
public function register(): void
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Bootstrap services.
|
|
||||||
*/
|
|
||||||
public function boot(): void
|
|
||||||
{
|
|
||||||
Volt::mount([
|
|
||||||
config('livewire.view_path', resource_path('views/livewire')),
|
|
||||||
resource_path('views/pages'),
|
|
||||||
]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -12,7 +12,6 @@
|
||||||
"fortify-development",
|
"fortify-development",
|
||||||
"laravel-best-practices",
|
"laravel-best-practices",
|
||||||
"fluxui-development",
|
"fluxui-development",
|
||||||
"volt-development",
|
|
||||||
"pest-testing",
|
"pest-testing",
|
||||||
"tailwindcss-development"
|
"tailwindcss-development"
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,6 @@
|
||||||
use App\Providers\AppServiceProvider;
|
use App\Providers\AppServiceProvider;
|
||||||
use App\Providers\FortifyServiceProvider;
|
use App\Providers\FortifyServiceProvider;
|
||||||
use App\Providers\ThemeServiceProvider;
|
use App\Providers\ThemeServiceProvider;
|
||||||
use App\Providers\VoltServiceProvider;
|
|
||||||
use Barryvdh\Debugbar\ServiceProvider;
|
use Barryvdh\Debugbar\ServiceProvider;
|
||||||
use FluxPro\FluxProServiceProvider;
|
use FluxPro\FluxProServiceProvider;
|
||||||
|
|
||||||
|
|
@ -11,7 +10,6 @@ return [
|
||||||
AppServiceProvider::class,
|
AppServiceProvider::class,
|
||||||
ThemeServiceProvider::class,
|
ThemeServiceProvider::class,
|
||||||
FortifyServiceProvider::class,
|
FortifyServiceProvider::class,
|
||||||
VoltServiceProvider::class,
|
|
||||||
FluxProServiceProvider::class,
|
FluxProServiceProvider::class,
|
||||||
ServiceProvider::class,
|
ServiceProvider::class,
|
||||||
];
|
];
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@
|
||||||
"laravel/tinker": "^2.10.1",
|
"laravel/tinker": "^2.10.1",
|
||||||
"livewire/flux": "^2.1.1",
|
"livewire/flux": "^2.1.1",
|
||||||
"livewire/flux-pro": "^2.1",
|
"livewire/flux-pro": "^2.1",
|
||||||
"livewire/volt": "^1.7.0",
|
|
||||||
"mews/purifier": "^3.4",
|
"mews/purifier": "^3.4",
|
||||||
"sentry/sentry-laravel": "^4.28",
|
"sentry/sentry-laravel": "^4.28",
|
||||||
"spatie/laravel-permission": "^6.17",
|
"spatie/laravel-permission": "^6.17",
|
||||||
|
|
|
||||||
73
composer.lock
generated
73
composer.lock
generated
|
|
@ -4,7 +4,7 @@
|
||||||
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
|
||||||
"This file is @generated automatically"
|
"This file is @generated automatically"
|
||||||
],
|
],
|
||||||
"content-hash": "ea2446398f933fba3c1e67a0ea180364",
|
"content-hash": "62e8b30de10f89b16d0d1b2c6ba68d9b",
|
||||||
"packages": [
|
"packages": [
|
||||||
{
|
{
|
||||||
"name": "bacon/bacon-qr-code",
|
"name": "bacon/bacon-qr-code",
|
||||||
|
|
@ -3173,77 +3173,6 @@
|
||||||
],
|
],
|
||||||
"time": "2026-09-28T18:12:51+00:00"
|
"time": "2026-09-28T18:12:51+00:00"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"name": "livewire/volt",
|
|
||||||
"version": "v1.11.2",
|
|
||||||
"source": {
|
|
||||||
"type": "git",
|
|
||||||
"url": "https://github.com/livewire/volt.git",
|
|
||||||
"reference": "1e46197d615bcd395ae87784fd8d25077782043d"
|
|
||||||
},
|
|
||||||
"dist": {
|
|
||||||
"type": "zip",
|
|
||||||
"url": "https://api.github.com/repos/livewire/volt/zipball/1e46197d615bcd395ae87784fd8d25077782043d",
|
|
||||||
"reference": "1e46197d615bcd395ae87784fd8d25077782043d",
|
|
||||||
"shasum": ""
|
|
||||||
},
|
|
||||||
"require": {
|
|
||||||
"laravel/framework": "^10.38.2|^11.0|^12.0|^13.0",
|
|
||||||
"livewire/livewire": "^3.6.1|^4.0",
|
|
||||||
"php": "^8.1"
|
|
||||||
},
|
|
||||||
"require-dev": {
|
|
||||||
"laravel/folio": "^1.1",
|
|
||||||
"orchestra/testbench": "^8.36|^9.15|^10.8|^11.0",
|
|
||||||
"pestphp/pest": "^2.9.5|^3.0|^4.0",
|
|
||||||
"phpstan/phpstan": "^1.10|^2.1"
|
|
||||||
},
|
|
||||||
"type": "library",
|
|
||||||
"extra": {
|
|
||||||
"laravel": {
|
|
||||||
"providers": [
|
|
||||||
"Livewire\\Volt\\VoltServiceProvider"
|
|
||||||
]
|
|
||||||
},
|
|
||||||
"branch-alias": {
|
|
||||||
"dev-master": "1.x-dev"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"autoload": {
|
|
||||||
"files": [
|
|
||||||
"functions.php"
|
|
||||||
],
|
|
||||||
"psr-4": {
|
|
||||||
"Livewire\\Volt\\": "src/"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"notification-url": "https://packagist.org/downloads/",
|
|
||||||
"license": [
|
|
||||||
"MIT"
|
|
||||||
],
|
|
||||||
"authors": [
|
|
||||||
{
|
|
||||||
"name": "Taylor Otwell",
|
|
||||||
"email": "taylor@laravel.com"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "Nuno Maduro",
|
|
||||||
"email": "nuno@laravel.com"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"description": "An elegantly crafted functional API for Laravel Livewire.",
|
|
||||||
"homepage": "https://github.com/livewire/volt",
|
|
||||||
"keywords": [
|
|
||||||
"laravel",
|
|
||||||
"livewire",
|
|
||||||
"volt"
|
|
||||||
],
|
|
||||||
"support": {
|
|
||||||
"issues": "https://github.com/livewire/volt/issues",
|
|
||||||
"source": "https://github.com/livewire/volt"
|
|
||||||
},
|
|
||||||
"time": "2026-07-31T16:13:54+00:00"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"name": "mews/purifier",
|
"name": "mews/purifier",
|
||||||
"version": "3.4.4",
|
"version": "3.4.4",
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,38 @@ return [
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'layout' => 'components.layouts.app',
|
'component_layout' => 'components.layouts.app',
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Component Locations
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| Verzeichnisse für Single-File-Komponenten (seit Livewire 4; vorher hat
|
||||||
|
| Volt resources/views/livewire eingebunden). Komponentennamen ergeben sich
|
||||||
|
| aus dem Pfad: admin/users/index.blade.php → 'admin.users.index'.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'component_locations' => [
|
||||||
|
resource_path('views/components'),
|
||||||
|
resource_path('views/livewire'),
|
||||||
|
],
|
||||||
|
|
||||||
|
/*
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
| Make Command
|
||||||
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
| php artisan make:livewire legt Single-File-Komponenten an, ohne
|
||||||
|
| ⚡-Präfix im Dateinamen — wie die bestehenden Komponenten.
|
||||||
|
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
'make_command' => [
|
||||||
|
'type' => 'sfc',
|
||||||
|
'emoji' => false,
|
||||||
|
],
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|---------------------------------------------------------------------------
|
|---------------------------------------------------------------------------
|
||||||
|
|
@ -50,7 +81,7 @@ return [
|
||||||
|
|
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
'lazy_placeholder' => null,
|
'component_placeholder' => null,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|---------------------------------------------------------------------------
|
|---------------------------------------------------------------------------
|
||||||
|
|
|
||||||
|
|
@ -47,26 +47,26 @@ Phasen im Archiv (`dev/archive/`).
|
||||||
|
|
||||||
## Nächste Entwicklungen / Optimierungen (Ideen-Backlog)
|
## Nächste Entwicklungen / Optimierungen (Ideen-Backlog)
|
||||||
|
|
||||||
- [ ] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
|
- [x] **Volt entfernen, auf Livewire-4-Single-File-Components umstellen**
|
||||||
(Betreiber, 05.10.2026). Seit Livewire 4 sind Single-File-Components
|
— **erledigt 06.10.2026** (Branch `technik/volt-entfernen`). 83
|
||||||
eingebaut, mit derselben Syntax wie Volts Klassenkomponenten — Volt
|
Komponenten auf `Livewire\Component`, 73 Routen auf
|
||||||
ist damit überflüssig. Umfang (Stand v1.1.0): 83 Komponenten unter
|
`Route::livewire()`, 88 Testdateien auf `Livewire::test()`/
|
||||||
`resources/views/livewire` (nur klassenbasiert, keine funktionale
|
`Livewire::actingAs()`; `VoltServiceProvider` gelöscht,
|
||||||
Volt-API, kein `@volt`), 73 `Volt::route()`, 549 `Volt::test()` in 80
|
`livewire/volt` entfernt (sonst keine Paketänderung).
|
||||||
Testdateien. Schritte nach dem offiziellen Upgrade-Leitfaden
|
`config/livewire.php` auf v4-Schlüssel: `component_layout`,
|
||||||
(livewire.laravel.com/docs/4.x/upgrading, „Upgrading Volt“):
|
`component_placeholder`, `component_locations`, `make_command` (SFC
|
||||||
`Livewire\Volt\Component` → `Livewire\Component`; `Volt::route()` →
|
ohne ⚡). Befund dabei: Der alte Schlüssel `layout` war wirkungslos,
|
||||||
`Route::livewire()`; `Volt::test()`/`LivewireVolt::test()` →
|
Livewire 4 legte seinen Standard `layouts::app` darüber; alle 73
|
||||||
`Livewire::test()`; `VoltServiceProvider` löschen und aus
|
gerouteten Komponenten setzen ihr Layout aber selbst. CLAUDE.md,
|
||||||
`bootstrap/providers.php` nehmen; `composer remove livewire/volt`.
|
AGENTS.md, `boost.json`, `.cursorrules` und der Skill
|
||||||
Livewire 4 findet `resources/views/livewire` standardmäßig
|
`volt-development` angepasst bzw. entfernt (von Hand —
|
||||||
(`component_locations`); `config/livewire.php` stammt noch aus v3 und
|
`boost:update` hätte nebenbei alle Skills auf eine neue
|
||||||
sollte bei der Gelegenheit abgeglichen werden. Danach CLAUDE.md und
|
Boost-Fassung gehoben, das ist ein eigener Schritt). Suite 2.325
|
||||||
die Boost-Richtlinien (Volt-Abschnitt, Skill `volt-development`)
|
grün, einer übersprungen; Larastan und Pint ohne Meldung.
|
||||||
anpassen und prüfen, ob Larastan die Komponenten jetzt erfasst
|
**Larastan erfasst die Komponenten weiterhin nicht**: Es analysiert
|
||||||
(offener Punkt aus dem Umsetzungsaudit 02.10., 5.6). Mechanische
|
nur `.php`-Dateien, Single-File-Komponenten sind Blade-Dateien.
|
||||||
Umstellung, aber großflächig — als eigener Branch mit voller Suite,
|
Abhilfe wäre die Umwandlung einzelner großer Komponenten in
|
||||||
nicht nebenbei in einem Fach-Block.
|
Klassen-Komponenten (`php artisan livewire:convert`), kein Muss.
|
||||||
|
|
||||||
- [ ] Frontend-Audit-Reste aus `dev/archive/frontend-audits/
|
- [ ] Frontend-Audit-Reste aus `dev/archive/frontend-audits/
|
||||||
frontend-optimize-protokoll.md` sichten — P2/P3-Punkte, die bewusst
|
frontend-optimize-protokoll.md` sichten — P2/P3-Punkte, die bewusst
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use Flux\Flux;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use Illuminate\Support\Facades\DB;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Kategorie anlegen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Kategorie anlegen')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Kategorie bearbeiten')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Kategorie bearbeiten')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Services\Admin\AdminPerformanceCache;
|
||||||
use App\Services\CurrentPortalContext;
|
use App\Services\CurrentPortalContext;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Kategorien')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Kategorien')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use Illuminate\Support\Str;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithFileUploads;
|
use Livewire\WithFileUploads;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Neue Firma')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Neue Firma')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithFileUploads;
|
use Livewire\WithFileUploads;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Firma bearbeiten')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Firma bearbeiten')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use App\Services\CurrentPortalContext;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Firmen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Firmen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use App\Models\Company;
|
||||||
use App\Models\Contact;
|
use App\Models\Contact;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Firma anzeigen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Firma anzeigen')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use App\Models\ContactMessage;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Kontakt')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Kontakt')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use App\Models\ContactMessage;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Anliegen · Kontakt')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Anliegen · Kontakt')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use App\Models\Contact;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Kontakt anlegen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Kontakt anlegen')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Kontakt bearbeiten')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Kontakt bearbeiten')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Kontakte')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Kontakte')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Gutscheine')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Gutscheine')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use Illuminate\Support\Facades\DB;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Footer-Code anlegen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Footer-Code anlegen')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use Illuminate\Support\Facades\DB;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Footer-Code bearbeiten')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Footer-Code bearbeiten')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use App\Enums\Portal;
|
||||||
use App\Models\FooterCode;
|
use App\Models\FooterCode;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Footer-Codes')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Footer-Codes')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Scopes\PortalScope;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Facades\Schema;
|
use Illuminate\Support\Facades\Schema;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Legacy Rechnungen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Legacy Rechnungen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use App\Models\WithdrawalRequest;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Recht & Compliance')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Recht & Compliance')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Mail;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Anfrage · Recht & Compliance')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Anfrage · Recht & Compliance')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use Illuminate\Support\Facades\Mail;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Mews\Purifier\Facades\Purifier;
|
use Mews\Purifier\Facades\Purifier;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
use App\Models\NewsletterCampaign;
|
use App\Models\NewsletterCampaign;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Newsletter')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Newsletter')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use App\Services\Newsletter\CampaignRecipients;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use App\Services\Admin\AdminPerformanceCache;
|
||||||
use App\Services\Newsletter\NewsletterSyncService;
|
use App\Services\Newsletter\NewsletterSyncService;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Newsletter Sync')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Newsletter Sync')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use App\Enums\EmailNotificationType;
|
||||||
use App\Models\EmailNotificationOptOut;
|
use App\Models\EmailNotificationOptOut;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@ use Illuminate\Support\Carbon;
|
||||||
use Laravel\Cashier\Subscription;
|
use Laravel\Cashier\Subscription;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Zahlungen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Zahlungen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use App\Services\Billing\StripePlanSyncService;
|
||||||
use Flux\Flux;
|
use Flux\Flux;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Tarife & Pakete')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Tarife & Pakete')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Enums\Portal;
|
use App\Enums\Portal;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new class extends Component
|
new class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use App\Models\AdminPreset;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Neue Voreinstellung')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Neue Voreinstellung')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Voreinstellung bearbeiten')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Voreinstellung bearbeiten')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use App\Models\AdminPreset;
|
||||||
use App\Services\Admin\AdminPerformanceCache;
|
use App\Services\Admin\AdminPerformanceCache;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Voreinstellungen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Voreinstellungen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -15,7 +15,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Computed;
|
use Livewire\Attributes\Computed;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component {
|
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component {
|
||||||
use \App\Livewire\Concerns\InteractsWithPressReleaseContacts;
|
use \App\Livewire\Concerns\InteractsWithPressReleaseContacts;
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ use Livewire\Attributes\Computed;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component {
|
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component {
|
||||||
use \App\Livewire\Concerns\HandlesAdminPressReleaseActions;
|
use \App\Livewire\Concerns\HandlesAdminPressReleaseActions;
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ use Flux\Flux;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Pressemitteilungen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Pressemitteilungen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -14,7 +14,7 @@ use Flux\Flux;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@ use App\Enums\ActivityType;
|
||||||
use App\Models\ActivityEvent;
|
use App\Models\ActivityEvent;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Verlauf')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Verlauf')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use App\Services\SearchConsole\SearchConsoleClient;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
use App\Services\Admin\AdminSlowRequestReporter;
|
use App\Services\Admin\AdminSlowRequestReporter;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Performance Reports')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Performance Reports')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use Livewire\Attributes\Computed;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Symfony\Component\HttpFoundation\StreamedResponse;
|
use Symfony\Component\HttpFoundation\StreamedResponse;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
use App\Services\Admin\AdminSystemHealth;
|
use App\Services\Admin\AdminSystemHealth;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Betriebsüberwachung')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Betriebsüberwachung')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Spatie\Permission\Models\Permission;
|
use Spatie\Permission\Models\Permission;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Spatie\Permission\Models\Permission;
|
use Spatie\Permission\Models\Permission;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Rollen & Rechte')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Rollen & Rechte')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use App\Services\Admin\AdminPerformanceCache;
|
||||||
use Illuminate\Database\Eloquent\Collection;
|
use Illuminate\Database\Eloquent\Collection;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Benutzer anlegen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Benutzer anlegen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -11,7 +11,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Spatie\Permission\Models\Role;
|
use Spatie\Permission\Models\Role;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Benutzer bearbeiten')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Benutzer bearbeiten')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use Flux\Flux;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Benutzer anzeigen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Benutzer anzeigen')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort bestätigen', 'eyebrow' => 'Sicherheitsbereich', 'showFromBanner' => false])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort bestätigen', 'eyebrow' => 'Sicherheitsbereich', 'showFromBanner' => false])] class extends Component {
|
||||||
public string $password = '';
|
public string $password = '';
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use Illuminate\Support\Facades\RateLimiter;
|
||||||
use Illuminate\Support\Str;
|
use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort vergessen', 'eyebrow' => 'Passwort zurücksetzen', 'topRightLabel' => 'Doch erinnert?', 'topRightLinkText' => 'Zur Anmeldung', 'topRightLinkHref' => '/login'])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Passwort vergessen', 'eyebrow' => 'Passwort zurücksetzen', 'topRightLabel' => 'Doch erinnert?', 'topRightLinkText' => 'Zur Anmeldung', 'topRightLinkHref' => '/login'])] class extends Component {
|
||||||
public string $email = '';
|
public string $email = '';
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Willkommen zurück', 'eyebrow' => 'Anmeldung im Publisher-Hub', 'topRightLabel' => 'Noch kein Konto?', 'topRightLinkText' => 'Konto erstellen', 'topRightLinkHref' => '/register'])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Willkommen zurück', 'eyebrow' => 'Anmeldung im Publisher-Hub', 'topRightLabel' => 'Noch kein Konto?', 'topRightLinkText' => 'Konto erstellen', 'topRightLinkHref' => '/register'])] class extends Component {
|
||||||
#[Validate('required|string|email')]
|
#[Validate('required|string|email')]
|
||||||
|
|
|
||||||
|
|
@ -6,7 +6,7 @@ use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Validate;
|
use Livewire\Attributes\Validate;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Anmeldung per E-Mail-Link', 'eyebrow' => 'Ohne Passwort anmelden', 'topRightLabel' => 'Lieber mit Passwort?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Anmeldung per E-Mail-Link', 'eyebrow' => 'Ohne Passwort anmelden', 'topRightLabel' => 'Lieber mit Passwort?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
|
||||||
#[Validate('required|string|email')]
|
#[Validate('required|string|email')]
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ use Illuminate\Support\Facades\RateLimiter;
|
||||||
use Illuminate\Validation\Rules;
|
use Illuminate\Validation\Rules;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Konto erstellen', 'eyebrow' => 'Registrierung im Publisher-Hub', 'topRightLabel' => 'Bereits Konto?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Konto erstellen', 'eyebrow' => 'Registrierung im Publisher-Hub', 'topRightLabel' => 'Bereits Konto?', 'topRightLinkText' => 'Anmelden', 'topRightLinkHref' => '/login'])] class extends Component {
|
||||||
public string $name = '';
|
public string $name = '';
|
||||||
|
|
|
||||||
|
|
@ -8,7 +8,7 @@ use Illuminate\Support\Str;
|
||||||
use Illuminate\Validation\Rules;
|
use Illuminate\Validation\Rules;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Neues Passwort vergeben', 'eyebrow' => 'Passwort zurücksetzen'])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Neues Passwort vergeben', 'eyebrow' => 'Passwort zurücksetzen'])] class extends Component {
|
||||||
#[Locked]
|
#[Locked]
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Zwei-Faktor-Bestätigung', 'eyebrow' => 'Sicherheitsprüfung', 'showFromBanner' => false])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Zwei-Faktor-Bestätigung', 'eyebrow' => 'Sicherheitsprüfung', 'showFromBanner' => false])] class extends Component {
|
||||||
public function mount(): void
|
public function mount(): void
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Session;
|
use Illuminate\Support\Facades\Session;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Danke für Ihre Registrierung', 'eyebrow' => 'Nur noch ein Schritt', 'showFromBanner' => false])] class extends Component {
|
new #[Layout('components.layouts.auth.pressekonto', ['heading' => 'Danke für Ihre Registrierung', 'eyebrow' => 'Nur noch ein Schritt', 'showFromBanner' => false])] class extends Component {
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Services\PressRelease\PressReleaseAttachmentStorage;
|
||||||
use App\Scopes\PortalScope;
|
use App\Scopes\PortalScope;
|
||||||
use Flux\Flux;
|
use Flux\Flux;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithFileUploads;
|
use Livewire\WithFileUploads;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,7 @@ use App\Services\PressRelease\Images\PressReleaseImageUploader;
|
||||||
use Flux\Flux;
|
use Flux\Flux;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithFileUploads;
|
use Livewire\WithFileUploads;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use App\Scopes\PortalScope;
|
||||||
use Flux\Flux;
|
use Flux\Flux;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithFileUploads;
|
use Livewire\WithFileUploads;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use App\Enums\PressReleasePlaceholder;
|
use App\Enums\PressReleasePlaceholder;
|
||||||
use Flux\Flux;
|
use Flux\Flux;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Auswahl-Modal für die SVG-Titelbild-Platzhalter.
|
* Auswahl-Modal für die SVG-Titelbild-Platzhalter.
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ use App\Services\Billing\VatResolver;
|
||||||
use Flux\Flux;
|
use Flux\Flux;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Buchungen & Add-ons (Phase 9F): Tarif-Raster mit Stripe-Checkout,
|
* Buchungen & Add-ons (Phase 9F): Tarif-Raster mit Stripe-Checkout,
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use App\Services\Customer\CustomerCompanyContext;
|
use App\Services\Customer\CustomerCompanyContext;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new class extends Component
|
new class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -13,7 +13,7 @@ use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Mein Dashboard')] class extends Component {
|
new #[Layout('components.layouts.app'), Title('Mein Dashboard')] class extends Component {
|
||||||
public function with(): array
|
public function with(): array
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use App\Models\Invoice;
|
||||||
use App\Models\LegacyInvoice;
|
use App\Models\LegacyInvoice;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Rechnungen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ use Illuminate\Validation\Rule;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Neue Firma anlegen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Neue Firma anlegen')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use Illuminate\Support\Facades\DB;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Meine Firmen')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Meine Firmen')] class extends Component
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithFileUploads;
|
use Livewire\WithFileUploads;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Firma')] class extends Component {
|
new #[Layout('components.layouts.app'), Title('Firma')] class extends Component {
|
||||||
|
|
|
||||||
|
|
@ -20,7 +20,7 @@ use Livewire\Attributes\Computed;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\On;
|
use Livewire\Attributes\On;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Neue Pressemitteilung')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,7 @@ use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\On;
|
use Livewire\Attributes\On;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Pressemitteilung bearbeiten')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@ use Illuminate\Support\Facades\DB;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Meine Pressemitteilungen')] class extends Component {
|
new #[Layout('components.layouts.app'), Title('Meine Pressemitteilungen')] class extends Component {
|
||||||
|
|
|
||||||
|
|
@ -32,7 +32,7 @@ use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Pressemitteilung')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Services\Billing\VatIdValidationService;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Mein Profil')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Mein Profil')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,7 @@ use Laravel\Fortify\TwoFactorAuthenticationProvider;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('Konto-Sicherheit')] class extends Component
|
new #[Layout('components.layouts.app'), Title('Konto-Sicherheit')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use App\Services\Api\ApiAccessEligibilityService;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Attributes\Title;
|
use Livewire\Attributes\Title;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app'), Title('API-Tokens')] class extends Component
|
new #[Layout('components.layouts.app'), Title('API-Tokens')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new class extends Component {
|
new class extends Component {
|
||||||
public bool $notifications = false;
|
public bool $notifications = false;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app')] class extends Component
|
new #[Layout('components.layouts.app')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
use App\Livewire\Actions\Logout;
|
use App\Livewire\Actions\Logout;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new class extends Component
|
new class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Hash;
|
||||||
use Illuminate\Validation\Rules\Password;
|
use Illuminate\Validation\Rules\Password;
|
||||||
use Illuminate\Validation\ValidationException;
|
use Illuminate\Validation\ValidationException;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app')] class extends Component
|
new #[Layout('components.layouts.app')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,7 @@ use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\Session;
|
use Illuminate\Support\Facades\Session;
|
||||||
use Illuminate\Validation\Rule;
|
use Illuminate\Validation\Rule;
|
||||||
use Livewire\Attributes\Layout;
|
use Livewire\Attributes\Layout;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new #[Layout('components.layouts.app')] class extends Component
|
new #[Layout('components.layouts.app')] class extends Component
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
<?php
|
<?php
|
||||||
|
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
|
|
||||||
new class extends Component {
|
new class extends Component {
|
||||||
public $timeframe = '7';
|
public $timeframe = '7';
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,7 @@ use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
use Illuminate\Pagination\Paginator;
|
use Illuminate\Pagination\Paginator;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new class extends Component
|
new class extends Component
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,7 @@ use Illuminate\Database\Eloquent\Builder;
|
||||||
use Illuminate\Pagination\LengthAwarePaginator;
|
use Illuminate\Pagination\LengthAwarePaginator;
|
||||||
use Livewire\Attributes\Locked;
|
use Livewire\Attributes\Locked;
|
||||||
use Livewire\Attributes\Url;
|
use Livewire\Attributes\Url;
|
||||||
use Livewire\Volt\Component;
|
use Livewire\Component;
|
||||||
use Livewire\WithPagination;
|
use Livewire\WithPagination;
|
||||||
|
|
||||||
new class extends Component
|
new class extends Component
|
||||||
|
|
|
||||||
105
routes/admin.php
105
routes/admin.php
|
|
@ -10,7 +10,6 @@ use App\Http\Middleware\BlockAdminDuringImpersonation;
|
||||||
use App\Http\Middleware\EnsureUserIsAdmin;
|
use App\Http\Middleware\EnsureUserIsAdmin;
|
||||||
use App\Http\Middleware\LogSlowAdminRequests;
|
use App\Http\Middleware\LogSlowAdminRequests;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Livewire\Volt\Volt;
|
|
||||||
|
|
||||||
// Hinweis: Die Root-Route (`/`) auf der Portal-Domain rendert seit dem
|
// Hinweis: Die Root-Route (`/`) auf der Portal-Domain rendert seit dem
|
||||||
// Hub-Launch die öffentliche Publisher-Landing (web/pressekonto.blade.php).
|
// Hub-Launch die öffentliche Publisher-Landing (web/pressekonto.blade.php).
|
||||||
|
|
@ -26,8 +25,8 @@ Route::get('dashboard', DashboardController::class)
|
||||||
Route::middleware(['auth', 'verified'])->group(function () {
|
Route::middleware(['auth', 'verified'])->group(function () {
|
||||||
Route::redirect('settings', '/admin/me/profile');
|
Route::redirect('settings', '/admin/me/profile');
|
||||||
Route::redirect('settings/profile', '/admin/me/profile')->name('settings.profile');
|
Route::redirect('settings/profile', '/admin/me/profile')->name('settings.profile');
|
||||||
Volt::route('settings/password', 'settings.password')->name('settings.password');
|
Route::livewire('settings/password', 'settings.password')->name('settings.password');
|
||||||
Volt::route('settings/appearance', 'settings.appearance')->name('settings.appearance');
|
Route::livewire('settings/appearance', 'settings.appearance')->name('settings.appearance');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
|
Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
|
||||||
|
|
@ -40,10 +39,10 @@ Route::post('admin/impersonate/leave', LeaveImpersonationController::class)
|
||||||
Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, EnsureUserIsAdmin::class, LogSlowAdminRequests::class])->group(function () {
|
Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, EnsureUserIsAdmin::class, LogSlowAdminRequests::class])->group(function () {
|
||||||
|
|
||||||
// Content Management
|
// Content Management
|
||||||
Volt::route('admin/press-releases', 'admin.press-releases.index')->name('admin.press-releases.index');
|
Route::livewire('admin/press-releases', 'admin.press-releases.index')->name('admin.press-releases.index');
|
||||||
Volt::route('admin/press-releases/create', 'admin.press-releases.create')->name('admin.press-releases.create');
|
Route::livewire('admin/press-releases/create', 'admin.press-releases.create')->name('admin.press-releases.create');
|
||||||
Volt::route('admin/press-releases/{id}', 'admin.press-releases.show')->name('admin.press-releases.show');
|
Route::livewire('admin/press-releases/{id}', 'admin.press-releases.show')->name('admin.press-releases.show');
|
||||||
Volt::route('admin/press-releases/{id}/edit', 'admin.press-releases.edit')->name('admin.press-releases.edit');
|
Route::livewire('admin/press-releases/{id}/edit', 'admin.press-releases.edit')->name('admin.press-releases.edit');
|
||||||
// Beweisoriginal und veröffentlichte Fassung (Bildkennzeichnung E.4):
|
// Beweisoriginal und veröffentlichte Fassung (Bildkennzeichnung E.4):
|
||||||
// nur hier, nur mit Zweck (per POST, Audit A-08), jeder Abruf
|
// nur hier, nur mit Zweck (per POST, Audit A-08), jeder Abruf
|
||||||
// protokolliert; Restnachweise entfernter Bilder nur mit
|
// protokolliert; Restnachweise entfernter Bilder nur mit
|
||||||
|
|
@ -55,106 +54,106 @@ Route::middleware(['auth', 'verified', BlockAdminDuringImpersonation::class, Ens
|
||||||
|
|
||||||
// Rubriken-Taxonomie: portalweite Struktur — nur admin (Befund H2).
|
// Rubriken-Taxonomie: portalweite Struktur — nur admin (Befund H2).
|
||||||
Route::middleware('can:categories:manage')->group(function (): void {
|
Route::middleware('can:categories:manage')->group(function (): void {
|
||||||
Volt::route('admin/categories', 'admin.categories.index')->name('admin.categories.index');
|
Route::livewire('admin/categories', 'admin.categories.index')->name('admin.categories.index');
|
||||||
Volt::route('admin/categories/create', 'admin.categories.create')->name('admin.categories.create');
|
Route::livewire('admin/categories/create', 'admin.categories.create')->name('admin.categories.create');
|
||||||
Volt::route('admin/categories/{id}/edit', 'admin.categories.edit')->name('admin.categories.edit');
|
Route::livewire('admin/categories/{id}/edit', 'admin.categories.edit')->name('admin.categories.edit');
|
||||||
});
|
});
|
||||||
|
|
||||||
Route::middleware('can:footer-codes:manage')->group(function (): void {
|
Route::middleware('can:footer-codes:manage')->group(function (): void {
|
||||||
Volt::route('admin/footer-codes', 'admin.footer-codes.index')->name('admin.footer-codes.index');
|
Route::livewire('admin/footer-codes', 'admin.footer-codes.index')->name('admin.footer-codes.index');
|
||||||
Volt::route('admin/footer-codes/create', 'admin.footer-codes.create')->name('admin.footer-codes.create');
|
Route::livewire('admin/footer-codes/create', 'admin.footer-codes.create')->name('admin.footer-codes.create');
|
||||||
Volt::route('admin/footer-codes/{id}/edit', 'admin.footer-codes.edit')->name('admin.footer-codes.edit');
|
Route::livewire('admin/footer-codes/{id}/edit', 'admin.footer-codes.edit')->name('admin.footer-codes.edit');
|
||||||
});
|
});
|
||||||
|
|
||||||
// CRM
|
// CRM
|
||||||
// Lesen (companies:read) auch für Editoren; Schreiben nur admin (companies:write, Befund H2).
|
// Lesen (companies:read) auch für Editoren; Schreiben nur admin (companies:write, Befund H2).
|
||||||
Volt::route('admin/companies', 'admin.companies.index')->name('admin.companies.index');
|
Route::livewire('admin/companies', 'admin.companies.index')->name('admin.companies.index');
|
||||||
Volt::route('admin/companies/{id}', 'admin.companies.show')->where('id', '[0-9]+')->name('admin.companies.show');
|
Route::livewire('admin/companies/{id}', 'admin.companies.show')->where('id', '[0-9]+')->name('admin.companies.show');
|
||||||
Volt::route('admin/contacts', 'admin.contacts.index')->name('admin.contacts.index');
|
Route::livewire('admin/contacts', 'admin.contacts.index')->name('admin.contacts.index');
|
||||||
|
|
||||||
Route::middleware('can:companies:write')->group(function (): void {
|
Route::middleware('can:companies:write')->group(function (): void {
|
||||||
Volt::route('admin/companies/create', 'admin.companies.create')->name('admin.companies.create');
|
Route::livewire('admin/companies/create', 'admin.companies.create')->name('admin.companies.create');
|
||||||
Volt::route('admin/companies/{id}/edit', 'admin.companies.edit')->name('admin.companies.edit');
|
Route::livewire('admin/companies/{id}/edit', 'admin.companies.edit')->name('admin.companies.edit');
|
||||||
Volt::route('admin/companies/{companyId}/contacts/create', 'admin.contacts.create')->name('admin.companies.contacts.create');
|
Route::livewire('admin/companies/{companyId}/contacts/create', 'admin.contacts.create')->name('admin.companies.contacts.create');
|
||||||
Volt::route('admin/contacts/create', 'admin.contacts.create')->name('admin.contacts.create');
|
Route::livewire('admin/contacts/create', 'admin.contacts.create')->name('admin.contacts.create');
|
||||||
Volt::route('admin/contacts/{id}/edit', 'admin.contacts.edit')->name('admin.contacts.edit');
|
Route::livewire('admin/contacts/{id}/edit', 'admin.contacts.edit')->name('admin.contacts.edit');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Recht & Compliance (WS-3): Queue für DSGVO-/Persönlichkeitsrechts-/Meldungen
|
// Recht & Compliance (WS-3): Queue für DSGVO-/Persönlichkeitsrechts-/Meldungen
|
||||||
// — sensible Vorgänge, nur admin (Befund H2).
|
// — sensible Vorgänge, nur admin (Befund H2).
|
||||||
Route::middleware('can:compliance:manage')->group(function (): void {
|
Route::middleware('can:compliance:manage')->group(function (): void {
|
||||||
Volt::route('admin/legal-requests', 'admin.legal-requests.index')->name('admin.legal-requests.index');
|
Route::livewire('admin/legal-requests', 'admin.legal-requests.index')->name('admin.legal-requests.index');
|
||||||
Volt::route('admin/legal-requests/{id}', 'admin.legal-requests.show')->name('admin.legal-requests.show');
|
Route::livewire('admin/legal-requests/{id}', 'admin.legal-requests.show')->name('admin.legal-requests.show');
|
||||||
|
|
||||||
// Kontakt: Queue für Anliegen aus dem Kontakt-Widget (Kontaktaufnahme,
|
// Kontakt: Queue für Anliegen aus dem Kontakt-Widget (Kontaktaufnahme,
|
||||||
// Fehlermeldung, PM-Meldung, Feedback)
|
// Fehlermeldung, PM-Meldung, Feedback)
|
||||||
Volt::route('admin/contact-messages', 'admin.contact-messages.index')->name('admin.contact-messages.index');
|
Route::livewire('admin/contact-messages', 'admin.contact-messages.index')->name('admin.contact-messages.index');
|
||||||
Volt::route('admin/contact-messages/{id}', 'admin.contact-messages.show')->name('admin.contact-messages.show');
|
Route::livewire('admin/contact-messages/{id}', 'admin.contact-messages.show')->name('admin.contact-messages.show');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Billing: Rechnungen, Zahlungen, Tarife, Gutscheine — nur admin (Befund H2).
|
// Billing: Rechnungen, Zahlungen, Tarife, Gutscheine — nur admin (Befund H2).
|
||||||
Route::middleware('can:billing:manage')->group(function (): void {
|
Route::middleware('can:billing:manage')->group(function (): void {
|
||||||
Volt::route('admin/invoices', 'admin.invoices.index')->name('admin.invoices.index');
|
Route::livewire('admin/invoices', 'admin.invoices.index')->name('admin.invoices.index');
|
||||||
Route::get('admin/legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('admin.legacy-invoices.pdf');
|
Route::get('admin/legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('admin.legacy-invoices.pdf');
|
||||||
Route::get('admin/invoices/{invoice}/pdf', InvoicePdfController::class)->name('admin.invoices.pdf');
|
Route::get('admin/invoices/{invoice}/pdf', InvoicePdfController::class)->name('admin.invoices.pdf');
|
||||||
Volt::route('admin/payments', 'admin.payments.index')->name('admin.payments.index');
|
Route::livewire('admin/payments', 'admin.payments.index')->name('admin.payments.index');
|
||||||
Volt::route('admin/payments/plans', 'admin.payments.plans')->name('admin.payments.plans');
|
Route::livewire('admin/payments/plans', 'admin.payments.plans')->name('admin.payments.plans');
|
||||||
Volt::route('admin/coupons', 'admin.coupons.index')->name('admin.coupons.index');
|
Route::livewire('admin/coupons', 'admin.coupons.index')->name('admin.coupons.index');
|
||||||
Volt::route('admin/newsletter-sync', 'admin.newsletter.sync')->name('admin.newsletter.sync');
|
Route::livewire('admin/newsletter-sync', 'admin.newsletter.sync')->name('admin.newsletter.sync');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Administration
|
// Administration
|
||||||
Volt::route('admin/presets', 'admin.presets.index')->name('admin.presets.index');
|
Route::livewire('admin/presets', 'admin.presets.index')->name('admin.presets.index');
|
||||||
Volt::route('admin/presets/create', 'admin.presets.create')->name('admin.presets.create');
|
Route::livewire('admin/presets/create', 'admin.presets.create')->name('admin.presets.create');
|
||||||
Volt::route('admin/presets/{id}/edit', 'admin.presets.edit')->name('admin.presets.edit');
|
Route::livewire('admin/presets/{id}/edit', 'admin.presets.edit')->name('admin.presets.edit');
|
||||||
|
|
||||||
Volt::route('admin/users', 'admin.users')->name('admin.users.index');
|
Route::livewire('admin/users', 'admin.users')->name('admin.users.index');
|
||||||
Volt::route('admin/users/create', 'admin.users.create')->name('admin.users.create');
|
Route::livewire('admin/users/create', 'admin.users.create')->name('admin.users.create');
|
||||||
// Gutschriften auf der Detailseite sind finanzwirksam: die Berechtigung
|
// Gutschriften auf der Detailseite sind finanzwirksam: die Berechtigung
|
||||||
// hängt an der Route (persistente Authorize-Middleware, greift auch für
|
// hängt an der Route (persistente Authorize-Middleware, greift auch für
|
||||||
// Livewire-Folge-Requests) und nicht nur an mount() (Audit F08).
|
// Livewire-Folge-Requests) und nicht nur an mount() (Audit F08).
|
||||||
Volt::route('admin/users/{id}', 'admin.users.show')->middleware('can:users:manage')->name('admin.users.show');
|
Route::livewire('admin/users/{id}', 'admin.users.show')->middleware('can:users:manage')->name('admin.users.show');
|
||||||
Volt::route('admin/users/{id}/edit', 'admin.users.edit')->name('admin.users.edit');
|
Route::livewire('admin/users/{id}/edit', 'admin.users.edit')->name('admin.users.edit');
|
||||||
|
|
||||||
// Interner Newsletter: Kampagnen an Bestands-User (Filter + Protokoll).
|
// Interner Newsletter: Kampagnen an Bestands-User (Filter + Protokoll).
|
||||||
// Massenversand an die User-Datenbank → nur mit users:manage (admin).
|
// Massenversand an die User-Datenbank → nur mit users:manage (admin).
|
||||||
Route::middleware('can:users:manage')->group(function (): void {
|
Route::middleware('can:users:manage')->group(function (): void {
|
||||||
// Mail-Sperrliste (Bounce-Suppression, Roadmap 1b.6)
|
// Mail-Sperrliste (Bounce-Suppression, Roadmap 1b.6)
|
||||||
Volt::route('admin/mail/sperrliste', 'admin.mail.suppressions')->name('admin.mail.suppressions');
|
Route::livewire('admin/mail/sperrliste', 'admin.mail.suppressions')->name('admin.mail.suppressions');
|
||||||
Volt::route('admin/newsletter', 'admin.newsletter.campaigns.index')->name('admin.newsletter.campaigns.index');
|
Route::livewire('admin/newsletter', 'admin.newsletter.campaigns.index')->name('admin.newsletter.campaigns.index');
|
||||||
Volt::route('admin/newsletter/abmeldungen', 'admin.newsletter.unsubscribes')->name('admin.newsletter.unsubscribes');
|
Route::livewire('admin/newsletter/abmeldungen', 'admin.newsletter.unsubscribes')->name('admin.newsletter.unsubscribes');
|
||||||
Volt::route('admin/newsletter/create', 'admin.newsletter.campaigns.edit')->name('admin.newsletter.campaigns.create');
|
Route::livewire('admin/newsletter/create', 'admin.newsletter.campaigns.edit')->name('admin.newsletter.campaigns.create');
|
||||||
Volt::route('admin/newsletter/{id}', 'admin.newsletter.campaigns.show')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.show');
|
Route::livewire('admin/newsletter/{id}', 'admin.newsletter.campaigns.show')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.show');
|
||||||
Volt::route('admin/newsletter/{id}/edit', 'admin.newsletter.campaigns.edit')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.edit');
|
Route::livewire('admin/newsletter/{id}/edit', 'admin.newsletter.campaigns.edit')->where('id', '[0-9]+')->name('admin.newsletter.campaigns.edit');
|
||||||
});
|
});
|
||||||
|
|
||||||
Volt::route('admin/roles', 'admin.roles.index')->name('admin.roles.index');
|
Route::livewire('admin/roles', 'admin.roles.index')->name('admin.roles.index');
|
||||||
Volt::route('admin/roles/create', 'admin.roles.create')->name('admin.roles.create');
|
Route::livewire('admin/roles/create', 'admin.roles.create')->name('admin.roles.create');
|
||||||
Volt::route('admin/roles/{id}/edit', 'admin.roles.edit')->name('admin.roles.edit');
|
Route::livewire('admin/roles/{id}/edit', 'admin.roles.edit')->name('admin.roles.edit');
|
||||||
|
|
||||||
// Bilder (Bildkennzeichnung): alle Titelbilder mit Nachweis, Bestätigung und KI-Vorab-Check.
|
// Bilder (Bildkennzeichnung): alle Titelbilder mit Nachweis, Bestätigung und KI-Vorab-Check.
|
||||||
Volt::route('admin/images', 'admin.images.index')->name('admin.images.index');
|
Route::livewire('admin/images', 'admin.images.index')->name('admin.images.index');
|
||||||
|
|
||||||
// Beweisarchiv (Bildkennzeichnung Block F): Liste, Legal Hold, Öffnen/Export mit Zweck.
|
// Beweisarchiv (Bildkennzeichnung Block F): Liste, Legal Hold, Öffnen/Export mit Zweck.
|
||||||
Route::middleware('can:compliance:manage')->group(function (): void {
|
Route::middleware('can:compliance:manage')->group(function (): void {
|
||||||
Volt::route('admin/archive', 'admin.archive.index')->name('admin.archive.index');
|
Route::livewire('admin/archive', 'admin.archive.index')->name('admin.archive.index');
|
||||||
Route::match(['get', 'post'], 'admin/archive/{entry}/download', [ArchiveEntryController::class, 'download'])->whereNumber('entry')->name('admin.archive.download');
|
Route::match(['get', 'post'], 'admin/archive/{entry}/download', [ArchiveEntryController::class, 'download'])->whereNumber('entry')->name('admin.archive.download');
|
||||||
Route::match(['get', 'post'], 'admin/archive/{entry}/export', [ArchiveEntryController::class, 'export'])->whereNumber('entry')->name('admin.archive.export');
|
Route::match(['get', 'post'], 'admin/archive/{entry}/export', [ArchiveEntryController::class, 'export'])->whereNumber('entry')->name('admin.archive.export');
|
||||||
});
|
});
|
||||||
|
|
||||||
// Reports
|
// Reports
|
||||||
Volt::route('admin/reports/activity', 'admin.reports.activity')->name('admin.reports.activity');
|
Route::livewire('admin/reports/activity', 'admin.reports.activity')->name('admin.reports.activity');
|
||||||
Volt::route('admin/reports/slow-requests', 'admin.reports.slow-requests')->name('admin.reports.slow-requests');
|
Route::livewire('admin/reports/slow-requests', 'admin.reports.slow-requests')->name('admin.reports.slow-requests');
|
||||||
|
|
||||||
// Einlieferer-Bericht: unzustellbare Kontaktdaten und abgelehnte
|
// Einlieferer-Bericht: unzustellbare Kontaktdaten und abgelehnte
|
||||||
// Meldungen je API-Einlieferer (Kontakterreichbarkeit).
|
// Meldungen je API-Einlieferer (Kontakterreichbarkeit).
|
||||||
Volt::route('admin/reports/einlieferer', 'admin.reports.submitter-contacts')->name('admin.reports.submitter-contacts');
|
Route::livewire('admin/reports/einlieferer', 'admin.reports.submitter-contacts')->name('admin.reports.submitter-contacts');
|
||||||
|
|
||||||
// Indexierungsstatus aus der Search Console (Roadmap 1c.4): Verteilung
|
// Indexierungsstatus aus der Search Console (Roadmap 1c.4): Verteilung
|
||||||
// nach Direkteinreichung/Syndikation — Grundlage für die Kundenansicht.
|
// nach Direkteinreichung/Syndikation — Grundlage für die Kundenansicht.
|
||||||
Volt::route('admin/reports/indexierung', 'admin.reports.index-status')->name('admin.reports.index-status');
|
Route::livewire('admin/reports/indexierung', 'admin.reports.index-status')->name('admin.reports.index-status');
|
||||||
|
|
||||||
Route::middleware('can:settings:manage')->group(function (): void {
|
Route::middleware('can:settings:manage')->group(function (): void {
|
||||||
Volt::route('admin/reports/system-health', 'admin.reports.system-health')->name('admin.reports.system-health');
|
Route::livewire('admin/reports/system-health', 'admin.reports.system-health')->name('admin.reports.system-health');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
||||||
|
|
@ -6,12 +6,11 @@ use App\Http\Controllers\Auth\MagicLinkConsumeController;
|
||||||
use App\Http\Controllers\Auth\VerifyEmailController;
|
use App\Http\Controllers\Auth\VerifyEmailController;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Laravel\Fortify\Http\Controllers\AuthenticatedSessionController;
|
use Laravel\Fortify\Http\Controllers\AuthenticatedSessionController;
|
||||||
use Livewire\Volt\Volt;
|
|
||||||
|
|
||||||
// Fortify-Routen für Authentifizierung mit Livewire
|
// Fortify-Routen für Authentifizierung mit Livewire
|
||||||
Route::group(['middleware' => config('fortify.middleware', ['web'])], function () {
|
Route::group(['middleware' => config('fortify.middleware', ['web'])], function () {
|
||||||
// Login mit Livewire
|
// Login mit Livewire
|
||||||
Volt::route('/login', 'auth.login')
|
Route::livewire('/login', 'auth.login')
|
||||||
->middleware(['guest:'.config('fortify.guard')])
|
->middleware(['guest:'.config('fortify.guard')])
|
||||||
->name('login');
|
->name('login');
|
||||||
|
|
||||||
|
|
@ -24,7 +23,7 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
|
||||||
|
|
||||||
// Anmeldung per E-Mail-Link (Magic-Link): zusammengeführte Seite für
|
// Anmeldung per E-Mail-Link (Magic-Link): zusammengeführte Seite für
|
||||||
// Bestandskonten UND hinterlegte Pressekontakte ohne Account (WS-2).
|
// Bestandskonten UND hinterlegte Pressekontakte ohne Account (WS-2).
|
||||||
Volt::route('/anmeldelink', 'auth.magic-link')
|
Route::livewire('/anmeldelink', 'auth.magic-link')
|
||||||
->middleware(['guest:'.config('fortify.guard')])
|
->middleware(['guest:'.config('fortify.guard')])
|
||||||
->name('magic-link.request');
|
->name('magic-link.request');
|
||||||
|
|
||||||
|
|
@ -41,22 +40,22 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
|
||||||
->name('oauth.google.callback');
|
->name('oauth.google.callback');
|
||||||
|
|
||||||
// Registrierung mit Livewire
|
// Registrierung mit Livewire
|
||||||
Volt::route('/register', 'auth.register')
|
Route::livewire('/register', 'auth.register')
|
||||||
->middleware(['guest:'.config('fortify.guard')])
|
->middleware(['guest:'.config('fortify.guard')])
|
||||||
->name('register');
|
->name('register');
|
||||||
|
|
||||||
// Passwort vergessen mit Livewire
|
// Passwort vergessen mit Livewire
|
||||||
Volt::route('/forgot-password', 'auth.forgot-password')
|
Route::livewire('/forgot-password', 'auth.forgot-password')
|
||||||
->middleware(['guest:'.config('fortify.guard')])
|
->middleware(['guest:'.config('fortify.guard')])
|
||||||
->name('password.request');
|
->name('password.request');
|
||||||
|
|
||||||
// Passwort zurücksetzen mit Livewire
|
// Passwort zurücksetzen mit Livewire
|
||||||
Volt::route('/reset-password/{token}', 'auth.reset-password')
|
Route::livewire('/reset-password/{token}', 'auth.reset-password')
|
||||||
->middleware(['guest:'.config('fortify.guard')])
|
->middleware(['guest:'.config('fortify.guard')])
|
||||||
->name('password.reset');
|
->name('password.reset');
|
||||||
|
|
||||||
// E-Mail-Verifizierung: Notice-/Danke-Seite (Volt)
|
// E-Mail-Verifizierung: Notice-/Danke-Seite (Volt)
|
||||||
Volt::route('/verify-email', 'auth.verify-email')
|
Route::livewire('/verify-email', 'auth.verify-email')
|
||||||
->middleware(['auth:'.config('fortify.guard')])
|
->middleware(['auth:'.config('fortify.guard')])
|
||||||
->name('verification.notice');
|
->name('verification.notice');
|
||||||
|
|
||||||
|
|
@ -81,12 +80,12 @@ Route::group(['middleware' => config('fortify.middleware', ['web'])], function (
|
||||||
|
|
||||||
// 2FA-Challenge-Seite (Volt-Frontend für Fortifys two-factor-challenge);
|
// 2FA-Challenge-Seite (Volt-Frontend für Fortifys two-factor-challenge);
|
||||||
// der eigentliche POST geht an Fortifys Controller.
|
// der eigentliche POST geht an Fortifys Controller.
|
||||||
Volt::route('/two-factor-challenge', 'auth.two-factor-challenge')
|
Route::livewire('/two-factor-challenge', 'auth.two-factor-challenge')
|
||||||
->middleware(['guest:'.config('fortify.guard')])
|
->middleware(['guest:'.config('fortify.guard')])
|
||||||
->name('two-factor.challenge');
|
->name('two-factor.challenge');
|
||||||
|
|
||||||
// Passwort bestätigen mit Livewire
|
// Passwort bestätigen mit Livewire
|
||||||
Volt::route('/confirm-password', 'auth.confirm-password')
|
Route::livewire('/confirm-password', 'auth.confirm-password')
|
||||||
->middleware(['auth:'.config('fortify.guard')])
|
->middleware(['auth:'.config('fortify.guard')])
|
||||||
->name('password.confirm');
|
->name('password.confirm');
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -10,7 +10,6 @@ use App\Http\Controllers\Web\PressReleaseReportController;
|
||||||
use App\Http\Middleware\EnsureUserIsCustomer;
|
use App\Http\Middleware\EnsureUserIsCustomer;
|
||||||
use App\Http\Middleware\LogSlowAdminRequests;
|
use App\Http\Middleware\LogSlowAdminRequests;
|
||||||
use Illuminate\Support\Facades\Route;
|
use Illuminate\Support\Facades\Route;
|
||||||
use Livewire\Volt\Volt;
|
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
// "Mein Bereich" – Eigentümer-Sicht im gemeinsamen Admin-Panel
|
// "Mein Bereich" – Eigentümer-Sicht im gemeinsamen Admin-Panel
|
||||||
|
|
@ -23,12 +22,12 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
|
||||||
->name('me.')
|
->name('me.')
|
||||||
->group(function () {
|
->group(function () {
|
||||||
|
|
||||||
Volt::route('/', 'customer.dashboard')->name('dashboard');
|
Route::livewire('/', 'customer.dashboard')->name('dashboard');
|
||||||
|
|
||||||
Volt::route('press-releases', 'customer.press-releases.index')->name('press-releases.index');
|
Route::livewire('press-releases', 'customer.press-releases.index')->name('press-releases.index');
|
||||||
Volt::route('press-releases/create', 'customer.press-releases.create')->name('press-releases.create');
|
Route::livewire('press-releases/create', 'customer.press-releases.create')->name('press-releases.create');
|
||||||
Volt::route('press-releases/{id}', 'customer.press-releases.show')->name('press-releases.show');
|
Route::livewire('press-releases/{id}', 'customer.press-releases.show')->name('press-releases.show');
|
||||||
Volt::route('press-releases/{id}/edit', 'customer.press-releases.edit')->name('press-releases.edit');
|
Route::livewire('press-releases/{id}/edit', 'customer.press-releases.edit')->name('press-releases.edit');
|
||||||
Route::get('press-releases/{id}/nachweis', ProofPdfController::class)
|
Route::get('press-releases/{id}/nachweis', ProofPdfController::class)
|
||||||
->where('id', '[0-9]+')
|
->where('id', '[0-9]+')
|
||||||
->name('press-releases.proof');
|
->name('press-releases.proof');
|
||||||
|
|
@ -39,14 +38,14 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
|
||||||
->where('pressReleaseId', '[0-9]+')
|
->where('pressReleaseId', '[0-9]+')
|
||||||
->name('press-releases.report');
|
->name('press-releases.report');
|
||||||
|
|
||||||
Volt::route('firmen', 'customer.press-kits.index')->name('press-kits.index');
|
Route::livewire('firmen', 'customer.press-kits.index')->name('press-kits.index');
|
||||||
Volt::route('firmen/anlegen', 'customer.press-kits.create')->name('press-kits.create');
|
Route::livewire('firmen/anlegen', 'customer.press-kits.create')->name('press-kits.create');
|
||||||
Volt::route('firmen/{id}', 'customer.press-kits.show')->name('press-kits.show');
|
Route::livewire('firmen/{id}', 'customer.press-kits.show')->name('press-kits.show');
|
||||||
Route::redirect('pressemappen', '/admin/me/firmen', 301);
|
Route::redirect('pressemappen', '/admin/me/firmen', 301);
|
||||||
Route::get('pressemappen/{id}', fn (string $id) => redirect("/admin/me/firmen/{$id}", 301))
|
Route::get('pressemappen/{id}', fn (string $id) => redirect("/admin/me/firmen/{$id}", 301))
|
||||||
->where('id', '[0-9]+');
|
->where('id', '[0-9]+');
|
||||||
|
|
||||||
Volt::route('buchungen-add-ons', 'customer.bookings')->name('bookings.index');
|
Route::livewire('buchungen-add-ons', 'customer.bookings')->name('bookings.index');
|
||||||
Route::get('checkout/abo/{planSlug}/{interval}', [CheckoutController::class, 'subscription'])
|
Route::get('checkout/abo/{planSlug}/{interval}', [CheckoutController::class, 'subscription'])
|
||||||
->whereIn('interval', ['monthly', 'yearly'])
|
->whereIn('interval', ['monthly', 'yearly'])
|
||||||
->name('checkout.subscription');
|
->name('checkout.subscription');
|
||||||
|
|
@ -65,14 +64,14 @@ Route::middleware(['auth', 'verified', EnsureUserIsCustomer::class, LogSlowAdmin
|
||||||
->name('checkout.change');
|
->name('checkout.change');
|
||||||
Route::get('checkout/abo-verwalten', [CheckoutController::class, 'billingPortal'])
|
Route::get('checkout/abo-verwalten', [CheckoutController::class, 'billingPortal'])
|
||||||
->name('checkout.billing-portal');
|
->name('checkout.billing-portal');
|
||||||
Volt::route('invoices', 'customer.invoices')->name('invoices.index');
|
Route::livewire('invoices', 'customer.invoices')->name('invoices.index');
|
||||||
Route::get('legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('invoices.pdf');
|
Route::get('legacy-invoices/{legacyInvoice}/pdf', LegacyInvoicePdfController::class)->name('invoices.pdf');
|
||||||
Route::get('invoices/{invoice}/stripe', StripeInvoiceRedirectController::class)->name('invoices.stripe');
|
Route::get('invoices/{invoice}/stripe', StripeInvoiceRedirectController::class)->name('invoices.stripe');
|
||||||
Route::get('invoices/{invoice}/pdf', InvoicePdfController::class)->name('invoices.manual-pdf');
|
Route::get('invoices/{invoice}/pdf', InvoicePdfController::class)->name('invoices.manual-pdf');
|
||||||
Volt::route('tokens', 'customer.tokens')->name('tokens.index');
|
Route::livewire('tokens', 'customer.tokens')->name('tokens.index');
|
||||||
|
|
||||||
Volt::route('profile', 'customer.profile')->name('profile');
|
Route::livewire('profile', 'customer.profile')->name('profile');
|
||||||
Volt::route('security', 'customer.security')->name('security');
|
Route::livewire('security', 'customer.security')->name('security');
|
||||||
});
|
});
|
||||||
|
|
||||||
// ============================================================
|
// ============================================================
|
||||||
|
|
|
||||||
|
|
@ -15,14 +15,14 @@ use Illuminate\Auth\Events\Login;
|
||||||
use Illuminate\Support\Facades\Mail;
|
use Illuminate\Support\Facades\Mail;
|
||||||
use Illuminate\Support\Facades\Notification;
|
use Illuminate\Support\Facades\Notification;
|
||||||
use Illuminate\Support\Facades\Queue;
|
use Illuminate\Support\Facades\Queue;
|
||||||
use Livewire\Volt\Volt;
|
use Livewire\Livewire;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
test('a self registration is recorded in the activity log', function () {
|
test('a self registration is recorded in the activity log', function () {
|
||||||
/** @var TestCase $this */
|
/** @var TestCase $this */
|
||||||
Notification::fake();
|
Notification::fake();
|
||||||
|
|
||||||
Volt::test('auth.register')
|
Livewire::test('auth.register')
|
||||||
->set('name', 'Verlauf Tester')
|
->set('name', 'Verlauf Tester')
|
||||||
->set('email', 'verlauf@example.com')
|
->set('email', 'verlauf@example.com')
|
||||||
->set('password', 'password')
|
->set('password', 'password')
|
||||||
|
|
@ -106,7 +106,7 @@ test('the activity report page lists events and filters by type', function () {
|
||||||
|
|
||||||
$this->get(route('admin.reports.activity'))->assertOk();
|
$this->get(route('admin.reports.activity'))->assertOk();
|
||||||
|
|
||||||
Volt::test('admin.reports.activity')
|
Livewire::test('admin.reports.activity')
|
||||||
->assertSee('Kontaktanfrage „Testthema“')
|
->assertSee('Kontaktanfrage „Testthema“')
|
||||||
->assertSee('hat sich angemeldet')
|
->assertSee('hat sich angemeldet')
|
||||||
->set('typeFilter', ActivityType::ContactRequest->value)
|
->set('typeFilter', ActivityType::ContactRequest->value)
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ use App\Models\User;
|
||||||
use App\Support\WebPageCache;
|
use App\Support\WebPageCache;
|
||||||
use Database\Seeders\RolesAndPermissionsSeeder;
|
use Database\Seeders\RolesAndPermissionsSeeder;
|
||||||
use Illuminate\Support\Facades\Cache;
|
use Illuminate\Support\Facades\Cache;
|
||||||
use Livewire\Volt\Volt as LivewireVolt;
|
use Livewire\Livewire;
|
||||||
use Tests\TestCase;
|
use Tests\TestCase;
|
||||||
|
|
||||||
beforeEach(function (): void {
|
beforeEach(function (): void {
|
||||||
|
|
@ -27,7 +27,7 @@ test('admin can render category create page', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('admin can create a new category with both translations', function () {
|
test('admin can create a new category with both translations', function () {
|
||||||
LivewireVolt::test('admin.categories.create')
|
Livewire::test('admin.categories.create')
|
||||||
->set('portal', Portal::Both->value)
|
->set('portal', Portal::Both->value)
|
||||||
->set('nameDe', 'Künstliche Intelligenz')
|
->set('nameDe', 'Künstliche Intelligenz')
|
||||||
->set('nameEn', 'Artificial Intelligence')
|
->set('nameEn', 'Artificial Intelligence')
|
||||||
|
|
@ -52,7 +52,7 @@ test('admin can create a new category with both translations', function () {
|
||||||
});
|
});
|
||||||
|
|
||||||
test('category create requires both names', function () {
|
test('category create requires both names', function () {
|
||||||
LivewireVolt::test('admin.categories.create')
|
Livewire::test('admin.categories.create')
|
||||||
->set('nameDe', '')
|
->set('nameDe', '')
|
||||||
->set('nameEn', '')
|
->set('nameEn', '')
|
||||||
->call('save')
|
->call('save')
|
||||||
|
|
@ -66,7 +66,7 @@ test('category create generates unique slug per locale on collision', function (
|
||||||
['locale' => 'en', 'name' => 'Business', 'slug' => 'business'],
|
['locale' => 'en', 'name' => 'Business', 'slug' => 'business'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
LivewireVolt::test('admin.categories.create')
|
Livewire::test('admin.categories.create')
|
||||||
->set('nameDe', 'Wirtschaft')
|
->set('nameDe', 'Wirtschaft')
|
||||||
->set('nameEn', 'Business')
|
->set('nameEn', 'Business')
|
||||||
->call('save')
|
->call('save')
|
||||||
|
|
@ -87,7 +87,7 @@ test('admin can edit an existing category and rename slugs in place', function (
|
||||||
['locale' => 'en', 'name' => 'Old Name', 'slug' => 'old-name'],
|
['locale' => 'en', 'name' => 'Old Name', 'slug' => 'old-name'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||||
->set('nameDe', 'Neuer Name')
|
->set('nameDe', 'Neuer Name')
|
||||||
->set('slugDe', 'neuer-name')
|
->set('slugDe', 'neuer-name')
|
||||||
->set('nameEn', 'New Name')
|
->set('nameEn', 'New Name')
|
||||||
|
|
@ -116,7 +116,7 @@ test('category edit refuses parent assignment that would create a hierarchy loop
|
||||||
['locale' => 'en', 'name' => 'Child', 'slug' => 'child-en'],
|
['locale' => 'en', 'name' => 'Child', 'slug' => 'child-en'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
LivewireVolt::test('admin.categories.edit', ['id' => $parent->id])
|
Livewire::test('admin.categories.edit', ['id' => $parent->id])
|
||||||
->set('nameDe', 'Parent')
|
->set('nameDe', 'Parent')
|
||||||
->set('slugDe', 'parent')
|
->set('slugDe', 'parent')
|
||||||
->set('nameEn', 'Parent')
|
->set('nameEn', 'Parent')
|
||||||
|
|
@ -137,7 +137,7 @@ test('category cannot be deleted while it has press releases', function () {
|
||||||
'category_id' => $category->id,
|
'category_id' => $category->id,
|
||||||
]);
|
]);
|
||||||
|
|
||||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||||
->call('deleteCategory');
|
->call('deleteCategory');
|
||||||
|
|
||||||
expect(Category::query()->find($category->id))->not->toBeNull();
|
expect(Category::query()->find($category->id))->not->toBeNull();
|
||||||
|
|
@ -150,7 +150,7 @@ test('category can be deleted when empty', function () {
|
||||||
['locale' => 'en', 'name' => 'Empty', 'slug' => 'empty-en'],
|
['locale' => 'en', 'name' => 'Empty', 'slug' => 'empty-en'],
|
||||||
]);
|
]);
|
||||||
|
|
||||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||||
->call('deleteCategory')
|
->call('deleteCategory')
|
||||||
->assertRedirect(route('admin.categories.index'));
|
->assertRedirect(route('admin.categories.index'));
|
||||||
|
|
||||||
|
|
@ -170,7 +170,7 @@ test('deactivating a category clears the cached public pages and its feed at onc
|
||||||
// Feed warm im Seiten-Cache.
|
// Feed warm im Seiten-Cache.
|
||||||
$this->get('https://presseecho.test/de/category/handel/feed')->assertSuccessful();
|
$this->get('https://presseecho.test/de/category/handel/feed')->assertSuccessful();
|
||||||
|
|
||||||
LivewireVolt::test('admin.categories.edit', ['id' => $category->id])
|
Livewire::test('admin.categories.edit', ['id' => $category->id])
|
||||||
->set('isActive', false)
|
->set('isActive', false)
|
||||||
->call('save')
|
->call('save')
|
||||||
->assertHasNoErrors();
|
->assertHasNoErrors();
|
||||||
|
|
@ -184,7 +184,7 @@ test('creating an active category clears the cached public pages at once', funct
|
||||||
$generation = WebPageCache::generation();
|
$generation = WebPageCache::generation();
|
||||||
Cache::put('web.llms.presseecho.test', 'alt', 3600);
|
Cache::put('web.llms.presseecho.test', 'alt', 3600);
|
||||||
|
|
||||||
LivewireVolt::test('admin.categories.create')
|
Livewire::test('admin.categories.create')
|
||||||
->set('portal', Portal::Presseecho->value)
|
->set('portal', Portal::Presseecho->value)
|
||||||
->set('nameDe', 'Energie')
|
->set('nameDe', 'Energie')
|
||||||
->set('nameEn', 'Energy')
|
->set('nameEn', 'Energy')
|
||||||
|
|
|
||||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Add a link
Reference in a new issue