Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP] Scheduled statuses #404

Closed
wants to merge 3 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
8 changes: 7 additions & 1 deletion app/assets/js/app.js
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,12 @@ $(function() {
$form.find(':submit').prop('disabled', true);
});

// Datepicker
$('input[rel=date]').datepicker({
format: "dd/mm/yyyy",
autoclose: true
});

// Mock the DELETE form requests.
$('[data-method]').not(".disabled").append(function() {
var methodForm = "\n";
Expand All @@ -39,7 +45,7 @@ $(function() {
return methodForm;
})
.removeAttr('href')
.attr('onclick', ' if ($(this).hasClass(\'confirm-action\')) { if(confirm("Are you sure you want to do this?")) { $(this).find("form").submit(); } } else { $(this).find("form").submit(); }');
.attr('onclick', 'if ($(this).hasClass(\'confirm-action\')) { if(confirm("Are you sure you want to do this?")) { $(this).find("form").submit(); } } else { $(this).find("form").submit(); }');

// Messenger config
Messenger.options = {
Expand Down
4 changes: 4 additions & 0 deletions app/assets/sass/_status-page.scss
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,10 @@ body.status-page {
top: 10px;
left: 11px;
}
&.ion-calendar {
top: 10px;
left: 10px;
}
}
&.status-1 {
color: $cachet_orange;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ public function up()
$table->integer('status');
$table->longText('message');
$table->integer('user_id');
$table->timestamp('published_at');
$table->timestamps();
$table->softDeletes();

Expand Down
5 changes: 5 additions & 0 deletions app/lang/en/cachet.php
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@
],
],

// Scheduled
'schedule' => [
'scheduled' => 'Scheduled Maintenance',
],

// Service Status
'service' => [
'good' => 'All systems are functional.',
Expand Down
8 changes: 8 additions & 0 deletions app/lang/en/dashboard.php
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,14 @@
'failure' => 'Something went wrong with the incident.',
],

// Scheduled Maintenance
'schedule' => [
'title' => 'Scheduled Maintenance',
'add' => [
'title' => 'Add scheduled incident',
],
],

// Incident templates
'templates' => [
'title' => 'Incident Templates',
Expand Down
4 changes: 2 additions & 2 deletions app/lang/en/forms.php
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@
'component' => 'Component',
'message' => 'Message',
'message-help' => 'You may also use Markdown.',

'templates' => [
'scheduled' => 'When should this be posted?',
'templates' => [
'name' => 'Name',
'template' => 'Template',
],
Expand Down
13 changes: 13 additions & 0 deletions app/routes/dashboard.php
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,19 @@
Route::post('{incident}/edit', 'DashIncidentController@editIncidentAction');
});

// Scheduled maintenance
Route::group(['prefix' => 'schedule'], function () {
Route::get('/', [
'as' => 'dashboard.schedule',
'uses' => 'DashIncidentController@showSchedule',
]);

Route::get('add', [
'as' => 'dashboard.schedule.add',
'uses' => 'DashIncidentController@showAddSchedule',
]);
});

// Incident Templates
Route::group(['prefix' => 'templates'], function () {
Route::get('/', [
Expand Down
2 changes: 1 addition & 1 deletion app/views/dashboard/incidents/add.blade.php
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.message') }}</label>
<div class='markdown-control'>
<div class="markdown-control">
<textarea name="incident[message]" class="form-control" rows="5" required>{{ Input::old('incident.message') }}</textarea>
</div>
</div>
Expand Down
66 changes: 35 additions & 31 deletions app/views/dashboard/incidents/index.blade.php
Original file line number Diff line number Diff line change
@@ -1,39 +1,43 @@
@extends('layout.dashboard')

@section('content')
<div class="header fixed">
<div class="sidebar-toggler visible-xs">
<i class="icon ion-navicon"></i>
</div>
<span class="uppercase">
<i class="icon ion-android-alert"></i> {{ trans('dashboard.incidents.incidents') }}
</span>
<a class="btn btn-sm btn-success pull-right" href="{{ route('dashboard.incidents.add') }}">
{{ trans('dashboard.incidents.add.title') }}
</a>
<div class="clearfix"></div>
</div>
<div class="content-wrapper header-fixed">
<div class="row">
<div class="col-sm-12">
@include('partials.dashboard.errors')
<p class="lead">{{ trans_choice('dashboard.incidents.logged', $incidents->count(), ['count' => $incidents->count()]) }}</p>

<div class="striped-list">
@foreach($incidents as $incident)
<div class="row striped-list-item">
<div class="col-md-6">
<i class="{{ $incident->icon }}"></i> <strong>{{ $incident->name }}</strong>
@if($incident->message)
<p><small>{{ Str::words($incident->message, 5) }}</small></p>
@endif
</div>
<div class="col-md-6 text-right">
<a href="/dashboard/incidents/{{ $incident->id }}/edit" class="btn btn-default">{{ trans('forms.edit') }}</a>
<a href="/dashboard/incidents/{{ $incident->id }}/delete" class="btn btn-danger confirm-action" data-method='DELETE'>{{ trans('forms.delete') }}</a>
<div class="content-panel">
@if(isset($subMenu))
@include('partials.dashboard.sub-sidebar')
@endif
<div class="content-wrapper">
<div class="header sub-header">
<span class="uppercase">
<i class="icons ion-android-alert"></i> {{ trans('dashboard.incidents.incidents') }}
</span>
<a class="btn btn-sm btn-success pull-right" href="{{ route('dashboard.incidents.add') }}">
{{ trans('dashboard.incidents.add.title') }}
</a>
<div class="clearfix"></div>
</div>
@include('partials.dashboard.errors')
<p class="lead">{{ trans_choice('dashboard.incidents.logged', $incidents->count(), ['count' => $incidents->count()]) }}</p>
<div class="row">
<div class="col-sm-12">
<div class="striped-list">
@foreach($incidents as $incident)
<div class="row striped-list-item">
<div class="col-md-6">
<i class="{{ $incident->icon }}"></i>
<strong>
{{ $incident->name }}
</strong>
@if($incident->message)
<p><small>{{ Str::words($incident->formattedMessage, 5) }}</small></p>
@endif
</div>
<div class="col-md-6 text-right">
<a href="/dashboard/incidents/{{ $incident->id }}/edit" class="btn btn-default">{{ trans('forms.edit') }}</a>
<a href="/dashboard/incidents/{{ $incident->id }}/delete" class="btn btn-danger confirm-action" data-method='DELETE'>{{ trans('forms.delete') }}</a>
</div>
</div>
@endforeach
</div>
@endforeach
</div>
</div>
</div>
Expand Down
81 changes: 81 additions & 0 deletions app/views/dashboard/incidents/schedule/add.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
@extends('layout.dashboard')

@section('content')
<div class="header">
<div class="sidebar-toggler visible-xs">
<i class="icon ion-navicon"></i>
</div>
<span class="uppercase">
<i class="icon icon ion-android-alert"></i> {{ trans('dashboard.incidents.incidents') }}
</span>
> <small>{{ trans('dashboard.incidents.add.title') }}</small>
</div>
<div class="content-wrapper">
<div class="row">
<div class="col-md-12">
@include('partials.dashboard.errors')
{{ Form::open(['name' => 'IncidentForm', 'class' => 'form-horizontal', 'role' => 'form']) }}
<fieldset>
@if($incidentTemplates->count() > 0)
<div class="form-group">
<label for="incident-template">{{ trans('forms.incidents.templates.template') }}</label>
<select class="form-control" name="template">
<option selected></option>
@foreach($incidentTemplates as $tpl)
<option value="{{ $tpl->slug }}">{{ $tpl->name }}</option>
@endforeach
</select>
</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="{{ Input::old('incident.name') }}">
</div>
<div class="form-group">
<label for="incident-name">{{ trans('forms.incidents.status') }}</label><br>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="1">
<i class="icon ion-flag"></i>
{{ trans('cachet.incidents.status')[1] }}
</label>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="2">
<i class="icon ion-alert-circled"></i>
{{ trans('cachet.incidents.status')[2] }}
</label>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="3">
<i class="icon ion-eye"></i>
{{ trans('cachet.incidents.status')[3] }}
</label>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="4">
<i class="icon ion-checkmark"></i>
{{ trans('cachet.incidents.status')[4] }}
</label>
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.message') }}</label>
<div class="markdown-control">
<textarea name="incident[message]" class="form-control" rows="5" required>{{ Input::old('incident.message') }}</textarea>
</div>
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.scheduled') }}</label>
<input type="text" rel="date" class="form-control" name="incident[published_date]" data-date-start-date="{{ date('d/m/Y') }}" required>
</div>
</fieldset>

<input type="hidden" name="incident[user_id]" value="{{ $loggedUser->id }}">

<div class="form-group">
<div class="btn-group">
<button type="submit" class="btn btn-success">{{ trans('forms.add') }}</button>
<a class="btn btn-default" href="{{ route('dashboard.incidents') }}">{{ trans('forms.cancel') }}</a>
</div>
</div>
{{ Form::close() }}
</div>
</div>
</div>
@stop
97 changes: 97 additions & 0 deletions app/views/dashboard/incidents/schedule/edit.blade.php
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
@extends('layout.dashboard')

@section('content')
<div class="header">
<div class="sidebar-toggler visible-xs">
<i class="icon ion-navicon"></i>
</div>
<span class="uppercase">
<i class="icon icon ion-android-alert"></i> {{ trans('dashboard.incidents.incidents') }}
</span>
> <small>{{ trans('dashboard.incidents.edit.title') }}</small>
</div>
<div class="content-wrapper">
<div class="row">
<div class="col-md-12">
@include('partials.dashboard.errors')
{{ Form::open(['name' => 'IncidentForm', 'class' => 'form-horizontal', 'role' => 'form']) }}
<fieldset>
<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="{{$incident->name}}">
</div>
<div class="form-group">
<label for="incident-name">{{ trans('forms.incidents.status') }}</label><br>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="1" {{ ($incident->status == 1) ? "checked=checked" : "" }}>
<i class="icon ion-flag"></i>
{{ trans('cachet.incidents.status')[1] }}
</label>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="2" {{ ($incident->status == 2) ? "checked=checked" : "" }}>
<i class="icon ion-alert-circled"></i>
{{ trans('cachet.incidents.status')[2] }}
</label>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="3" {{ ($incident->status == 3) ? "checked=checked" : "" }}>
<i class="icon ion-eye"></i>
{{ trans('cachet.incidents.status')[3] }}
</label>
<label class="radio-inline">
<input type="radio" name="incident[status]" value="4" {{ ($incident->status == 4) ? "checked=checked" : "" }}>
<i class="icon ion-checkmark"></i>
{{ trans('cachet.incidents.status')[4] }}
</label>
</div>
@if($components->count() > 0)
<div class='form-group'>
<label>{{ trans('forms.incidents.component') }}</label>
<select name='incident[component_id]' class='form-control'>
<option value='0' {{ $incident->id === 0 ? "selected" : null }}></option>
@foreach($components as $component)
<option value='{{ $component->id }}' {{ $incident->component_id === $component->id ? "selected" : null }}>{{ $component->name }}</option>
@endforeach
</select>
<span class='help-block'>{{ trans('forms.optional') }}</span>
</div>
<div class="form-group {{ $incident->component_id === 0 ? 'hidden' : null }}" id='component-status'>
<div class="well">
<div class="radio-items">
@foreach(trans('cachet.components.status') as $statusID => $status)
<div class="radio-inline">
<label>
<input type="radio" name="incident[component_status]" value="{{ $statusID }}" {{ $incident->component_id > 0 && $incident->component->status === $statusID ? 'checked' : null }}>
{{ $status }}
</label>
</div>
@endforeach
</div>
</div>
</div>
@endif
<div class="form-group">
<label>{{ trans('forms.incidents.message') }}</label>
<div class='markdown-control'>
<textarea name="incident[message]" class="form-control" rows="5" required>{{ $incident->message }}</textarea>
</div>
</div>
<div class="form-group">
<label>{{ trans('forms.incidents.scheduled') }}</label>
<input type="text" rel="date" class="form-control" name="incident[published_date]" data-date-start-date="{{ date('d/m/Y') }}" value="{{ $incident->published_at->format('d/m/Y') }}" />
</div>
</fieldset>

<input type="hidden" name="incident[user_id]" value="{{ $loggedUser->id }}">
<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="{{ route('dashboard.incidents') }}">{{ trans('forms.cancel') }}</a>
</div>
</div>
{{ Form::close() }}
</div>
</div>
</div>
@stop