mirror of
https://github.com/snipe/snipe-it.git
synced 2024-09-20 07:47:41 -07:00
Merge pull request #8438 from snipe/features/nicer_slack_ui
Nicer slack settings UI
This commit is contained in:
commit
b508482441
|
@ -6,13 +6,13 @@ use App\Http\Controllers\Controller;
|
|||
use App\Http\Transformers\LoginAttemptsTransformer;
|
||||
use App\Models\Setting;
|
||||
use App\Notifications\MailTest;
|
||||
use App\Notifications\SlackTest;
|
||||
use App\Services\LdapAd;
|
||||
use Illuminate\Http\JsonResponse;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Illuminate\Support\Facades\Notification;
|
||||
use GuzzleHttp\Client;
|
||||
|
||||
class SettingsController extends Controller
|
||||
{
|
||||
|
@ -91,24 +91,33 @@ class SettingsController extends Controller
|
|||
return response()->json($message, 200);
|
||||
}
|
||||
|
||||
public function slacktest()
|
||||
public function slacktest(Request $request)
|
||||
{
|
||||
|
||||
if ($settings = Setting::getSettings()->slack_channel=='') {
|
||||
\Log::debug('Slack is not enabled. Cannot test.');
|
||||
return response()->json(['message' => 'Slack is not enabled, cannot test.'], 400);
|
||||
}
|
||||
$slack = new Client([
|
||||
'base_url' => e($request->input('slack_endpoint')),
|
||||
'defaults' => [
|
||||
'exceptions' => false
|
||||
]
|
||||
]);
|
||||
|
||||
\Log::debug('Preparing to test slack connection');
|
||||
|
||||
$payload = json_encode(
|
||||
[
|
||||
'channel' => e($request->input('slack_channel')),
|
||||
'text' => trans('general.slack_test_msg'),
|
||||
'username' => e($request->input('slack_botname')),
|
||||
'icon_emoji' => ':heart:'
|
||||
]);
|
||||
|
||||
try {
|
||||
Notification::send($settings = Setting::getSettings(), new SlackTest());
|
||||
$slack->post($request->input('slack_endpoint'),['body' => $payload]);
|
||||
return response()->json(['message' => 'Success'], 200);
|
||||
} catch (\Exception $e) {
|
||||
\Log::debug('Slack connection failed');
|
||||
return response()->json(['message' => $e->getMessage()], 400);
|
||||
return response()->json(['message' => 'Oops! Please check the channel name and webhook endpoint URL. Slack responded with: '.$e->getMessage()], 400);
|
||||
}
|
||||
|
||||
return response()->json(['message' => 'Something went wrong :( '], 400);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,51 +0,0 @@
|
|||
<?php
|
||||
|
||||
namespace App\Notifications;
|
||||
|
||||
use App\Models\Setting;
|
||||
use Illuminate\Bus\Queueable;
|
||||
use Illuminate\Notifications\Messages\SlackMessage;
|
||||
use Illuminate\Notifications\Notification;
|
||||
|
||||
class SlackTest extends Notification
|
||||
{
|
||||
use Queueable;
|
||||
|
||||
/**
|
||||
* Create a new notification instance.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the notification's delivery channels.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return array
|
||||
*/
|
||||
public function via($notifiable)
|
||||
{
|
||||
return ['slack'];
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the Slack representation of the notification.
|
||||
*
|
||||
* @param mixed $notifiable
|
||||
* @return SlackMessage
|
||||
*/
|
||||
public function toSlack()
|
||||
{
|
||||
$settings = Setting::getSettings();
|
||||
return (new SlackMessage)
|
||||
->from($settings->slack_botname, ':heart:')
|
||||
->to($settings->slack_channel)
|
||||
->image('https://snipeitapp.com/favicon.ico')
|
||||
->content('Oh hai! Looks like your Slack integration with Snipe-IT is working!');
|
||||
}
|
||||
|
||||
}
|
|
@ -150,7 +150,7 @@ return array(
|
|||
'slack_channel' => 'Slack Channel',
|
||||
'slack_endpoint' => 'Slack Endpoint',
|
||||
'slack_integration' => 'Slack Settings',
|
||||
'slack_integration_help' => 'Slack integration is optional, however the endpoint and channel are required if you wish to use it. To configure Slack integration, you must first <a href=":slack_link" target="_new" rel="noopener">create an incoming webhook</a> on your Slack account.',
|
||||
'slack_integration_help' => 'Slack integration is optional, however the endpoint and channel are required if you wish to use it. To configure Slack integration, you must first <a href=":slack_link" target="_new" rel="noopener">create an incoming webhook</a> on your Slack account. Click on the <strong>Test Slack Integration</strong> button to confirm your settings are correct before saving. ',
|
||||
'slack_integration_help_button' => 'Once you have saved your Slack information, a test button will appear.',
|
||||
'slack_test_help' => 'Test whether your Slack integration is configured correctly. YOU MUST SAVE YOUR UPDATED SLACK SETTINGS FIRST.',
|
||||
'snipe_version' => 'Snipe-IT version',
|
||||
|
|
|
@ -202,6 +202,7 @@
|
|||
'sign_in' => 'Sign in',
|
||||
'signature' => 'Signature',
|
||||
'skin' => 'Skin',
|
||||
'slack_test_msg' => 'Oh hai! Looks like your Slack integration with Snipe-IT is working!',
|
||||
'some_features_disabled' => 'DEMO MODE: Some features are disabled for this installation.',
|
||||
'site_name' => 'Site Name',
|
||||
'state' => 'State',
|
||||
|
|
|
@ -47,30 +47,30 @@
|
|||
</p>
|
||||
|
||||
|
||||
<div class="col-md-11 col-md-offset-1" style="border-top: 0px;">
|
||||
<div class="col-md-12" style="border-top: 0px;">
|
||||
|
||||
|
||||
<!-- slack endpoint -->
|
||||
<div class="form-group {{ $errors->has('slack_endpoint') ? 'error' : '' }}">
|
||||
<div class="col-md-3">
|
||||
<div class="form-group required {{ $errors->has('slack_endpoint') ? 'error' : '' }}">
|
||||
<div class="col-md-2">
|
||||
{{ Form::label('slack_endpoint', trans('admin/settings/general.slack_endpoint')) }}
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class="col-md-10">
|
||||
@if (config('app.lock_passwords')===true)
|
||||
{{ Form::text('slack_endpoint', Request::old('slack_endpoint', $setting->slack_endpoint), array('class' => 'form-control','disabled'=>'disabled','placeholder' => 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXX')) }}
|
||||
{{ Form::text('slack_endpoint', Request::old('slack_endpoint', $setting->slack_endpoint), array('class' => 'form-control','disabled'=>'disabled','placeholder' => 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXX', 'id' => 'slack_endpoint')) }}
|
||||
@else
|
||||
{{ Form::text('slack_endpoint', Request::old('slack_endpoint', $setting->slack_endpoint), array('class' => 'form-control','placeholder' => 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXX')) }}
|
||||
{{ Form::text('slack_endpoint', Request::old('slack_endpoint', $setting->slack_endpoint), array('class' => 'form-control','placeholder' => 'https://hooks.slack.com/services/XXXXXXXXXXXXXXXXXXXXX', 'id' => 'slack_endpoint')) }}
|
||||
@endif
|
||||
{!! $errors->first('slack_endpoint', '<span class="alert-msg" aria-hidden="true">:message</span>') !!}
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- slack channel -->
|
||||
<div class="form-group {{ $errors->has('slack_channel') ? 'error' : '' }}">
|
||||
<div class="col-md-3">
|
||||
<div class="form-group required {{ $errors->has('slack_channel') ? 'error' : '' }}">
|
||||
<div class="col-md-2">
|
||||
{{ Form::label('slack_channel', trans('admin/settings/general.slack_channel')) }}
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class="col-md-10">
|
||||
@if (config('app.lock_passwords')===true)
|
||||
{{ Form::text('slack_channel', Request::old('slack_channel', $setting->slack_channel), array('class' => 'form-control','disabled'=>'disabled','placeholder' => '#IT-Ops')) }}
|
||||
@else
|
||||
|
@ -81,11 +81,11 @@
|
|||
</div>
|
||||
|
||||
<!-- slack botname -->
|
||||
<div class="form-group {{ $errors->has('slack_botname') ? 'error' : '' }}">
|
||||
<div class="col-md-3">
|
||||
<div class="form-group required {{ $errors->has('slack_botname') ? 'error' : '' }}">
|
||||
<div class="col-md-2">
|
||||
{{ Form::label('slack_botname', trans('admin/settings/general.slack_botname')) }}
|
||||
</div>
|
||||
<div class="col-md-8">
|
||||
<div class="col-md-10">
|
||||
@if (config('app.lock_passwords')===true)
|
||||
{{ Form::text('slack_botname', Request::old('slack_botname', $setting->slack_botname), array('class' => 'form-control','disabled'=>'disabled','placeholder' => 'Snipe-Bot')) }}
|
||||
@else
|
||||
|
@ -97,20 +97,18 @@
|
|||
|
||||
@if (($setting->slack_channel!='') && ($setting->slack_endpoint))
|
||||
<div class="form-group">
|
||||
<div class="col-md-3">
|
||||
{{ Form::label('est_slack', 'Test Slack') }}
|
||||
<div class="col-md-2">
|
||||
{{ Form::label('test_slack', 'Test Slack') }}
|
||||
</div>
|
||||
<div class="col-md-8" id="slacktestrow">
|
||||
<div class="col-md-10" id="slacktestrow">
|
||||
<a class="btn btn-default btn-sm pull-left" id="slacktest" style="margin-right: 10px;">Test <i class="fa fa-slack"></i> Integration</a>
|
||||
</div>
|
||||
<div class="col-md-8 col-md-offset-3">
|
||||
<div class="col-md-10 col-md-offset-2">
|
||||
<span id="slacktesticon"></span>
|
||||
<span id="slacktestresult"></span>
|
||||
<span id="slackteststatus"></span>
|
||||
</div>
|
||||
<div class="col-md-9 col-md-offset-3">
|
||||
<p class="help-block">{{ trans('admin/settings/general.slack_test_help') }}</p>
|
||||
</div>
|
||||
|
||||
|
||||
</div>
|
||||
@endif
|
||||
|
@ -121,7 +119,7 @@
|
|||
<a class="btn btn-link text-left" href="{{ route('settings.index') }}">{{ trans('button.cancel') }}</a>
|
||||
</div>
|
||||
<div class="text-right col-md-6">
|
||||
<button type="submit" class="btn btn-primary"><i class="fa fa-check icon-white" aria-hidden="true"></i> {{ trans('general.save') }}</button>
|
||||
<button type="submit" id="save_slack" class="btn btn-primary" disabled><i class="fa fa-check icon-white" aria-hidden="true"></i> {{ trans('general.save') }}</button>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
@ -133,9 +131,13 @@
|
|||
|
||||
@stop
|
||||
|
||||
@section('moar_scripts')
|
||||
@push('js')
|
||||
<script nonce="{{ csrf_token() }}">
|
||||
|
||||
|
||||
|
||||
$("#slacktest").click(function() {
|
||||
|
||||
$("#slacktestrow").removeClass('text-success');
|
||||
$("#slacktestrow").removeClass('text-danger');
|
||||
$("#slackteststatus").removeClass('text-danger');
|
||||
|
@ -149,21 +151,25 @@
|
|||
"X-CSRF-TOKEN": $('meta[name="csrf-token"]').attr('content')
|
||||
},
|
||||
data: {
|
||||
'ldaptest_user': $('#ldaptest_user').val(),
|
||||
'ldaptest_password': $('#ldaptest_password').val()
|
||||
'slack_endpoint': $('#slack_endpoint').val(),
|
||||
'slack_channel': $('#slack_channel').val(),
|
||||
'slack_botname': $('#slack_botname').val(),
|
||||
|
||||
},
|
||||
|
||||
dataType: 'json',
|
||||
|
||||
success: function (data) {
|
||||
$('#save_slack').removeAttr('disabled');
|
||||
$("#slacktesticon").html('');
|
||||
$("#slacktestrow").addClass('text-success');
|
||||
$("#slackteststatus").addClass('text-success');
|
||||
$("#slackteststatus").html('<i class="fa fa-check text-success"></i> Success! Check the {{ $setting->slack_channel}} channel for your test message');
|
||||
$("#slackteststatus").html('<i class="fa fa-check text-success"></i> Success! Check the ' + $('#slack_channel').val() + ' channel for your test message, and be sure to click SAVE below to store your settings.');
|
||||
},
|
||||
|
||||
error: function (data) {
|
||||
|
||||
|
||||
if (data.responseJSON) {
|
||||
var errors = data.responseJSON.message;
|
||||
} else {
|
||||
|
@ -172,6 +178,7 @@
|
|||
|
||||
var error_text = '';
|
||||
|
||||
$('#save_slack').attr("disabled", true);
|
||||
$("#slacktesticon").html('');
|
||||
$("#slackteststatus").addClass('text-danger');
|
||||
$("#slacktesticon").html('<i class="fa fa-exclamation-triangle text-danger"></i>');
|
||||
|
@ -206,4 +213,4 @@
|
|||
|
||||
</script>
|
||||
|
||||
@stop
|
||||
@endpush
|
||||
|
|
Loading…
Reference in a new issue