Add the ability to select a template when adding an incident.

This commit is contained in:
Data-Kiss
2019-10-09 19:56:14 +01:00
parent 212d807653
commit 4b5ee6668f
11 changed files with 154 additions and 108 deletions

View File

@@ -17,6 +17,7 @@ use CachetHQ\Cachet\Bus\Commands\IncidentUpdate\UpdateIncidentUpdateCommand;
use CachetHQ\Cachet\Integrations\Contracts\System; use CachetHQ\Cachet\Integrations\Contracts\System;
use CachetHQ\Cachet\Models\Incident; use CachetHQ\Cachet\Models\Incident;
use CachetHQ\Cachet\Models\IncidentUpdate; use CachetHQ\Cachet\Models\IncidentUpdate;
use CachetHQ\Cachet\Models\IncidentTemplate;
use GrahamCampbell\Binput\Facades\Binput; use GrahamCampbell\Binput\Facades\Binput;
use Illuminate\Contracts\Auth\Guard; use Illuminate\Contracts\Auth\Guard;
use Illuminate\Routing\Controller; use Illuminate\Routing\Controller;
@@ -88,6 +89,7 @@ class IncidentUpdateController extends Controller
{ {
return View::make('dashboard.incidents.updates.add') return View::make('dashboard.incidents.updates.add')
->withIncident($incident) ->withIncident($incident)
->withIncidentTemplates(IncidentTemplate::all())
->withNotificationsEnabled($this->system->canNotifySubscribers()); ->withNotificationsEnabled($this->system->canNotifySubscribers());
} }

View File

@@ -44,4 +44,4 @@
"type": "opencollective", "type": "opencollective",
"url": "https://opencollective.com/Cachet" "url": "https://opencollective.com/Cachet"
} }
} }

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

56
public/dist/js/all.js vendored

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,8 +1,8 @@
{ {
"/dist/js/vendor.js": "/dist/js/vendor.js?id=313e4cd2cf600307cb5c", "/dist/js/vendor.js": "/dist/js/vendor.js?id=313e4cd2cf600307cb5c",
"/dist/js/app.js": "/dist/js/app.js?id=be35dd18d92eef9dee9f", "/dist/js/app.js": "/dist/js/app.js?id=04c40dcd7fc0f91a2cc1",
"/dist/css/dashboard/dashboard.css": "/dist/css/dashboard/dashboard.css?id=654823be1de9b1245f17", "/dist/css/dashboard/dashboard.css": "/dist/css/dashboard/dashboard.css?id=2e8a315f9f8f01a60080",
"/dist/css/app.css": "/dist/css/app.css?id=1b9032e972af93e2c869", "/dist/css/app.css": "/dist/css/app.css?id=bb04d4c61e5b5d02a938",
"/dist/js/manifest.js": "/dist/js/manifest.js?id=40dcfff9d09d402daf38", "/dist/js/manifest.js": "/dist/js/manifest.js?id=40dcfff9d09d402daf38",
"/dist/js/all.js": "/dist/js/all.js?id=c77bbe3fb26a84b5347d" "/dist/js/all.js": "/dist/js/all.js?id=eb6400680943aee8df85"
} }

View File

