You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
72 lines
2.5 KiB
72 lines
2.5 KiB
<?php |
|
|
|
namespace App\Services; |
|
|
|
use App\Models\AppSetting; |
|
use Illuminate\Support\Facades\Config; |
|
|
|
class MailSettingsService |
|
{ |
|
private const KEYS = [ |
|
'mail_mailer', |
|
'mail_host', |
|
'mail_port', |
|
'mail_username', |
|
'mail_password', |
|
'mail_encryption', |
|
'mail_from_address', |
|
'mail_from_name', |
|
]; |
|
|
|
public function get(): array |
|
{ |
|
$stored = AppSetting::query() |
|
->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); |
|
} |
|
}
|
|
|