get()->sortBy('pos'); } public static function getCustomerMailDir(int $id): ?CMSContent { return CMSContent::where('identifier', '=', 'customer-mail-dirs')->where('pos', '=', $id)->first(); } public static function getCustomerMailName(CMSContent $mailDir, ?int $mailDirId): string { $model = self::resolveModel($mailDir, $mailDirId); if ($model === null) { return ''; } if ($mailDir->getArrayContent('model') === 'TravelCountry') { return $model->mail_dir_name ?? ''; } return $model->name ?? ''; } /** * @return array|string */ public static function getCustomerMailEmails(CMSContent $mailDir, ?int $mailDirId): array|string { $model = self::resolveModel($mailDir, $mailDirId); if ($model === null) { // Default: emails come directly from CMSContent return $mailDir->getArrayContent('emails') ?? []; } return $model->contact_emails ?? []; } /** * Returns subdirs from a mail collection that were not already in the output. * * @param \Illuminate\Database\Eloquent\Collection $mails Collection of CustomerMail or LeadMail * @return string[] */ public static function getMailDirsNotInOutput(iterable $mails, string $dir): array { $processed = self::$outputDirs[$dir] ?? []; $result = []; foreach ($mails as $mail) { if (!in_array($mail->subdir, $processed, true)) { $result[] = $mail->subdir; } } return $result; } private static function resolveModel(CMSContent $mailDir, ?int $mailDirId): mixed { if ($mailDirId === null) { return null; } return match ($mailDir->getArrayContent('model')) { 'TravelCountry' => \App\Models\Sym\TravelCountry::find($mailDirId), 'Airline' => Airline::find($mailDirId), 'Insurance' => Insurance::find($mailDirId), 'TravelCompany' => TravelCompany::find($mailDirId), default => null, }; } }