<?php namespace App\Notifications; use Carbon\Carbon; use Illuminate\Bus\Queueable; use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Notifications\Notification; use App\Classes\FTN\Message; use App\Models\{Echomail,Netmail,Setup}; abstract class Netmails extends Notification //implements ShouldQueue { use Queueable; protected const via = 'netmail'; private const LOGKEY = 'NN-'; /** * Create a new notification instance. */ public function __construct() { $this->queue = 'netmail'; } /** * Get the notification's delivery channels. * * @param mixed $notifiable * @return array * @todo change to object $notifiable */ public function via($notifiable) { return [ self::via ]; } /** * Get the mail representation of the notification. * * @param mixed $notifiable * @return Netmail * @throws \Exception */ abstract public function toNetmail(object $notifiable): Netmail; protected function setupNetmail(object $notifiable): Netmail { // @todo Redirect netmails to Hubs or higher to the admin $ao = $notifiable->routeNotificationFor(static::via); $ao->load('system'); $o = new Netmail; $o->to = $ao->system->sysop; $o->from = Setup::PRODUCT_NAME; $o->datetime = Carbon::now()->utc(); $o->tzoffset = Carbon::now()->utcOffset(); $o->fftn_id = our_address($ao)->id; $o->tftn_id = $ao->id; $o->flags = (Message::FLAG_LOCAL|Message::FLAG_PRIVATE); $o->cost = 0; $o->set_tearline = sprintf('%s (%04X)',Setup::PRODUCT_NAME,Setup::PRODUCT_ID); return $o; } protected function sourceSummary(Echomail|Netmail $o,string $item=NULL): string { return sprintf("The %s was received here on [%s] and it looks like your system sent it on [%s].", $item ?: sprintf('%s with ID [%s] to [%s]',$o instanceof Netmail ? 'Netmail' : 'Echomail',$o->msgid,$o->to), Carbon::now()->utc()->toDateTimeString(), $o->date->utc()->toDateTimeString(), ); } }