diff --git a/app/Http/Livewire/SlackSettingsForm.php b/app/Http/Livewire/SlackSettingsForm.php index ac94743383..0794aedd40 100644 --- a/app/Http/Livewire/SlackSettingsForm.php +++ b/app/Http/Livewire/SlackSettingsForm.php @@ -12,6 +12,7 @@ class SlackSettingsForm extends Component public $webhook_channel; public $webhook_botname; public $isDisabled ='disabled' ; + public $webhook_name; public $webhook_link; public $webhook_placeholder; public $webhook_icon; @@ -20,31 +21,38 @@ class SlackSettingsForm extends Component public Setting $setting; protected $rules = [ - 'webhook_endpoint' => 'url|required_with:slack_channel|starts_with:https://hooks.slack.com/|nullable', - 'webhook_channel' => 'required_with:slack_endpoint|starts_with:#|nullable', + 'webhook_endpoint' => 'url|required_with:webhook_channel|starts_with:https://hooks.slack.com/services,https://discord.com/api/webhooks|nullable', + 'webhook_channel' => 'required_with:webhook_endpoint|starts_with:#|nullable', 'webhook_botname' => 'string|nullable', ]; static $webhook_text= [ "Slack" => array( + "name" => "Slack", "icon" => 'fab fa-slack', "placeholder" => "https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXX", - "link" => 'https://api.slack.com/messaging/webhooks' + "link" => 'https://api.slack.com/messaging/webhooks', ), "Discord" => array( + "name" => "Discord", "icon" => 'fab fa-discord', "placeholder" => "https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXXXX", - "link" => 'https://support.discord.com/hc/en-us/articles/360045093012-Server-Integrations-Page' + "link" => 'https://support.discord.com/hc/en-us/articles/360045093012-Server-Integrations-Page', ), - "RocketChat"=> array( - "icon" => 'fab fa-rocketchat', - "placeholder" => "https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXXXX", - "link" => '', + "General"=> array( + "name" => "General", + "icon" => "fab fa-hashtag", + "placeholder" => "", + "link" => "", ), ]; public function mount(){ $this->setting = Setting::getSettings(); + $this->webhook_selected = $this->setting->webhook_selected; + $this->webhook_placeholder = self::$webhook_text[$this->setting->webhook_selected]["placeholder"]; + $this->webhook_name = self::$webhook_text[$this->setting->webhook_selected]["name"]; + $this->webhook_icon = self::$webhook_text[$this->setting->webhook_selected]["icon"]; $this->webhook_endpoint = $this->setting->webhook_endpoint; $this->webhook_channel = $this->setting->webhook_channel; $this->webhook_botname = $this->setting->webhook_botname; @@ -53,11 +61,12 @@ class SlackSettingsForm extends Component } public function updated($field){ -// $this->webhook_selected = $this->webhook_options; - $this->validateOnly($field ,$this->rules); + if($this->webhook_selected != 'General') { + $this->validateOnly($field, $this->rules); + } } public function updatedWebhookSelected(){ - + $this->webhook_name = self::$webhook_text[$this->webhook_selected]['name']; $this->webhook_icon = self::$webhook_text[$this->webhook_selected]["icon"]; ; $this->webhook_placeholder = self::$webhook_text[$this->webhook_selected]["placeholder"]; $this->webhook_link = self::$webhook_text[$this->webhook_selected]["link"]; @@ -77,7 +86,7 @@ class SlackSettingsForm extends Component public function testWebhook(){ - $slack = new Client([ + $webhook = new Client([ 'base_url' => e($this->webhook_endpoint), 'defaults' => [ 'exceptions' => false, @@ -87,36 +96,39 @@ class SlackSettingsForm extends Component $payload = json_encode( [ 'channel' => e($this->webhook_channel), - 'text' => trans('general.slack_test_msg'), + 'text' => trans('general.webhook_test_msg'), 'username' => e($this->webhook_botname), 'icon_emoji' => ':heart:', ]); try { - $slack->post($this->webhook_endpoint, ['body' => $payload]); + $webhook->post($this->webhook_endpoint, ['body' => $payload]); $this->isDisabled=''; - return session()->flash('success' , 'Your Slack Integration works!'); + return session()->flash('success' , 'Your'.$this->webhook_name.' Integration works!'); } catch (\Exception $e) { $this->isDisabled= 'disabled'; - return session()->flash('error' , trans('admin/settings/message.slack.error', ['error_message' => $e->getMessage()])); + return session()->flash('error' , trans('admin/settings/message.webhook.error', ['error_message' => $e->getMessage()])); } //} - return session()->flash('message' , trans('admin/settings/message.slack.error_misc')); + return session()->flash('message' , trans('admin/settings/message.webhook.error_misc')); } public function submit() { - $this->validate($this->rules); + if($this->webhook_selected != 'General') { + $this->validate($this->rules); + } - $this->setting->webhook_selected = $this->webhwebhook_selected; + $this->setting->webhook_selected = $this->webhook_selected; $this->setting->webhook_endpoint = $this->webhook_endpoint; $this->setting->webhook_channel = $this->webhook_channel; $this->setting->webhook_botname = $this->webhook_botname; + $this->setting->save(); session()->flash('save',trans('admin/settings/message.update.success')); diff --git a/database/migrations/2023_02_28_173527_adds_webhook_option_to_settings_table.php b/database/migrations/2023_02_28_173527_adds_webhook_option_to_settings_table.php index 8f59288226..02d7f5e4e9 100644 --- a/database/migrations/2023_02_28_173527_adds_webhook_option_to_settings_table.php +++ b/database/migrations/2023_02_28_173527_adds_webhook_option_to_settings_table.php @@ -14,7 +14,7 @@ class AddsWebhookOptionToSettingsTable extends Migration public function up() { Schema::table('settings', function (Blueprint $table) { - $table->string('webhook_selected')->after('slack_botname')->nullable(); + $table->string('webhook_selected')->after('slack_botname')->default('Slack');nullable(); $table->renameColumn('slack_botname', 'webhook_botname'); $table->renameColumn('slack_endpoint', 'webhook_endpoint'); $table->renameColumn('slack_channel', 'webhook_channel'); diff --git a/resources/lang/en/admin/settings/general.php b/resources/lang/en/admin/settings/general.php index 81d40792ac..401efd910c 100644 --- a/resources/lang/en/admin/settings/general.php +++ b/resources/lang/en/admin/settings/general.php @@ -198,13 +198,15 @@ return [ 'show_images_in_email' => 'Show images in emails', 'show_images_in_email_help' => 'Uncheck this box if your Snipe-IT installation is behind a VPN or closed network and users outside the network will not be able to load images served from this installation in their emails.', 'site_name' => 'Site Name', - 'webhook' => ':app', - 'webhook_title' => 'Update :app Settings', - 'webhook_help' => ':app settings', + 'integrations' => 'Integrations', + 'webhook' => ':app', + 'webhook_title' => 'Update Webhook Settings', + 'webhook_help' => 'Integration settings', 'webhook_botname' => ':app Botname', 'webhook_channel' => ':app Channel', 'webhook_endpoint' => ':app Endpoint', 'webhook_integration' => ':app Settings', + 'webhook_test' =>':app test integration', 'webhook_integration_help' => ':app integration is optional, however the endpoint and channel are required if you wish to use it. To configure :app integration, you must first create an incoming webhook on your :app account. Click on the Test :app Integration button to confirm your settings are correct before saving. ', 'webhook_integration_help_button' => 'Once you have saved your :app information, a test button will appear.', 'webhook_test_help' => 'Test whether your :app integration is configured correctly. YOU MUST SAVE YOUR UPDATED :app SETTINGS FIRST.', diff --git a/resources/lang/en/admin/settings/message.php b/resources/lang/en/admin/settings/message.php index b0648d1c1c..a4aba73ff7 100644 --- a/resources/lang/en/admin/settings/message.php +++ b/resources/lang/en/admin/settings/message.php @@ -33,7 +33,7 @@ return [ 'testing_authentication' => 'Testing LDAP Authentication...', 'authentication_success' => 'User authenticated against LDAP successfully!' ], - 'slack' => [ + 'webhook' => [ 'sending' => 'Sending Slack test message...', 'success_pt1' => 'Success! Check the ', 'success_pt2' => ' channel for your test message, and be sure to click SAVE below to store your settings.', diff --git a/resources/lang/en/general.php b/resources/lang/en/general.php index cc7ee7fa1c..fae0e9a585 100644 --- a/resources/lang/en/general.php +++ b/resources/lang/en/general.php @@ -249,8 +249,8 @@ return [ 'signature' => 'Signature', 'signed_off_by' => 'Signed Off By', 'skin' => 'Skin', - 'slack_msg_note' => 'A slack message will be sent', - 'slack_test_msg' => 'Oh hai! Looks like your Slack integration with Snipe-IT is working!', + 'webhook_msg_note' => 'A :app message will be sent', + 'webhook_test_msg' => 'Oh hai! Looks like your :app integration with Snipe-IT is working!', 'some_features_disabled' => 'DEMO MODE: Some features are disabled for this installation.', 'site_name' => 'Site Name', 'state' => 'State', diff --git a/resources/views/livewire/slack-settings-form.blade.php b/resources/views/livewire/slack-settings-form.blade.php index c435ae0c4a..ea8262e1c5 100644 --- a/resources/views/livewire/slack-settings-form.blade.php +++ b/resources/views/livewire/slack-settings-form.blade.php @@ -1,4 +1,34 @@ + + {{-- Page title --}} + @section('title') + {{ trans('admin/settings/general.webhook_title') }} + @parent + @stop + + @section('header_right') + {{ trans('general.back') }} + @stop + + + {{-- Page content --}} + @section('content') +
+ {!! trans('admin/settings/general.webhook_integration_help',array('webhook_link' => $webhook_link, 'app' => $webhook_name)) !!} +
+- {!! trans('admin/settings/general.slack_integration_help',array('slack_link' => 'https://my.slack.com/services/new/incoming-webhook')) !!} -
-