diff --git a/app/Http/Livewire/Notifications/DiscordSettings.php b/app/Http/Livewire/Notifications/DiscordSettings.php index c503f7829..a0c801677 100644 --- a/app/Http/Livewire/Notifications/DiscordSettings.php +++ b/app/Http/Livewire/Notifications/DiscordSettings.php @@ -13,11 +13,11 @@ class DiscordSettings extends Component public Team|Server $model; protected $rules = [ - 'model.smtp_attributes.discord_active' => 'nullable|boolean', - 'model.smtp_attributes.discord_webhook' => 'required|url', + 'model.extra_attributes.discord_active' => 'nullable|boolean', + 'model.extra_attributes.discord_webhook' => 'required|url', ]; protected $validationAttributes = [ - 'model.smtp_attributes.discord_webhook' => 'Discord Webhook', + 'model.extra_attributes.discord_webhook' => 'Discord Webhook', ]; public function mount($model) { @@ -28,8 +28,8 @@ public function instantSave() try { $this->submit(); } catch (\Exception $e) { - $this->model->smtp_attributes->discord_active = false; - $this->addError('model.smtp_attributes.discord_webhook', $e->getMessage()); + $this->model->extra_attributes->discord_active = false; + $this->validate(); } } private function saveModel() diff --git a/app/Http/Livewire/Notifications/EmailSettings.php b/app/Http/Livewire/Notifications/EmailSettings.php index 96e6ac616..aad1f6a9c 100644 --- a/app/Http/Livewire/Notifications/EmailSettings.php +++ b/app/Http/Livewire/Notifications/EmailSettings.php @@ -13,27 +13,27 @@ class EmailSettings extends Component public Team|Server $model; protected $rules = [ - 'model.smtp_attributes.smtp_active' => 'nullable|boolean', - 'model.smtp_attributes.from_address' => 'required', - 'model.smtp_attributes.from_name' => 'required', - 'model.smtp_attributes.recipients' => 'required', - 'model.smtp_attributes.smtp_host' => 'required', - 'model.smtp_attributes.smtp_port' => 'required', - 'model.smtp_attributes.smtp_encryption' => 'nullable', - 'model.smtp_attributes.smtp_username' => 'nullable', - 'model.smtp_attributes.smtp_password' => 'nullable', - 'model.smtp_attributes.smtp_timeout' => 'nullable', - 'model.smtp_attributes.test_address' => 'nullable', + 'model.extra_attributes.smtp_active' => 'nullable|boolean', + 'model.extra_attributes.from_address' => 'required|email', + 'model.extra_attributes.from_name' => 'required', + 'model.extra_attributes.recipients' => 'required', + 'model.extra_attributes.smtp_host' => 'required', + 'model.extra_attributes.smtp_port' => 'required', + 'model.extra_attributes.smtp_encryption' => 'nullable', + 'model.extra_attributes.smtp_username' => 'nullable', + 'model.extra_attributes.smtp_password' => 'nullable', + 'model.extra_attributes.smtp_timeout' => 'nullable', + 'model.extra_attributes.test_notification_email' => 'nullable|email', ]; protected $validationAttributes = [ - 'model.smtp_attributes.from_address' => 'From Address', - 'model.smtp_attributes.from_name' => 'From Name', - 'model.smtp_attributes.recipients' => 'Recipients', - 'model.smtp_attributes.smtp_host' => 'Host', - 'model.smtp_attributes.smtp_port' => 'Port', - 'model.smtp_attributes.smtp_encryption' => 'Encryption', - 'model.smtp_attributes.smtp_username' => 'Username', - 'model.smtp_attributes.smtp_password' => 'Password', + 'model.extra_attributes.from_address' => 'From Address', + 'model.extra_attributes.from_name' => 'From Name', + 'model.extra_attributes.recipients' => 'Recipients', + 'model.extra_attributes.smtp_host' => 'Host', + 'model.extra_attributes.smtp_port' => 'Port', + 'model.extra_attributes.smtp_encryption' => 'Encryption', + 'model.extra_attributes.smtp_username' => 'Username', + 'model.extra_attributes.smtp_password' => 'Password', ]; public function mount($model) { @@ -54,6 +54,11 @@ private function saveModel() } public function instantSave() { - $this->saveModel(); + try { + $this->submit(); + } catch (\Exception $e) { + $this->model->extra_attributes->smtp_active = false; + $this->validate(); + } } } diff --git a/app/Models/Server.php b/app/Models/Server.php index 4858f39a2..c6c183ef7 100644 --- a/app/Models/Server.php +++ b/app/Models/Server.php @@ -23,22 +23,16 @@ protected static function booted() 'team_id', 'private_key_id', 'extra_attributes', - 'smtp_attributes', ]; public $casts = [ 'extra_attributes' => SchemalessAttributes::class, - 'smtp_attributes' => SchemalessAttributes::class, ]; public function scopeWithExtraAttributes(): Builder { return $this->extra_attributes->modelScope(); } - public function scopeWithSmtpAttributes(): Builder - { - return $this->smtp_attributes->modelScope(); - } public function standaloneDockers() { diff --git a/app/Models/Team.php b/app/Models/Team.php index f43ae0686..9432e19af 100644 --- a/app/Models/Team.php +++ b/app/Models/Team.php @@ -13,30 +13,32 @@ class Team extends BaseModel implements SendsDiscord, SendsEmail use Notifiable; protected $casts = [ - 'smtp_attributes' => SchemalessAttributes::class, + 'extra_attributes' => SchemalessAttributes::class, 'personal_team' => 'boolean', ]; protected $fillable = [ 'id', 'name', 'personal_team', - 'smtp_attributes', + 'extra_attributes', ]; public function routeNotificationForDiscord() { - return $this->smtp_attributes->get('discord_webhook'); + return $this->extra_attributes->get('discord_webhook'); } - public function routeNotificationForEmail(string $attribute = 'recipients') { - $recipients = $this->smtp_attributes->get($attribute, ''); - return explode(PHP_EOL, $recipients); + $recipients = $this->extra_attributes->get($attribute, ''); + if (is_null($recipients) || $recipients === '') { + return []; + } + return explode(',', $recipients); } public function scopeWithExtraAttributes(): Builder { - return $this->smtp_attributes->modelScope(); + return $this->extra_attributes->modelScope(); } public function projects() diff --git a/app/Notifications/Channels/EmailChannel.php b/app/Notifications/Channels/EmailChannel.php index 25e0f59b7..9c6840b95 100644 --- a/app/Notifications/Channels/EmailChannel.php +++ b/app/Notifications/Channels/EmailChannel.php @@ -15,8 +15,8 @@ public function send(SendsEmail $notifiable, Notification $notification): void { $this->bootConfigs($notifiable); if ($notification instanceof \App\Notifications\TestNotification) { - $bcc = $notifiable->routeNotificationForEmail('test_address'); - if (count($bcc) === 1) { + $bcc = $notifiable->routeNotificationForEmail('test_notification_email'); + if (count($bcc) === 0) { $bcc = $notifiable->routeNotificationForEmail(); } } else { @@ -29,8 +29,8 @@ public function send(SendsEmail $notifiable, Notification $notification): void [], fn (Message $message) => $message ->from( - $notifiable->smtp_attributes?->get('from_address'), - $notifiable->smtp_attributes?->get('from_name') + $notifiable->extra_attributes?->get('from_address'), + $notifiable->extra_attributes?->get('from_name') ) ->cc($bcc) ->bcc($bcc) @@ -44,12 +44,12 @@ private function bootConfigs($notifiable): void config()->set('mail.default', 'smtp'); config()->set('mail.mailers.smtp', [ "transport" => "smtp", - "host" => $notifiable->smtp_attributes?->get('smtp_host'), - "port" => $notifiable->smtp_attributes?->get('smtp_port'), - "encryption" => $notifiable->smtp_attributes?->get('smtp_encryption'), - "username" => $notifiable->smtp_attributes?->get('smtp_username'), - "password" => $notifiable->smtp_attributes?->get('smtp_password'), - "timeout" => $notifiable->smtp_attributes?->get('smtp_timeout'), + "host" => $notifiable->extra_attributes?->get('smtp_host'), + "port" => $notifiable->extra_attributes?->get('smtp_port'), + "encryption" => $notifiable->extra_attributes?->get('smtp_encryption'), + "username" => $notifiable->extra_attributes?->get('smtp_username'), + "password" => $notifiable->extra_attributes?->get('smtp_password'), + "timeout" => $notifiable->extra_attributes?->get('smtp_timeout'), "local_domain" => null, ]); } diff --git a/app/Notifications/TestNotification.php b/app/Notifications/TestNotification.php index ce395f828..d388635e7 100644 --- a/app/Notifications/TestNotification.php +++ b/app/Notifications/TestNotification.php @@ -29,8 +29,8 @@ public function __construct() public function via(object $notifiable): array { $channels = []; - $notifiable->smtp_attributes?->get('smtp_active') && $channels[] = EmailChannel::class; - $notifiable->smtp_attributes?->get('discord_active') && $channels[] = DiscordChannel::class; + $notifiable->extra_attributes?->get('smtp_active') && $channels[] = EmailChannel::class; + $notifiable->extra_attributes?->get('discord_active') && $channels[] = DiscordChannel::class; return $channels; } diff --git a/database/migrations/2023_03_20_112811_create_teams_table.php b/database/migrations/2023_03_20_112811_create_teams_table.php index 8fff7314f..4396c8db7 100644 --- a/database/migrations/2023_03_20_112811_create_teams_table.php +++ b/database/migrations/2023_03_20_112811_create_teams_table.php @@ -16,7 +16,7 @@ public function up(): void $table->string('uuid')->unique(); $table->string('name'); $table->boolean('personal_team')->default(false); - $table->schemalessAttributes('smtp_attributes'); + $table->schemalessAttributes('extra_attributes'); $table->timestamps(); }); } diff --git a/database/migrations/2023_03_24_140711_create_servers_table.php b/database/migrations/2023_03_24_140711_create_servers_table.php index ae0da4f36..84e2ab6ba 100644 --- a/database/migrations/2023_03_24_140711_create_servers_table.php +++ b/database/migrations/2023_03_24_140711_create_servers_table.php @@ -22,7 +22,6 @@ public function up(): void $table->foreignId('team_id'); $table->foreignId('private_key_id'); $table->schemalessAttributes('extra_attributes'); - $table->schemalessAttributes('smtp_attributes'); $table->timestamps(); }); } diff --git a/resources/views/livewire/notifications/discord-settings.blade.php b/resources/views/livewire/notifications/discord-settings.blade.php index 118c97a47..62c2ec69a 100644 --- a/resources/views/livewire/notifications/discord-settings.blade.php +++ b/resources/views/livewire/notifications/discord-settings.blade.php @@ -7,10 +7,10 @@
- +
- +
diff --git a/resources/views/livewire/notifications/email-settings.blade.php b/resources/views/livewire/notifications/email-settings.blade.php index 6b593ac1c..ac2bde6a1 100644 --- a/resources/views/livewire/notifications/email-settings.blade.php +++ b/resources/views/livewire/notifications/email-settings.blade.php @@ -7,28 +7,29 @@
- +
+
-
- - - + + +
- - - + + +
- - + +