Rewrite the entire scheduled maintenance implementation

This commit is contained in:
James Brooks
2016-10-30 20:54:12 +00:00
parent a2cded299d
commit ebed68a7d8
57 changed files with 1989 additions and 512 deletions

View File

@@ -22,7 +22,7 @@
<span>{{ trans('dashboard.dashboard') }}</span>
</a>
</li>
<li {!! set_active('dashboard/incidents*') !!} {!! set_active('dashboard/schedule*') !!}>
<li {!! set_active('dashboard/incidents*') !!}>
<a href="{{ cachet_route('dashboard.incidents') }}">
<i class="ion ion-ios-information-outline"></i>
<span>{{ trans('dashboard.incidents.incidents') }}</span>
@@ -36,6 +36,13 @@
<span class="label label-info">{{ $incident_template_count }}</span>
</a>
</li>
<li {!! set_active('dashboard/schedule*') !!}>
<a href="{{ cachet_route('dashboard.schedule') }}">
<i class="ion ion-android-calendar"></i>
<span>{{ trans('dashboard.schedule.schedule') }}</span>
<span class="label label-info">{{ $schedule_count }}</span>
</a>
</li>
<li {!! set_active('dashboard/components*') !!}>
<a href="{{ cachet_route('dashboard.components') }}">
<i class="ion ion-ios-browsers-outline"></i>

View File

@@ -16,11 +16,10 @@
@include('dashboard.partials.errors')
<form class="form-vertical" name="ScheduleForm" role="form" method="POST" autocomplete="off">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="visible" value="1">
<fieldset>
@if($incident_templates->count() > 0)
<div class="form-group">
<label for="incident-template">{{ trans('forms.incidents.templates.template') }}</label>
<label for="incident-template">{{ trans('forms.schedules.templates.template') }}</label>
<select class="form-control" name="template">
<option selected></option>
@foreach($incident_templates as $tpl)
@@ -30,27 +29,32 @@
</div>
@endif
<div class="form-group">
<label for="incident-name">{{ trans('forms.incidents.name') }}</label>
<input type="text" class="form-control" name="name" id="incident-name" required value="{{ Binput::old('incident.name') }}" placeholder="{{ trans('forms.incidents.name') }}">
<label for="incident-name">{{ trans('forms.schedules.name') }}</label>
<input type="text" class="form-control" name="name" id="incident-name" required value="{{ Binput::old('name') }}" placeholder="{{ trans('forms.schedules.name') }}">
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.message') }}</label>
<label>{{ trans('forms.schedules.status') }}</label><br>
@foreach(trans('cachet.schedules.status') as $id => $status)
<label class="radio-inline">
<input type="radio" name="status" value="{{ $id }}" {{ $id === 0 ? 'checked="checked"' : null }}>
{{ $status }}
</label>
@endforeach
</div>
<div class="form-group">
<label>{{ trans('forms.schedules.message') }}</label>
<div class="markdown-control">
<textarea name="message" class="form-control autosize" rows="5" required placeholder="{{ trans('forms.incidents.message') }}">{{ Binput::old('incident.message') }}</textarea>
<textarea name="message" class="form-control autosize" rows="5" required placeholder="{{ trans('forms.schedules.message') }}">{{ Binput::old('message') }}</textarea>
</div>
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.scheduled_at') }}</label>
<input type="text" name="scheduled_at" class="form-control" rel="datepicker" required placeholder="{{ trans('forms.incidents.scheduled_at') }}">
<label>{{ trans('forms.schedules.scheduled_at') }}</label>
<input type="text" name="scheduled_at" class="form-control" rel="datepicker-custom" data-date-format="YYYY-MM-DD HH:mm" required placeholder="{{ trans('forms.schedules.scheduled_at') }}">
</div>
@if(subscribers_enabled())
<div class="checkbox">
<label>
<input type="checkbox" name="notify" value="1" checked="{{ Binput::old('incident.message', 'checked') }}">
{{ trans('forms.incidents.notify_subscribers') }}
</label>
<div class="form-group">
<label>{{ trans('forms.schedules.scheduled_at') }}</label>
<input type="text" name="completed_at" class="form-control" rel="datepicker-custom" data-date-format="YYYY-MM-DD HH:mm" placeholder="{{ trans('forms.schedules.scheduled_at') }}">
</div>
@endif
</fieldset>
<div class="form-group">

View File

