E-Mail-Praeferenzen: Opt-out je Mail-Typ + One-Click-Unsubscribe ohne Login
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
06d80b255b
commit
51da374173
21 changed files with 746 additions and 9 deletions
65
app/Enums/EmailNotificationType.php
Normal file
65
app/Enums/EmailNotificationType.php
Normal file
|
|
@ -0,0 +1,65 @@
|
|||
<?php
|
||||
|
||||
namespace App\Enums;
|
||||
|
||||
/**
|
||||
* Abbestellbare Benachrichtigungs-Mails (Opt-out je Typ).
|
||||
*
|
||||
* Umfasst bewusst nur Benachrichtigungen zum PM-Lebenszyklus — keine
|
||||
* System-/Transaktionsmails (Passwort-Reset, Magic-Link, Kündigungs-/
|
||||
* Widerrufsbestätigungen), die rechtlich bzw. funktional zwingend sind.
|
||||
* Jeder Case entspricht genau einer Mailable-Klasse; vor dem Versand wird
|
||||
* geprüft, ob der Empfänger den Typ abbestellt hat
|
||||
* (User::wantsEmailNotification()).
|
||||
*/
|
||||
enum EmailNotificationType: string
|
||||
{
|
||||
case PressReleasePublished = 'press_release_published';
|
||||
case PressReleaseRejected = 'press_release_rejected';
|
||||
case PressReleaseDepublished = 'press_release_depublished';
|
||||
|
||||
public function label(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PressReleasePublished => 'Pressemitteilung veröffentlicht',
|
||||
self::PressReleaseRejected => 'Pressemitteilung abgelehnt',
|
||||
self::PressReleaseDepublished => 'Pressemitteilung depubliziert',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Beschreibung für die Präferenzen-Einstellung im Kundenbereich.
|
||||
*/
|
||||
public function settingsDescription(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PressReleasePublished => 'Benachrichtigung, sobald eine von Ihnen eingereichte Pressemitteilung geprüft und veröffentlicht wurde.',
|
||||
self::PressReleaseRejected => 'Benachrichtigung, wenn eine eingereichte Pressemitteilung abgelehnt wurde — inklusive Ablehnungsgrund.',
|
||||
self::PressReleaseDepublished => 'Bestätigung, wenn eine beauftragte Depublikation durchgeführt wurde.',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* „Warum erhalten Sie diese E-Mail?"-Begründung im Mail-Footer.
|
||||
*/
|
||||
public function mailReason(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PressReleasePublished => 'Sie wurden als Pressekontakt hinterlegt und werden daher über die Veröffentlichung Ihrer Pressemitteilungen informiert.',
|
||||
self::PressReleaseRejected => 'Sie wurden als Pressekontakt hinterlegt und werden daher über die Ablehnung Ihrer eingereichten Pressemitteilungen informiert.',
|
||||
self::PressReleaseDepublished => 'Sie haben die Depublikation dieser Pressemitteilung beauftragt und erhalten daher diese Bestätigung.',
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Was der Empfänger mit dem Abmelde-Link abbestellt (Mail-Footer).
|
||||
*/
|
||||
public function unsubscribeLabel(): string
|
||||
{
|
||||
return match ($this) {
|
||||
self::PressReleasePublished => 'Benachrichtigungen über das Veröffentlichen Ihrer Pressemitteilungen',
|
||||
self::PressReleaseRejected => 'Benachrichtigungen über die Ablehnung Ihrer Pressemitteilungen',
|
||||
self::PressReleaseDepublished => 'Bestätigungen über die Depublikation Ihrer Pressemitteilungen',
|
||||
};
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue