id = $id;
}
public function updated(string $property): void
{
if ($property === 'statusFilter') {
$this->resetPage();
}
}
public function with(): array
{
$campaign = NewsletterCampaign::query()
->with('createdBy:id,name')
->findOrFail($this->id);
$recipients = $campaign->recipients()
->with('user:id,name')
->when($this->statusFilter !== '', fn ($query) => $query->where('status', $this->statusFilter))
->orderBy('id')
->paginate(50);
return [
'campaign' => $campaign,
'recipients' => $recipients,
'filterSummary' => app(CampaignRecipients::class)->describe($campaign->filters ?? []),
'recipientStatuses' => NewsletterRecipientStatus::cases(),
// Gesperrte Adressen zählen in keinen Kampagnenzähler — sie
// werden aus dem Protokoll abgeleitet.
'suppressedCount' => $campaign->recipients()
->where('status', NewsletterRecipientStatus::Suppressed->value)
->count(),
];
}
}; ?>
{{-- ============== PAGE HEADER ============== --}}
@if ($campaign->isDraft())
{{ __('Bearbeiten') }}
@endif
{{ __('Zurück') }}
{{-- ============== KPI-Reihe ============== --}}
{{ $campaign->status->label() }}
{{ $campaign->sent_at ? __('abgeschlossen :date', ['date' => $campaign->sent_at->format('d.m.Y H:i')]) : __('läuft…') }}
{{ __('abgemeldet') }}{{ $suppressedCount > 0 ? ' · '.__(':count gesperrt', ['count' => number_format($suppressedCount)]) : '' }}
{{ __('siehe Protokoll') }}
{{-- ============== INHALT ============== --}}
{{ __('Inhalt') }}
{{ $campaign->status->label() }}
{{ __('Betreff') }}: {{ $campaign->subject }}
{!! $campaign->sanitizedBody() !!}
{{-- ============== FILTER ============== --}}
{{ __('Empfänger-Auswahl') }}
@foreach ($filterSummary as $line)
- {{ $line }}
@endforeach
{{ __('Die Liste wurde beim Versandstart eingefroren. Abmeldungen nach dem Start werden beim Versand übersprungen und im Protokoll vermerkt.') }}
{{-- ============== PROTOKOLL ============== --}}
{{ __('Versand-Protokoll') }}
@foreach ($recipientStatuses as $status)
@endforeach
{{ number_format($recipients->total(), 0, ',', '.') }} {{ __('Einträge') }}
{{ __('Empfänger') }}
{{ __('E-Mail') }}
{{ __('Status') }}
{{ __('Versendet am') }}
{{ __('Fehler') }}
@forelse ($recipients as $recipient)
@if ($recipient->user)
{{ $recipient->user->name }}
@else
{{ __('Gelöschter User') }}
@endif
{{ $recipient->email }}
{{ $recipient->status->label() }}
{{ $recipient->sent_at?->format('d.m.Y H:i:s') ?? '—' }}
{{ $recipient->error ?? '' }}
@empty
{{ $campaign->isDraft()
? __('Noch kein Versand — die Kampagne ist ein Entwurf.')
: __('Keine Einträge für diesen Filter.') }}
@endforelse
@if ($recipients->hasPages())
{{ $recipients->links() }}
@endif