['name' => 'Überweisung auf Veranstaltungskonto', 'description' => null], self::PAYMENT_NOT_DEFINED => ['name' => 'Sonstiges (Barzahlung, Zahlung vor Ort)', 'description' => null], ]; /** * Options-Schema je Zahlungsmodul. Definiert im Code (nicht in der DB), damit es * nicht mit dem Modul-Code auseinanderdriftet. In der DB stehen nur die Werte * (configuration-JSON auf available_payment_methods bzw. event_payment_methods). * * Jede Option: ['name' => string, 'label' => string, 'type' => string, 'required' => bool] * * @var array> */ public const array OPTIONS = [ self::PAYMENT_ACCOUNT_TRANSACTION => [ ['name' => 'account_owner', 'label' => 'Kontoinhaber', 'type' => 'string', 'required' => true], ['name' => 'iban', 'label' => 'IBAN', 'type' => 'string', 'required' => true], ['name' => 'bic', 'label' => 'BIC', 'type' => 'string', 'required' => false], ], self::PAYMENT_NOT_DEFINED => [], ]; protected $fillable = [ 'slug', ]; /** * Options-Schema für einen Slug. * * @return array */ public static function optionsFor(string $slug): array { return self::OPTIONS[$slug] ?? []; } /** * Namen aller Pflicht-Optionen eines Slugs. * * @return array */ public static function requiredOptionKeys(string $slug): array { return array_values(array_map( static fn (array $option) => $option['name'], array_filter(self::optionsFor($slug), static fn (array $option) => $option['required'] ?? false) )); } /** * Reduziert eine Konfiguration auf die im Code definierten Options-Keys des Slugs. * Unbekannte Keys werden verworfen -- das Schema (self::OPTIONS) ist die Autorität. * * @param array $config * @return array */ public static function sanitizeConfiguration(string $slug, array $config): array { $result = []; foreach (self::optionsFor($slug) as $option) { if (array_key_exists($option['name'], $config)) { $result[$option['name']] = $config[$option['name']]; } } return $result; } /** * Prüft, ob alle Pflicht-Optionen eines Slugs in der Konfiguration befüllt (non-empty) sind. * * @param array $config */ public static function isConfigurationComplete(string $slug, array $config): bool { foreach (self::requiredOptionKeys($slug) as $key) { $value = $config[$key] ?? null; if ($value === null || $value === '' || $value === []) { return false; } } return true; } }