@@ -16,11 +16,11 @@
@include('dashboard.partials.errors')
<form class="form-vertical" name="ScheduleForm" role="form" method='POST' autocomplete="off">
<input type="hidden" name="_token" value="{{ csrf_token() }}">
<input type="hidden" name="incident[visible]" value="1">
<input type="hidden" name="visible" value="1">
<fieldset>
@if($incident_templates->count() > 0)
<div class="form-group">
<label for="incident-template">{{ trans('forms.incidents.templates.template') }}</label>
<label for="incident-template">{{ trans('forms.schedules.templates.template') }}</label>
<select class="form-control" name="template">
<option selected></option>
@foreach($incident_templates as $tpl)
@@ -30,18 +30,31 @@
</div>
@endif
<div class="form-group">
<label for="incident-name">{{ trans('forms.incidents.name') }}</label>
<input type="text" class="form-control" name="incident[name]" id="incident-name" required value="{{ $schedule->name }}" placeholder="{{ trans('forms.incidents.name') }}">
<label for="incident-name">{{ trans('forms.schedules.name') }}</label>
<input type="text" class="form-control" name="name" id="incident-name" required value="{{ $schedule->name }}" placeholder="{{ trans('forms.schedules.name') }}">
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.message') }}</label>
<label>{{ trans('forms.schedules.status') }}</label><br>
@foreach(trans('cachet.schedules.status') as $id => $status)
<label class="radio-inline">
<input type="radio" name="status" value="{{ $id }}" {{ $id === $schedule->status ? 'checked="checked"' : null }}>
{{ $status }}
</label>
@endforeach
</div>
<div class="form-group">
<label>{{ trans('forms.schedules.message') }}</label>
<div class='markdown-control'>
<textarea name="incident[message]" class="form-control autosize" rows="5" required>{{ $schedule->message }}</textarea>
<textarea name="message" class="form-control autosize" rows="5" required>{{ $schedule->message }}</textarea>
</div>
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.scheduled_at') }}</label>
<input type="text" name="incident[scheduled_at]" class="form-control" rel="datepicker" value="{{ $schedule->scheduled_at_datetimepicker }}" required placeholder="{{ trans('forms.incidents.scheduled_at') }}">
<label>{{ trans('forms.schedules.scheduled_at') }}</label>
<input type="text" name="scheduled_at" class="form-control" rel="datepicker-custom" data-date-format="YYYY-MM-DD HH:mm" value="{{ $schedule->scheduled_at_datetimepicker }}" required placeholder="{{ trans('forms.schedules.scheduled_at') }}">
</div>
<div class="form-group">
<label>{{ trans('forms.schedules.completed_at') }}</label>
<input type="text" name="completed_at" class="form-control" rel="datepicker-custom" data-date-format="YYYY-MM-DD HH:mm" value="{{ $schedule->completed_at_datetimepicker }}" placeholder="{{ trans('forms.schedules.completed_at') }}">
</div>
</fieldset>

View File

@@ -26,7 +26,7 @@
<div class="col-xs-6">
<strong>{{ $incident->name }}</strong>
<br>
{{ trans('dashboard.schedule.scheduled_at', ['timestamp' => $incident->scheduled_at_iso]) }}
{{ trans('dashboard.schedule.scheduled_at', ['timestamp' => $incident->scheduled_at_formatted]) }}
@if($incident->message)
<p><small>{{ Str::words($incident->message, 5) }}</small></p>
@endif

View File

@@ -1,14 +1,20 @@
<div class="timeline schedule">
<div class="panel panel-info">
<div class="panel panel-default">
<div class="panel-heading">
<strong>{{ trans('cachet.incidents.scheduled') }}</strong>
</div>
<div class="list-group">
@foreach($scheduled_maintenance as $schedule)
<div class="list-group-item">
<a href="{{ cachet_route('schedule', $schedule) }}" class="list-group-item">
<strong>{{ $schedule->name }}</strong> <small class="date"><abbr class="timeago" data-toggle="tooltip" data-placement="right" title="{{ $schedule->scheduled_at_formatted }}" data-timeago="{{ $schedule->scheduled_at_iso }}"></abbr></small>
{!! $schedule->formattedMessage !!}
</div>
@if($schedule->components->count() > 0)
<hr>
@foreach($schedule->components as $affected_component)
<span class="label label-primary">{{ $affected_component->component->name }}</span>
@endforeach
@endif
</a>
@endforeach
</div>
</div>

View File

@@ -0,0 +1,35 @@
@extends('layout.master')
@section('bodyClass', 'no-padding')
@section('outer-content')
@include('partials.nav')
@stop
@section('content')
<h1>{{ $schedule->name }}</h1>
<div class="timeline">
<div class="content-wrapper">
<div class="moment first">
<div class="row event clearfix">
<div class="col-sm-1">
<div class="status-icon status-{{ $schedule->status }}" data-toggle="tooltip" title="{{ $schedule->human_status }}" data-placement="left">
<i class="icon ion-android-calendar"></i>
</div>
</div>
<div class="col-xs-10 col-xs-offset-2 col-sm-11 col-sm-offset-0">
<div class="panel panel-message incident">
<div class="panel-heading">
<strong>{{ $schedule->name }}</strong>{{ trans("cachet.incidents.scheduled_at", ["timestamp" => $schedule->scheduled_at_diff]) }}
</div>
<div class="panel-body">
{!! $schedule->formattedMessage !!}
</div>
</div>
</div>
</div>
</div>
</div>
</div>
@stop