@@ -186,7 +186,7 @@ $(function () {
}); });
// Incident management // Incident management
/*$('select[name=template]').on('change', function () { $('select[name=template]').on('change', function () {
var $this = $(this).find('option:selected'), var $this = $(this).find('option:selected'),
slug = $this.val(); slug = $this.val();
@@ -208,7 +208,7 @@ $(function () {
} }
}); });
} }
});*/ });
// Banner removal JS // Banner removal JS
$('#remove-banner').on('click', function (){ $('#remove-banner').on('click', function (){

View File

@@ -2,6 +2,7 @@
const Vue = require('vue'); const Vue = require('vue');
Vue.component('report-incident', require('./ReportIncident')); Vue.component('report-incident', require('./ReportIncident'));
Vue.component('update-incident', require('./UpdateIncident'));
Vue.component('report-schedule', require('./ReportSchedule')); Vue.component('report-schedule', require('./ReportSchedule'));
Vue.component('invite-team', require('./InviteTeam')); Vue.component('invite-team', require('./InviteTeam'));

View File

@@ -0,0 +1,30 @@
<script>
module.exports = {
data () {
return {
template: null,
status: null,
message: '',
}
},
methods: {
getTemplate (template) {
axios.get('/dashboard/api/incidents/templates', {
params: {
slug: template
}
}).then(response => {
this.name = response.data.name
this.message = response.data.template
}).catch(response => {
(new Cachet.Notifier()).notify('There was an error finding that template.');
})
}
},
watch: {
'template' (template) {
this.getTemplate(template)
}
}
}
</script>

View File

@@ -19,87 +19,100 @@
</div> </div>
@endif @endif
@include('partials.errors') @include('partials.errors')
<form class="form-vertical" name="IncidentUpdateForm" role="form" method="POST" autocomplete="off"> <update-incident inline-template>
<input type="hidden" name="_token" value="{{ csrf_token() }}"> <form class="form-vertical" name="IncidentUpdateForm" role="form" method="POST" autocomplete="off">
<fieldset> <input type="hidden" name="_token" value="{{ csrf_token() }}">
<div class="form-group"> <fieldset>
<label for="incident-name">{{ trans('forms.incidents.status') }}</label><br> @if($incidentTemplates->count() > 0)
<label class="radio-inline"> <div class="form-group">
<input type="radio" name="status" value="1" required {{ (int) Binput::old('status') === 1 ? 'checked' : null }}> <label for="incident-template">{{ trans('forms.incidents.templates.template') }}</label>
<i class="icon ion-flag"></i> <select class="form-control" name="template" v-model="template">
{{ trans('cachet.incidents.status')[1] }} <option selected></option>
</label> @foreach($incidentTemplates as $tpl)
<label class="radio-inline"> <option value="{{ $tpl->slug }}">{{ $tpl->name }}</option>
<input type="radio" name="status" value="2" required {{ (int) Binput::old('status') === 2 ? 'checked' : null }}>
<i class="icon ion-alert-circled"></i>
{{ trans('cachet.incidents.status')[2] }}
</label>
<label class="radio-inline">
<input type="radio" name="status" value="3" required {{ (int) Binput::old('status') === 3 ? 'checked' : null }}>
<i class="icon ion-eye"></i>
{{ trans('cachet.incidents.status')[3] }}
</label>
<label class="radio-inline">
<input type="radio" name="status" value="4" required {{ (int) Binput::old('status') === 4 ? 'checked' : null }}>
<i class="icon ion-checkmark"></i>
{{ trans('cachet.incidents.status')[4] }}
</label>
</div>
@if($incident->component)
<div class="form-group hidden" id="component-status">
<input type="hidden" name="component_id" value="{{ $incident->component->id }}">
<div class="panel panel-default">
<div class="panel-body">
<div class="radio-items">
@foreach(trans('cachet.components.status') as $statusID => $status)
<div class="radio-inline">
<label>
<input type="radio" name="component_status" value="{{ $statusID }}">
{{ $status }}
</label>
</div>
@endforeach @endforeach
</select>
</div>
@endif
<div class="form-group">
<label for="incident-name">{{ trans('forms.incidents.status') }}</label><br>
<label class="radio-inline">
<input type="radio" name="status" value="1" required {{ (int) Binput::old('status') === 1 ? 'checked' : null }}>
<i class="icon ion-flag"></i>
{{ trans('cachet.incidents.status')[1] }}
</label>
<label class="radio-inline">
<input type="radio" name="status" value="2" required {{ (int) Binput::old('status') === 2 ? 'checked' : null }}>
<i class="icon ion-alert-circled"></i>
{{ trans('cachet.incidents.status')[2] }}
</label>
<label class="radio-inline">
<input type="radio" name="status" value="3" required {{ (int) Binput::old('status') === 3 ? 'checked' : null }}>
<i class="icon ion-eye"></i>
{{ trans('cachet.incidents.status')[3] }}
</label>
<label class="radio-inline">
<input type="radio" name="status" value="4" required {{ (int) Binput::old('status') === 4 ? 'checked' : null }}>
<i class="icon ion-checkmark"></i>
{{ trans('cachet.incidents.status')[4] }}
</label>
</div>
@if($incident->component)
<div class="form-group hidden" id="component-status">
<input type="hidden" name="component_id" value="{{ $incident->component->id }}">
<div class="panel panel-default">
<div class="panel-body">
<div class="radio-items">
@foreach(trans('cachet.components.status') as $statusID => $status)
<div class="radio-inline">
<label>
<input type="radio" name="component_status" value="{{ $statusID }}">
{{ $status }}
</label>
</div>
@endforeach
</div>
</div> </div>
</div> </div>
</div> </div>
</div> @endif
@endif @if($incident->component)
@if($incident->component) <div class="form-group" id="component-status">
<div class="form-group" id="component-status"> <div class="panel panel-default">
<div class="panel panel-default"> <div class="panel-heading"><strong>{{ $incident->component->name }}</strong></div>
<div class="panel-heading"><strong>{{ $incident->component->name }}</strong></div> <div class="panel-body">
<div class="panel-body"> <div class="radio-items">
<div class="radio-items"> @foreach(trans('cachet.components.status') as $statusID => $status)
@foreach(trans('cachet.components.status') as $statusID => $status) <div class="radio-inline">
<div class="radio-inline"> <label>
<label> <input type="radio" name="component_status" value="{{ $statusID }}" {{ $incident->component->status == $statusID ? "checked='checked'" : "" }}>
<input type="radio" name="component_status" value="{{ $statusID }}" {{ $incident->component->status == $statusID ? "checked='checked'" : "" }}> {{ $status }}
{{ $status }} </label>
</label> </div>
@endforeach
</div> </div>
@endforeach
</div> </div>
</div> </div>
</div> </div>
</div> @endif
@endif <div class="form-group">
<label>{{ trans('forms.incidents.message') }}</label>
<div class="markdown-control">
<textarea name="message" class="form-control autosize" rows="5" required>{{ Binput::old('message') }}</textarea>
</div>
</div>
</fieldset>
<input type="hidden" name="incident_id" value="{{ $incident->id }}">
<div class="form-group"> <div class="form-group">
<label>{{ trans('forms.incidents.message') }}</label> <div class="btn-group">
<div class="markdown-control"> <button type="submit" class="btn btn-success">{{ trans('forms.update') }}</button>
<textarea name="message" class="form-control autosize" rows="5" required>{{ Binput::old('message') }}</textarea> <a class="btn btn-default" href="{{ cachet_route('dashboard.incidents') }}">{{ trans('forms.cancel') }}</a>
</div> </div>
</div> </div>
</fieldset> </form>
</update-incident>
<input type="hidden" name="incident_id" value="{{ $incident->id }}">
<div class="form-group">
<div class="btn-group">
<button type="submit" class="btn btn-success">{{ trans('forms.update') }}</button>
<a class="btn btn-default" href="{{ cachet_route('dashboard.incidents') }}">{{ trans('forms.cancel') }}</a>
</div>
</div>
</form>
</div> </div>
</div> </div>
</div> </div>