presseportale/app/Enums/ConversionSource.php
Kevin Adametz 4dffb1368f press-releases: Mail "wird persoenlich geprueft" beim Block, Blade-Guard fuer @php-Bloecke (Roadmap 1d, Nachtrag)
Der Autor bekommt beim Block nach dem letzten Rot (oder Gelb mit
eingeschalteter Queue) eine kurze Mail statt Stillstand: was passiert ist,
dass nichts zu tun ist, und dass das Ergebnis per Mail kommt. Laeuft ueber
notifyAuthor() wie Veroeffentlichung und Ablehnung (API-Regel, Sperrliste,
adressbezogene Abmeldung, Bounce-Referenz); Opt-out am Typ "abgelehnt".
Neue ConversionSource mail_review fuer den Link ins Konto.

BladePhpBlockGuardTest wendet das Compiler-Muster auf alle Views an und
faengt inline @php( vor einem spaeteren @endphp ab — fand den eigenen
Erklaer-Kommentar im Modal, der nur zufaellig funktionierte. Regel in
CLAUDE.md.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-16 15:05:47 +00:00

50 lines
1.6 KiB
PHP

<?php
namespace App\Enums;
/**
* Herkunft eines Konversionsereignisses (Roadmap Block 0).
*
* Der entscheidende Punkt: Der Wert wird auf dem MAGIC-LINK-TOKEN gespeichert,
* nicht in einer Session. Die zu messende Strecke führt über zwei Domains
* (presseecho.de → pressekonto.com), einen Mailclient und mögliche
* Weiterleitungen. Eine Session überlebt das nicht, ein Token schon. Ohne
* diesen Schritt wüsste man am Ende, dass jemand gebucht hat, aber nicht, ob er
* aus einer Ablehnungsmail kam — und genau das ist die Frage.
*/
enum ConversionSource: string
{
case MailPublish = 'mail_publish';
case MailReject = 'mail_reject';
/** Hinweis „ein Mensch prüft jetzt" nach erschöpfter Automatik (Roadmap 1d, E3). */
case MailReview = 'mail_review';
case ProfileClaim = 'profile_claim';
case Organic = 'organic';
public function label(): string
{
return match ($this) {
self::MailPublish => 'Veröffentlichungsmail',
self::MailReject => 'Ablehnungsmail',
self::MailReview => 'Prüfhinweis-Mail',
self::ProfileClaim => 'Hinweis auf der Newsroom-Seite',
self::Organic => 'ohne zugeordnete Herkunft',
};
}
/**
* Auflösung eines Werts aus einer URL oder einem Token.
*
* Unbekannte Werte werden zu `organic` statt zu einem Fehler: Der Parameter
* steht in fremder Hand (Mailclient, Weiterleitung, manuell getippt) und
* darf niemals einen Request scheitern lassen.
*/
public static function parse(?string $value): self
{
return self::tryFrom((string) $value) ?? self::Organic;
}
}