mailer(MailCatalogue::mailer('security-block')); } public function envelope(): Envelope { $host = $this->block->host; return $this->mailboxEnvelope( MailPurpose::SYSTEM, $host !== null ? __('security.mail_subject_host', ['host' => $host->name]) : __('security.mail_subject'), 'security-block', ); } public function content(): Content { $host = $this->block->host; // instance() statt eines eigenen Customer-Parameters: der Aufrufer // (BlockAddress) hat ohnehin nur den Datensatz, und ein zweiter Weg, // an dieselbe Instanz zu kommen, wäre eine zweite Stelle, an der der // Name veralten könnte. $customer = $this->block->instance?->customer; return new Content(view: 'mail.security-block', with: [ // Der Name des Hosts ist das Unterscheidungsmerkmal für die // Ansicht: gesetzt heißt Host-Sperre, null heißt Instanz-Sperre. // Ein zweites Flag daneben wäre eine zweite Wahrheit. 'hostName' => $host?->name, 'name' => (string) ($customer?->contact_name ?: $customer?->name ?: ''), 'ip' => $this->block->ip, 'attempts' => $this->block->attempts, 'blockedAt' => $this->block->blocked_at, 'expiresAt' => $this->block->expires_at, // Der Betreiber hat im Portal kein Konto, und Host-Sperren stehen // dort nie. Sein Weg zum Handgriff ist die Host-Detailseite der // Konsole, auf der die Host-Sperren mit ihrem Aufheben-Knopf // stehen (Aufgabe 6, App\Livewire\Admin\HostDetail). 'securityUrl' => $host !== null ? route('admin.hosts.show', $host) : route('portal.security'), ]); } }