whereIn('key', self::KEYS) ->pluck('value', 'key') ->all(); return [ 'mail_mailer' => $stored['mail_mailer'] ?? env('MAIL_MAILER', 'smtp'), 'mail_host' => $stored['mail_host'] ?? env('MAIL_HOST', ''), 'mail_port' => $stored['mail_port'] ?? env('MAIL_PORT', '465'), 'mail_username' => $stored['mail_username'] ?? env('MAIL_USERNAME', ''), 'mail_password' => $stored['mail_password'] ?? env('MAIL_PASSWORD', ''), 'mail_encryption' => $stored['mail_encryption'] ?? env('MAIL_ENCRYPTION', 'ssl'), 'mail_from_address' => $stored['mail_from_address'] ?? env('MAIL_FROM_ADDRESS', 'support@geonet.co.id'), 'mail_from_name' => $stored['mail_from_name'] ?? env('MAIL_FROM_NAME', 'Geonet Support'), 'has_stored_password' => isset($stored['mail_password']) && $stored['mail_password'] !== '', ]; } public function update(array $data): void { foreach (self::KEYS as $key) { if (! array_key_exists($key, $data)) { continue; } if ($key === 'mail_password' && ($data[$key] === '' || $data[$key] === null)) { continue; } AppSetting::updateOrCreate( ['key' => $key], ['value' => (string) $data[$key]] ); } } public function apply(): void { $settings = $this->get(); Config::set('mail.default', $settings['mail_mailer'] ?: 'smtp'); Config::set('mail.from.address', $settings['mail_from_address']); Config::set('mail.from.name', $settings['mail_from_name']); Config::set('mail.mailers.smtp.host', $settings['mail_host']); Config::set('mail.mailers.smtp.port', (int) $settings['mail_port']); Config::set('mail.mailers.smtp.username', $settings['mail_username']); Config::set('mail.mailers.smtp.password', $settings['mail_password']); Config::set('mail.mailers.smtp.encryption', $settings['mail_encryption'] ?: null); } }