diff --git a/app/Livewire/Notifications/Email.php b/app/Livewire/Notifications/Email.php index d81535a80..a4a16e5e5 100644 --- a/app/Livewire/Notifications/Email.php +++ b/app/Livewire/Notifications/Email.php @@ -31,11 +31,11 @@ class Email extends Component #[Validate(['nullable', 'string'])] public ?string $smtpHost = null; - #[Validate(['nullable', 'numeric'])] + #[Validate(['nullable', 'numeric', 'min:1', 'max:65535'])] public ?int $smtpPort = null; #[Validate(['nullable', 'string', 'in:tls,ssl,none'])] - public ?string $smtpEncryption = null; + public ?string $smtpEncryption = 'tls'; #[Validate(['nullable', 'string'])] public ?string $smtpUsername = null; @@ -170,6 +170,136 @@ class Email extends Component } } + public function submit() + { + try { + $this->resetErrorBag(); + $this->saveModel(); + } catch (\Throwable $e) { + return handleError($e, $this); + } + } + + public function saveModel() + { + $this->syncData(true); + refreshSession(); + $this->dispatch('success', 'Email notifications settings updated.'); + } + + public function instantSave(?string $type = null) + { + try { + $this->resetErrorBag(); + + if ($type === 'SMTP') { + $this->submitSmtp(); + } elseif ($type === 'Resend') { + $this->submitResend(); + } else { + $this->smtpEnabled = false; + $this->resendEnabled = false; + $this->saveModel(); + + return; + } + } catch (\Throwable $e) { + if ($type === 'SMTP') { + $this->smtpEnabled = false; + } elseif ($type === 'Resend') { + $this->resendEnabled = false; + } + + return handleError($e, $this); + } + } + + public function submitSmtp() + { + try { + $this->resetErrorBag(); + $this->validate([ + 'smtpEnabled' => 'boolean', + 'smtpFromAddress' => 'required|email', + 'smtpFromName' => 'required|string', + 'smtpHost' => 'required|string', + 'smtpPort' => 'required|numeric', + 'smtpEncryption' => 'required|string|in:tls,ssl,none', + 'smtpUsername' => 'nullable|string', + 'smtpPassword' => 'nullable|string', + 'smtpTimeout' => 'nullable|numeric', + ], [ + 'smtpFromAddress.required' => 'From Address is required.', + 'smtpFromAddress.email' => 'Please enter a valid email address.', + 'smtpFromName.required' => 'From Name is required.', + 'smtpHost.required' => 'SMTP Host is required.', + 'smtpPort.required' => 'SMTP Port is required.', + 'smtpPort.numeric' => 'SMTP Port must be a number.', + 'smtpEncryption.required' => 'Encryption type is required.', + ]); + + $settings = $this->team->emailNotificationSettings; + + $settings->resend_enabled = false; + $settings->use_instance_email_settings = false; + $this->resendEnabled = false; + $this->useInstanceEmailSettings = false; + + $settings->smtp_enabled = $this->smtpEnabled; + $settings->smtp_from_address = $this->smtpFromAddress; + $settings->smtp_from_name = $this->smtpFromName; + $settings->smtp_host = $this->smtpHost; + $settings->smtp_port = $this->smtpPort; + $settings->smtp_encryption = $this->smtpEncryption; + $settings->smtp_username = $this->smtpUsername; + $settings->smtp_password = $this->smtpPassword; + $settings->smtp_timeout = $this->smtpTimeout; + + $settings->save(); + refreshSession(); + $this->dispatch('success', 'SMTP settings updated.'); + } catch (\Throwable $e) { + $this->smtpEnabled = false; + + return handleError($e); + } + } + + public function submitResend() + { + try { + $this->resetErrorBag(); + $this->validate([ + 'resendEnabled' => 'boolean', + 'resendApiKey' => 'required|string', + 'smtpFromAddress' => 'required|email', + 'smtpFromName' => 'required|string', + ], [ + 'resendApiKey.required' => 'Resend API Key is required.', + 'smtpFromAddress.required' => 'From Address is required.', + 'smtpFromAddress.email' => 'Please enter a valid email address.', + 'smtpFromName.required' => 'From Name is required.', + ]); + $settings = $this->team->emailNotificationSettings; + + $settings->smtp_enabled = false; + $settings->use_instance_email_settings = false; + $this->smtpEnabled = false; + $this->useInstanceEmailSettings = false; + + $settings->resend_enabled = $this->resendEnabled; + $settings->resend_api_key = $this->resendApiKey; + $settings->smtp_from_address = $this->smtpFromAddress; + $settings->smtp_from_name = $this->smtpFromName; + + $settings->save(); + refreshSession(); + $this->dispatch('success', 'Resend settings updated.'); + } catch (\Throwable $e) { + return handleError($e, $this); + } + } + public function sendTestEmail() { try { @@ -198,90 +328,6 @@ class Email extends Component } } - public function instantSaveInstance() - { - try { - $this->smtpEnabled = false; - $this->resendEnabled = false; - $this->saveModel(); - } catch (\Throwable $e) { - return handleError($e, $this); - } - } - - public function instantSaveSmtpEnabled() - { - try { - $this->validate([ - 'smtpEnabled' => 'boolean', - 'smtpFromAddress' => 'required|email', - 'smtpFromName' => 'required|string', - 'smtpHost' => 'required|string', - 'smtpPort' => 'required|numeric', - 'smtpEncryption' => 'required|string|in:tls,ssl,none', - 'smtpUsername' => 'nullable|string', - 'smtpPassword' => 'nullable|string', - 'smtpTimeout' => 'nullable|numeric', - ], [ - 'smtpFromAddress.required' => 'From Address is required.', - 'smtpFromAddress.email' => 'Please enter a valid email address.', - 'smtpFromName.required' => 'From Name is required.', - 'smtpHost.required' => 'SMTP Host is required.', - 'smtpPort.required' => 'SMTP Port is required.', - 'smtpPort.numeric' => 'SMTP Port must be a number.', - 'smtpEncryption.required' => 'Encryption type is required.', - ]); - $this->resendEnabled = false; - $this->useInstanceEmailSettings = false; - $this->saveModel(); - } catch (\Throwable $e) { - $this->smtpEnabled = false; - - return handleError($e, $this); - } - } - - public function instantSaveResend() - { - try { - $this->validate([ - 'resendEnabled' => 'boolean', - 'resendApiKey' => 'required|string', - 'smtpFromAddress' => 'required|email', - 'smtpFromName' => 'required|string', - ], [ - 'resendApiKey.required' => 'Resend API Key is required.', - 'smtpFromAddress.required' => 'From Address is required.', - 'smtpFromAddress.email' => 'Please enter a valid email address.', - 'smtpFromName.required' => 'From Name is required.', - ]); - $this->smtpEnabled = false; - $this->useInstanceEmailSettings = false; - $this->saveModel(); - } catch (\Throwable $e) { - $this->resendEnabled = false; - - return handleError($e, $this); - } - } - - public function saveModel() - { - $this->syncData(true); - refreshSession(); - $this->dispatch('success', 'Settings saved.'); - } - - public function submit() - { - try { - $this->resetErrorBag(); - $this->saveModel(); - } catch (\Throwable $e) { - return handleError($e, $this); - } - } - public function copyFromInstanceSettings() { $settings = instanceSettings(); @@ -313,81 +359,6 @@ class Email extends Component $this->dispatch('error', 'Instance SMTP/Resend settings are not enabled.'); } - public function submitSmtp() - { - try { - $this->resetErrorBag(); - $this->validate([ - 'smtpEnabled' => 'boolean', - 'smtpFromAddress' => 'required|email', - 'smtpFromName' => 'required|string', - 'smtpHost' => 'required|string', - 'smtpPort' => 'required|numeric', - 'smtpEncryption' => 'required|string|in:tls,ssl,none', - 'smtpUsername' => 'nullable|string', - 'smtpPassword' => 'nullable|string', - 'smtpTimeout' => 'nullable|numeric', - ], [ - 'smtpFromAddress.required' => 'From Address is required.', - 'smtpFromAddress.email' => 'Please enter a valid email address.', - 'smtpFromName.required' => 'From Name is required.', - 'smtpHost.required' => 'SMTP Host is required.', - 'smtpPort.required' => 'SMTP Port is required.', - 'smtpPort.numeric' => 'SMTP Port must be a number.', - 'smtpEncryption.required' => 'Encryption type is required.', - ]); - - $settings = $this->team->emailNotificationSettings; - - $settings->smtp_enabled = $this->smtpEnabled; - $settings->smtp_from_address = $this->smtpFromAddress; - $settings->smtp_from_name = $this->smtpFromName; - $settings->smtp_host = $this->smtpHost; - $settings->smtp_port = $this->smtpPort; - $settings->smtp_encryption = $this->smtpEncryption; - $settings->smtp_username = $this->smtpUsername; - $settings->smtp_password = $this->smtpPassword; - $settings->smtp_timeout = $this->smtpTimeout; - - $settings->save(); - refreshSession(); - $this->dispatch('success', 'SMTP settings saved.'); - } catch (\Throwable $e) { - return handleError($e, $this); - } - } - - public function submitResend() - { - try { - $this->resetErrorBag(); - $this->validate([ - 'resendEnabled' => 'boolean', - 'resendApiKey' => 'required|string', - 'smtpFromAddress' => 'required|email', - 'smtpFromName' => 'required|string', - ], [ - 'resendApiKey.required' => 'Resend API Key is required.', - 'smtpFromAddress.required' => 'From Address is required.', - 'smtpFromAddress.email' => 'Please enter a valid email address.', - 'smtpFromName.required' => 'From Name is required.', - ]); - - $settings = $this->team->emailNotificationSettings; - - $settings->resend_enabled = $this->resendEnabled; - $settings->resend_api_key = $this->resendApiKey; - $settings->smtp_from_address = $this->smtpFromAddress; - $settings->smtp_from_name = $this->smtpFromName; - - $settings->save(); - refreshSession(); - $this->dispatch('success', 'Resend settings saved.'); - } catch (\Throwable $e) { - return handleError($e, $this); - } - } - public function render() { return view('livewire.notifications.email'); diff --git a/resources/views/livewire/notifications/email.blade.php b/resources/views/livewire/notifications/email.blade.php index 64530c1d4..868e27ce8 100644 --- a/resources/views/livewire/notifications/email.blade.php +++ b/resources/views/livewire/notifications/email.blade.php @@ -9,11 +9,6 @@ Save - @if (isInstanceAdmin() && !$useInstanceEmailSettings) - - Copy from Instance Settings - - @endif @if ($team->isNotificationEnabled('email') && auth()->user()->isAdminFromSession())
@@ -24,10 +19,15 @@
@endif + @if (isInstanceAdmin() && !$useInstanceEmailSettings) + + Copy from Instance Settings + + @endif @if (!isCloud())
- +
@endif @if (!$useInstanceEmailSettings) @@ -39,7 +39,7 @@ @if (isCloud())
- +
@endif @if (!$useInstanceEmailSettings) @@ -52,7 +52,7 @@
- +
@@ -81,7 +81,7 @@
- +