Auswahl für die Sammelaktion „Als Spam markieren“. */ public array $selected = []; public string $notification = ''; public function updatedStatusFilter(): void { $this->selected = []; $this->resetPage(); } /** * Sammelaktion: ausgewählte Anliegen in die Spam-Quarantäne legen * (Spamschutz B3). Keine Mail, Löschung nach 30 Tagen. */ public function markSelectedAsSpam(): void { $this->authorize('compliance:manage'); $messages = ContactMessage::query() ->whereKey(array_map('intval', $this->selected)) ->where('status', '!=', ContactMessageStatus::Spam->value) ->get(); foreach ($messages as $message) { $message->markAsSpam(auth()->user()); } $this->selected = []; $this->notification = __(':count Anliegen als Spam markiert.', ['count' => $messages->count()]); } public function updatedTopicFilter(): void { $this->selected = []; $this->resetPage(); } public function with(): array { $messages = ContactMessage::query() ->when($this->statusFilter === 'open', fn ($query) => $query->open()) ->when(! in_array($this->statusFilter, ['open', 'all'], true), fn ($query) => $query->where('status', $this->statusFilter)) ->when($this->topicFilter !== 'all', fn ($query) => $query->where('topic', $this->topicFilter)) ->latest() ->paginate(50); return [ 'messages' => $messages, 'topicOptions' => ContactMessageTopic::cases(), 'openCount' => ContactMessage::query()->open()->count(), 'spamCount' => ContactMessage::query()->where('status', ContactMessageStatus::Spam->value)->count(), 'totalCount' => ContactMessage::query()->where('status', '!=', ContactMessageStatus::Spam->value)->count(), ]; } public function statusBadgeClass(ContactMessageStatus $status): string { return match ($status) { ContactMessageStatus::Open => 'warn', ContactMessageStatus::InProgress => 'hub', ContactMessageStatus::Resolved => 'ok', ContactMessageStatus::Rejected => 'err', ContactMessageStatus::Spam => 'muted', }; } }; ?>
{{-- ============== PAGE HEADER ============== --}} {{-- ============== KPI-Reihe ============== --}}
{{ __('zu bearbeiten') }} {{ __('offen + in Bearbeitung') }} {{ __('alle Anliegen') }} {{ __('inkl. erledigt, ohne Spam') }} {{ __('in Quarantäne') }} {{ __('ohne Mail, nach :days Tagen gelöscht', ['days' => \App\Models\ContactMessage::SPAM_RETENTION_DAYS]) }}
{{-- ============== FILTER ============== --}}
{{ __('Filter') }}
@foreach ($topicOptions as $topicOption) @endforeach
{{-- ============== TABELLE ============== --}}
{{ __('Anliegen') }}
@if (count($selected) > 0) {{ __(':count als Spam markieren', ['count' => count($selected)]) }} @endif {{ __(':count Einträge', ['count' => $messages->total()]) }}
@if ($notification)
{{ $notification }}
@endif {{ __('Auswahl') }} {{ __('Anliegen') }} {{ __('Status') }} {{ __('Absender') }} {{ __('Portal') }} {{ __('Eingegangen') }} {{ __('Aktion') }} @forelse ($messages as $message) @unless ($message->isSpam()) @endunless {{ $message->topic->label() }} {{ $message->reference() }} {{ $message->status->label() }} @if ($message->isSpam() && $message->spamReasonLabel()) {{ $message->spamReasonLabel() }} @elseif ($message->skippedBotCheck()) {{ __('ohne Bot-Prüfung') }} @endif {{ $message->name ?: __('anonym') }} {{ $message->email }} {{ $message->portal ?: '—' }} {{ $message->created_at?->format('d.m.Y H:i') ?? '-' }} {{ __('Öffnen') }} @empty
{{ __('Keine Anliegen in dieser Ansicht') }}

{{ __('Anliegen aus dem Kontakt-Widget (Kontaktaufnahme, Fehlermeldung, PM-Meldung, Feedback) laufen hier auf.') }}

@endforelse