From 354f04534e54540bf9566adf4692224940c6a66d Mon Sep 17 00:00:00 2001 From: Godfrey M Date: Wed, 1 Mar 2023 12:30:32 -0800 Subject: [PATCH] add multi array, migration, still having issues --- app/Http/Livewire/SlackSettingsForm.php | 71 ++-- ..._adds_webhook_option_to_settings_table.php | 39 +++ resources/lang/en/admin/settings/general.php | 20 +- .../livewire/slack-settings-form.blade.php | 306 +++++++++--------- 4 files changed, 256 insertions(+), 180 deletions(-) create mode 100644 database/migrations/2023_02_28_173527_adds_webhook_option_to_settings_table.php diff --git a/app/Http/Livewire/SlackSettingsForm.php b/app/Http/Livewire/SlackSettingsForm.php index 6df4bdeea3..996a30e236 100644 --- a/app/Http/Livewire/SlackSettingsForm.php +++ b/app/Http/Livewire/SlackSettingsForm.php @@ -8,56 +8,74 @@ use App\Models\Setting; class SlackSettingsForm extends Component { - public $slack_endpoint; - public $slack_channel; - public $slack_botname; + public $webhook_endpoint; + public $webhook_channel; + public $webhook_botname; public $isDisabled ='disabled' ; - public $integration_app= 'WORKING'; public $webhook_link; public $webhook_selected; - public $webhook_options= ['Slack'=>'fab fa-slack', 'Discord'=>'fab fa-discord', 'Rocket.Chat'=>'fab fa-rocketchat']; - public $webhook; + public $webhook_options = array( + array( + "name" => 'Slack', + "icon" => 'fab fa-slack', + "placeholder" => "https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXX", + "link" => 'https://api.slack.com/messaging/webhooks' + ), + 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' + ), + array( + "name" => 'Rocket Chat', + "icon" => 'fab fa-rocketchat', + "placeholder" => "https://discord.com/api/webhooks/XXXXXXXXXXXXXXXXXXXXX", + "link" => '', + ), + ); + public $keys; public $icon; public Setting $setting; protected $rules = [ - 'slack_endpoint' => 'url|required_with:slack_channel|starts_with:https://hooks.slack.com/|nullable', - 'slack_channel' => 'required_with:slack_endpoint|starts_with:#|nullable', - 'slack_botname' => 'string|nullable', + 'webhook_endpoint' => 'url|required_with:slack_channel|starts_with:https://hooks.slack.com/|nullable', + 'webhook_channel' => 'required_with:slack_endpoint|starts_with:#|nullable', + 'webhook_botname' => 'string|nullable', ]; public function mount(){ $this->setting = Setting::getSettings(); - $this->icon =''; - $this->webhook = $this->webhook_selected; - $this->slack_endpoint = $this->setting->slack_endpoint; - $this->slack_channel = $this->setting->slack_channel; - $this->slack_botname = $this->setting->slack_botname; + $this->webhook_endpoint = $this->setting->webhook_endpoint; + $this->webhook_channel = $this->setting->webhook_channel; + $this->webhook_botname = $this->setting->webhook_botname; +// $this->webhook_options = $this->setting->webhook_selected;lma + $this->keys = array_column($this->webhook_options, 'name'); + } public function updated($field){ - - $this->webhook = $this->webhook_selected; + $this->webhook_selected = $this->webhook_options; $this->validateOnly($field ,$this->rules); } public function render() { - if(empty($this->slack_channel || $this->slack_endpoint)){ + if(empty($this->webhook_channel || $this->webhook_endpoint)){ $this->isDisabled= 'disabled'; } - if(empty($this->slack_endpoint && $this->slack_channel)){ + if(empty($this->webhook_endpoint && $this->webhook_channel)){ $this->isDisabled= ''; } return view('livewire.slack-settings-form'); } - public function testSlack(){ + public function testWebhook(){ $slack = new Client([ - 'base_url' => e($this->slack_endpoint), + 'base_url' => e($this->webhook_endpoint), 'defaults' => [ 'exceptions' => false, ], @@ -65,14 +83,14 @@ class SlackSettingsForm extends Component $payload = json_encode( [ - 'channel' => e($this->slack_channel), + 'channel' => e($this->webhook_channel), 'text' => trans('general.slack_test_msg'), - 'username' => e($this->slack_botname), + 'username' => e($this->webhook_botname), 'icon_emoji' => ':heart:', ]); try { - $slack->post($this->slack_endpoint, ['body' => $payload]); + $slack->post($this->webhook_endpoint, ['body' => $payload]); $this->isDisabled=''; return session()->flash('success' , 'Your Slack Integration works!'); @@ -91,9 +109,10 @@ class SlackSettingsForm extends Component { $this->validate($this->rules); - $this->setting->slack_endpoint = $this->slack_endpoint; - $this->setting->slack_channel = $this->slack_channel; - $this->setting->slack_botname = $this->slack_botname; + $this->setting->webhook_options = $this->webhook_options; + $this->setting->webhook_endpoint = $this->webhook_endpoint; + $this->setting->webhook_channel = $this->webhook_channel; + $this->setting->webhook_botname = $this->webhook_botname; $this->setting->save(); 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 new file mode 100644 index 0000000000..8f59288226 --- /dev/null +++ b/database/migrations/2023_02_28_173527_adds_webhook_option_to_settings_table.php @@ -0,0 +1,39 @@ +string('webhook_selected')->after('slack_botname')->nullable(); + $table->renameColumn('slack_botname', 'webhook_botname'); + $table->renameColumn('slack_endpoint', 'webhook_endpoint'); + $table->renameColumn('slack_channel', 'webhook_channel'); + + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('settings', function (Blueprint $table) { + $table->dropColumn('webhook_selected'); + $table->renameColumn('webhook_botname', 'slack_botname'); + $table->renameColumn('webhook_endpoint', 'slack_endpoint'); + $table->renameColumn('webhook_channel', 'slack_channel'); + }); + } +} diff --git a/resources/lang/en/admin/settings/general.php b/resources/lang/en/admin/settings/general.php index d48714d7dd..81d40792ac 100644 --- a/resources/lang/en/admin/settings/general.php +++ b/resources/lang/en/admin/settings/general.php @@ -198,16 +198,16 @@ 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', - 'slack' => ':app', - 'slack_title' => 'Update :app Settings', - 'slack_help' => ':app settings', - 'slack_botname' => ':app Botname', - 'slack_channel' => ':app Channel', - 'slack_endpoint' => ':app Endpoint', - 'slack_integration' => ':app Settings', - 'slack_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. ', - 'slack_integration_help_button' => 'Once you have saved your :app information, a test button will appear.', - 'slack_test_help' => 'Test whether your :app integration is configured correctly. YOU MUST SAVE YOUR UPDATED :app SETTINGS FIRST.', + 'webhook' => ':app', + 'webhook_title' => 'Update :app Settings', + 'webhook_help' => ':app settings', + 'webhook_botname' => ':app Botname', + 'webhook_channel' => ':app Channel', + 'webhook_endpoint' => ':app Endpoint', + 'webhook_integration' => ':app Settings', + '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.', 'snipe_version' => 'Snipe-IT version', 'support_footer' => 'Support Footer Links ', 'support_footer_help' => 'Specify who sees the links to the Snipe-IT Support info and Users Manual', diff --git a/resources/views/livewire/slack-settings-form.blade.php b/resources/views/livewire/slack-settings-form.blade.php index 4878998ec8..b863a0aaed 100644 --- a/resources/views/livewire/slack-settings-form.blade.php +++ b/resources/views/livewire/slack-settings-form.blade.php @@ -1,6 +1,6 @@ {{-- Page title --}} @section('title') - {{ trans('admin/settings/general.slack_title', ['app' => $integration_app ]) }} + {{ trans('admin/settings/general.webhook_title', ['app' => $webhook_selected->name ]) }} @parent @stop @@ -12,159 +12,177 @@ {{-- Page content --}} @section('content') -
-
-
-
-

- {{ trans('admin/settings/general.slack',['app' => $integration_app ]) }} -

-
-
-
-

- {!! trans('admin/settings/general.slack_integration_help',array('slack_link' => $webhook_link, 'app' => $integration_app )) !!} -

-
-
- -
- @if (session()->has('save')) -
- {{session('save')}} -
- @endif - - @if(session()->has('success')) -
- {{session('success')}} -
- @endif - @if(session()->has('error')) -
- {{session('error')}} -
- @endif - @if(session()->has('message')) -
- {{session('message')}} -
- @endif -
-
- +
+
+
+
+

+ {{ trans('admin/settings/general.webhook',['app' => $webhook_selected->name ]) }} +

-
- - {{var_dump($webhook_selected)}} -



-
-
- {{csrf_field()}} +
+
+

+ {!! trans('admin/settings/general.webhook_integration_help',array('webhook_link' => $webhook_link, 'app' => $webhook_selected )) !!} +

+
+
- -
-
- {{ Form::label('slack_endpoint', trans('admin/settings/general.slack_endpoint',['app' => $integration_app ])) }} -
-
- @if (config('app.lock_passwords')===true) -

{{ trans('general.feature_disabled') }}

- - @else - - @endif - {!! $errors->first('slack_endpoint', '') !!} -
-
+
+ @if (session()->has('save')) +
+ {{session('save')}} +
+ @endif - -
-
- {{ Form::label('slack_channel', trans('admin/settings/general.slack_channel',['app' => $integration_app ])) }} -
-
- @if (config('app.lock_passwords')===true) - -

{{ trans('general.feature_disabled') }}

+ @if(session()->has('success')) +
+ {{session('success')}} +
+ @endif + @if(session()->has('error')) +
+ {{session('error')}} +
+ @endif + @if(session()->has('message')) +
+ {{session('message')}} +
+ @endif +
+
+ +
+
+{{-- - @endif - {!! $errors->first('slack_channel', '') !!} -
-
+{{-- --}} +
+


- -
-
- {{ Form::label('slack_botname', trans('admin/settings/general.slack_botname',['app' => $integration_app ])) }} -
-
- @if (config('app.lock_passwords')===true) - -

{{ trans('general.feature_disabled') }}

+
+ + {{csrf_field()}} - @else - - @endif - {!! $errors->first('slack_botname', '') !!} -
-
+ +
+
+ {{ Form::label('webhook_endpoint', trans('admin/settings/general.webhook_endpoint',['app' => $webhook_selected ])) }} +
+
+ @if (config('app.lock_passwords')===true) +

{{ trans('general.feature_disabled') }}

+ + @else + + @endif + {!! $errors->first('webhook_endpoint', '') !!} +
+
- - @if($slack_endpoint != null && $slack_channel != null) - - @endif + +
+
+ {{ Form::label('webhook_channel', trans('admin/settings/general.webhook_channel',['app' => $webhook_selected ])) }} +
+
+ @if (config('app.lock_passwords')===true) + +

{{ trans('general.feature_disabled') }}

- - + @else + + @endif + {!! $errors->first('webhook_channel', '') !!} +
+
-
-
-
+ +
+
+ {{ Form::label('webhook_botname', trans('admin/settings/general.webhook_botname',['app' => $webhook_selected ])) }} +
+
+ @if (config('app.lock_passwords')===true) + +

{{ trans('general.feature_disabled') }}

-@stop + @else + + @endif + {!! $errors->first('webhook_botname', '') !!} +
+
-@push('scripts') - -@endpush + + @endpush