Cachet is now a Laravel 5 app
This commit is contained in:
@@ -0,0 +1,10 @@
|
||||
@if($googleId = Setting::get('app_analytics'))
|
||||
<script>
|
||||
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
|
||||
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
|
||||
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
|
||||
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
|
||||
ga('create', '{{ $googleId }}', '{{ $_SERVER['SERVER_NAME'] }}');
|
||||
ga('send', 'pageview');
|
||||
</script>
|
||||
@endif
|
||||
@@ -0,0 +1,15 @@
|
||||
<li class="list-group-item {{ $component->group_id ? "sub-component" : "component" }}">
|
||||
@if($component->link)
|
||||
<a href="{{ $component->link }}" target="_blank">{{ $component->name }}</a>
|
||||
@else
|
||||
{{ $component->name }}
|
||||
@endif
|
||||
|
||||
@if($component->description)
|
||||
<i class="ion-ios-help-outline help-icon" data-toggle="tooltip" data-title="{{ $component->description }}"></i>
|
||||
@endif
|
||||
|
||||
<div class="pull-right">
|
||||
<small class="text-component-{{ $component->status }}">{{ $component->humanStatus }}</small>
|
||||
</div>
|
||||
</li>
|
||||
@@ -0,0 +1,22 @@
|
||||
<ul class="list-group components">
|
||||
@if($componentGroups->count() > 0)
|
||||
@foreach($componentGroups as $componentGroup)
|
||||
@if($componentGroup->components->count() > 0)
|
||||
<li class="list-group-item group-name"><strong>{{ $componentGroup->name }}</strong></li>
|
||||
|
||||
@foreach($componentGroup->components as $component)
|
||||
@include('partials.component', compact($component))
|
||||
@endforeach
|
||||
@endif
|
||||
@endforeach
|
||||
@if($ungroupedComponents->count() > 0)
|
||||
<li class="list-group-item break"></li>
|
||||
@endif
|
||||
@endif
|
||||
|
||||
@if($ungroupedComponents->count() > 0)
|
||||
@foreach($ungroupedComponents as $component)
|
||||
@include('partials.component', compact($component))
|
||||
@endforeach
|
||||
@endif
|
||||
</ul>
|
||||
@@ -0,0 +1,7 @@
|
||||
@if(Setting::get('app_locale') === 'en-UD')
|
||||
<script type="text/javascript">
|
||||
var _jipt = [];
|
||||
_jipt.push(['project', 'cachet']);
|
||||
</script>
|
||||
<script type="text/javascript" src="//cdn.crowdin.com/jipt/jipt.js"></script>
|
||||
@endif
|
||||
@@ -0,0 +1,15 @@
|
||||
<div class="alerts">
|
||||
<div class="alert alert-{{ $level }} alert-dismissible" role="alert">
|
||||
<button type="button" class="close" data-dismiss="alert"><span aria-hidden="true">×</span></button>
|
||||
@if(isset($title)) <h5>{!! $title !!}</h5> @endif
|
||||
@if(is_array($message))
|
||||
<ul class="list-unstyled">
|
||||
@foreach ($message as $msg)
|
||||
<li>{!! $msg !!}</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@else
|
||||
{!! $message !!}
|
||||
@endif
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,15 @@
|
||||
@if ($errors->any())
|
||||
@include('partials.dashboard._error', ['level' => 'danger', 'title' => Session::get('title'), 'message' => $errors->all(':message')])
|
||||
@endif
|
||||
|
||||
@if ($message = Session::get('success'))
|
||||
@include('partials.dashboard._error', ['level' => 'success', 'title' => Session::get('title'), 'message' => $message])
|
||||
@endif
|
||||
|
||||
@if ($message = Session::get('warning'))
|
||||
@include('partials.dashboard._error', ['level' => 'warning', 'title' => Session::get('title'), 'message' => $message])
|
||||
@endif
|
||||
|
||||
@if ($message = Session::get('info'))
|
||||
@include('partials.dashboard._error', ['level' => 'info', 'title' => Session::get('title'), 'message' => $message])
|
||||
@endif
|
||||
@@ -0,0 +1,34 @@
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes">
|
||||
|
||||
<meta name="env" content="{{ app('env') }}">
|
||||
<meta name="token" content="{{ csrf_token() }}">
|
||||
|
||||
<link rel="icon" type="image/png" href="/img/favicon.ico">
|
||||
<link rel="shortcut icon" href="/img/favicon.png" type="image/x-icon">
|
||||
|
||||
<link rel="apple-touch-icon" href="/img/apple-touch-icon.png">
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="/img/apple-touch-icon-57x57.png">
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="/img/apple-touch-icon-72x72.png">
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="/img/apple-touch-icon-114x114.png">
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="/img/apple-touch-icon-120x120.png">
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="/img/apple-touch-icon-144x144.png">
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="/img/apple-touch-icon-152x152.png">
|
||||
|
||||
<title>{{ isset($pageTitle) ? $pageTitle : Setting::get('app_name') }} | Cachet</title>
|
||||
|
||||
<link href="//fonts.googleapis.com/css?family=Open+Sans:300,400,700" rel="stylesheet" type="text/css">
|
||||
<link rel="stylesheet" href="{{ elixir('dist/css/all.css') }}">
|
||||
|
||||
@include('partials.crowdin')
|
||||
|
||||
<script type="text/javascript">
|
||||
var Global = {};
|
||||
Global.locale = '{{ Setting::get('app_locale') }}';
|
||||
</script>
|
||||
<script src="{{ elixir('dist/js/all.js') }}"></script>
|
||||
|
||||
</head>
|
||||
@@ -0,0 +1,99 @@
|
||||
@if($loggedUser)
|
||||
<div class="sidebar">
|
||||
<div class="sidebar-inner">
|
||||
<div class="profile">
|
||||
<div class="dropdown">
|
||||
<a class="dropdown-toggle" href="#" id="profile-dropdown" data-toggle="dropdown" aria-expanded="true">
|
||||
<span class="avatar"><img src="{{ $loggedUser->gravatar }}"></span> <span class="username">{{ $loggedUser->username }}</span>
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu" role="menu" aria-labelledby="profile-dropdown">
|
||||
<li role="presentation">
|
||||
<a role="menuitem" tabindex="-1" href="{{ url('dashboard/user') }}">{{ trans('dashboard.team.profile') }}</a>
|
||||
</li>
|
||||
<li role="presentation">
|
||||
<a role="menuitem" tabindex="-1" href="{{ route('logout') }}">{{ trans('dashboard.logout') }}</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="quick-add-incident">
|
||||
<a class="btn btn-block btn-default uppercase" href="{{ route('dashboard.incidents.add') }}">
|
||||
<i class="icon ion-android-checkmark-circle visible-sm"></i>
|
||||
<span class="hidden-sm">{{ trans('dashboard.incidents.add.title') }}</span>
|
||||
</a>
|
||||
</div>
|
||||
<ul>
|
||||
<li {{ set_active('dashboard') }}>
|
||||
<a href="{{ route('dashboard') }}">
|
||||
<i class="icon ion-speedometer"></i>
|
||||
<span>{{ trans('dashboard.dashboard') }}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {{ set_active('dashboard/incidents*') }} {{ set_active('dashboard/schedule*') }}>
|
||||
<a href="{{ route('dashboard.incidents') }}">
|
||||
<i class="icon ion-android-alert"></i>
|
||||
<span>{{ trans('dashboard.incidents.incidents') }}</span>
|
||||
<span class="label label-info">{{ $incidentCount }}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {{ set_active('dashboard/templates*') }}>
|
||||
<a href="{{ route('dashboard.templates') }}">
|
||||
<i class="icons ion-document-text"></i>
|
||||
<span>{{ trans('dashboard.incidents.incident-templates') }}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {{ set_active('dashboard/components*') }}>
|
||||
<a href="{{ route('dashboard.components') }}">
|
||||
<i class="icons ion-outlet"></i>
|
||||
<span>{{ trans('dashboard.components.components') }}</span>
|
||||
<span class="label label-info">{{ $componentCount }}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {{ set_active('dashboard/team*') }}>
|
||||
<a href="{{ route('dashboard.team') }}">
|
||||
<i class="icons ion-ios-people"></i>
|
||||
<span>{{ trans('dashboard.team.team') }}</span>
|
||||
</a>
|
||||
</li>
|
||||
<li {{ set_active('dashboard/metrics*') }}>
|
||||
<a href="{{ route('dashboard.metrics') }}">
|
||||
<i class="icon ion-stats-bars"></i>
|
||||
<span>{{ trans('dashboard.metrics.metrics') }}</span>
|
||||
</a>
|
||||
</li>
|
||||
{{-- <li {{ set_active('dashboard/notifications') }}>
|
||||
<a href="{{ route('dashboard.notifications') }}">
|
||||
<i class="ion ion-email"></i> {{ trans('cachet.dashboard.notifications') }}
|
||||
</a>
|
||||
</li> --}}
|
||||
<li {{ set_active('dashboard/settings*') }}>
|
||||
<a href="{{ route('dashboard.settings.setup') }}">
|
||||
<i class="icon ion-gear-a"></i>
|
||||
<span>
|
||||
{{ trans('dashboard.settings.settings') }}
|
||||
</span>
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
<div class="bottom-menu-sidebar">
|
||||
<div class="text-center">
|
||||
<img width="166" src="/img/cachet-sidebar-logo.png" alt="Cachet">
|
||||
</div>
|
||||
<br>
|
||||
<ul>
|
||||
<li data-toggle="tooltip" data-placement="top" title="{{ trans('dashboard.help') }}">
|
||||
<a href="https://docs.cachethq.io" target="_blank"><i class="icon ion-help"></i></a>
|
||||
</li>
|
||||
<li data-toggle="tooltip" data-placement="top" title="{{ trans('dashboard.status_page') }}">
|
||||
<a href="{{ route('status-page') }}"><i class="icon ion-monitor"></i></a>
|
||||
</li>
|
||||
<li data-toggle="tooltip" data-placement="top" title="{{ trans('dashboard.logout') }}">
|
||||
<a href="{{ route('logout') }}"><i class="icon ion-log-out"></i></a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@endif
|
||||
@@ -0,0 +1,11 @@
|
||||
<div class="sub-sidebar">
|
||||
<div class="sidebar-toggler visible-xs">
|
||||
<i class="icon ion-navicon"></i>
|
||||
</div>
|
||||
<h3>{{ $subTitle }}</h3>
|
||||
<ul class="menu">
|
||||
@foreach($subMenu as $key => $item)
|
||||
<li><a href="{{ $item['url'] }}" class="{{ $item['active'] ? 'active' : null }}"><i class="{{ $item['icon'] }}"></i> {{ $item['title'] }}</a></li>
|
||||
@endforeach
|
||||
</ul>
|
||||
</div>
|
||||
@@ -0,0 +1,67 @@
|
||||
<!-- First time welcome Modal -->
|
||||
<div class="modal fade" id="welcome-modal" tabindex="-1" role="dialog">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<header>
|
||||
{{ trans('dashboard.welcome.welcome') }}
|
||||
</header>
|
||||
|
||||
<p>
|
||||
{{ trans('dashboard.welcome.message') }}
|
||||
</p>
|
||||
|
||||
<div class="get-started">
|
||||
<div class="row">
|
||||
<div class="col-md-4 animated fadeInDown">
|
||||
<a href="{{ route('dashboard.components.add') }}">
|
||||
<i class="icon ion-outlet"></i>
|
||||
{{ trans('dashboard.welcome.steps.component') }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-4 animated fadeInDown two">
|
||||
<a href="{{ route('dashboard.incidents.add') }}">
|
||||
<i class="icon ion-android-alert"></i>
|
||||
{{ trans('dashboard.welcome.steps.incident') }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-4 animated fadeInDown three">
|
||||
<a href="{{ route('dashboard.settings.theme') }}">
|
||||
<i class="icon ion-ios-paper-outline"></i>
|
||||
{{ trans('dashboard.welcome.steps.customize') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-md-4 animated fadeInDown">
|
||||
<a href="{{ route('dashboard.team.add') }}">
|
||||
<i class="icons ion-ios-people"></i>
|
||||
{{ trans('dashboard.welcome.steps.team') }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-4 animated fadeInDown two">
|
||||
<a href="{{ route('dashboard.user') }}">
|
||||
<i class="icon ion-code-working"></i>
|
||||
{{ trans('dashboard.welcome.steps.api') }}
|
||||
</a>
|
||||
</div>
|
||||
<div class="col-md-4 animated fadeInDown three">
|
||||
<a href="{{ route('dashboard.user') }}">
|
||||
<i class="icon ion-unlocked"></i>
|
||||
{{ trans('dashboard.welcome.steps.two-factor') }}
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<a href="#" data-dismiss="modal" class="btn btn-success go-dashboard">
|
||||
{{ trans('dashboard.welcome.close') }}
|
||||
<i class="fa fa-angle-double-right"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,15 @@
|
||||
<footer class="footer">
|
||||
@if(Setting::get('show_support'))
|
||||
<p>{{ trans('cachet.powered_by', ['app' => Setting::get('app_name')]) }}</p>
|
||||
@endif
|
||||
<p><a href="/rss"><i class="ion-social-rss"></i> {{ trans('cachet.rss-feed') }}</a> - <a href="/atom"><i class="ion-social-rss"></i> {{ trans('cachet.atom-feed') }}</a></p>
|
||||
<p>
|
||||
<a href="{{ route('dashboard') }}">{{ trans('dashboard.dashboard') }}</a>
|
||||
@if($loggedUser)
|
||||
–
|
||||
<a href="{{ route('logout') }}">{{ trans('dashboard.logout') }}</a>
|
||||
@endif
|
||||
</p>
|
||||
</footer>
|
||||
|
||||
@include("partials.analytics")
|
||||
@@ -0,0 +1,37 @@
|
||||
<h4>{{ $date }}</h4>
|
||||
<div class="timeline">
|
||||
<div class="content-wrapper">
|
||||
@forelse($incidents as $incidentID => $incident)
|
||||
<div class="moment {{ $incidentID === 0 ? 'first' : null }}">
|
||||
<div class="row event clearfix">
|
||||
<div class="col-sm-1">
|
||||
<div class="status-icon status-{{ $incident->status }}" data-toggle="tooltip" title="{{ $incident->humanStatus }}" data-placement="left">
|
||||
<i class="{{ $incident->icon }}"></i>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-xs-10 col-xs-offset-2 col-sm-11 col-sm-offset-0">
|
||||
<div class="panel panel-message">
|
||||
<div class="panel-heading">
|
||||
<strong>{{ $incident->name }}</strong>{{ $incident->isScheduled ? trans("cachet.incidents.scheduled_at", ["timestamp" => $incident->scheduled_at->diffForHumans()]) : null }}
|
||||
<br>
|
||||
<small class="date">
|
||||
<abbr class="timeago" data-toggle="tooltip" data-placement="right" title="{{ $incident->created_at_formatted }}" data-timeago="{{ $incident->created_at_iso }}">
|
||||
</abbr>
|
||||
</small>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>{!! $incident->formattedMessage !!}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@empty
|
||||
<div class="panel panel-message">
|
||||
<div class="panel-body">
|
||||
<p>{{ trans('cachet.incidents.none') }}</p>
|
||||
</div>
|
||||
</div>
|
||||
@endforelse
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,68 @@
|
||||
@if($metrics->count() > 0)
|
||||
<ul class="list-group metrics">
|
||||
@foreach($metrics as $metric)
|
||||
<?php
|
||||
$points = range(0, 10);
|
||||
foreach($points as $hour) {
|
||||
$points[$hour] = $metric->getValues($hour);
|
||||
}
|
||||
$points = array_reverse($points);
|
||||
?>
|
||||
<li class="list-group-item metric">
|
||||
<div class="row">
|
||||
<div class="col-xs-10">
|
||||
<h4>
|
||||
{{ $metric->name }}
|
||||
@if($metric->description)
|
||||
<i class="ion ion-ios-help-outline" data-toggle="tooltip" data-title="{{ $metric->description }}"></i>
|
||||
@endif
|
||||
</h4>
|
||||
</div>
|
||||
<div class="col-xs-2 text-right">
|
||||
<small>{{ trans('cachet.metrics.filter.hourly') }}</small>
|
||||
</div>
|
||||
</div>
|
||||
<hr>
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<div>
|
||||
<canvas id="metric-{{ $metric->id }}" height="150" width="600"></canvas>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<script>
|
||||
(function () {
|
||||
var hourList = [], date = new Date();
|
||||
|
||||
for (var i = 10; i >= 1; i--) {
|
||||
hourList.push(moment(date).subtract(i, 'hours').seconds(0).format('HH:ss'));
|
||||
}
|
||||
|
||||
hourList.push(moment(date).seconds(0).format('HH:ss'));
|
||||
|
||||
var data = {
|
||||
showTooltips: false,
|
||||
labels: hourList,
|
||||
datasets: [{
|
||||
fillColor: "rgba(220,220,220,0.2)",
|
||||
strokeColor: "rgba(220,220,220,1)",
|
||||
pointColor: "rgba(220,220,220,1)",
|
||||
pointStrokeColor: "#fff",
|
||||
pointHighlightFill: "#fff",
|
||||
pointHighlightStroke: "rgba(220,220,220,1)",
|
||||
data: [{{ implode(',', $points) }}]
|
||||
}]
|
||||
};
|
||||
|
||||
var ctx = document.getElementById("metric-{{ $metric->id }}").getContext("2d");
|
||||
new Chart(ctx).Line(data, {
|
||||
scaleShowVerticalLines: true,
|
||||
pointDot: false,
|
||||
responsive: true
|
||||
});
|
||||
}());
|
||||
</script>
|
||||
</li>
|
||||
@endforeach
|
||||
</ul>
|
||||
@endif
|
||||
@@ -0,0 +1,19 @@
|
||||
<h1>{{ trans('cachet.incidents.scheduled') }}</h1>
|
||||
|
||||
<div class="timeline">
|
||||
@foreach($scheduledMaintenance as $schedule)
|
||||
<div class="panel panel-message">
|
||||
<div class="panel-heading">
|
||||
<strong>{{ $schedule->name }}</strong>
|
||||
<br>
|
||||
<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>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
<p>{{ $schedule->formattedMessage }}</p>
|
||||
</div>
|
||||
</div>
|
||||
@endforeach
|
||||
</div>
|
||||
@@ -0,0 +1,10 @@
|
||||
<style type="text/css">
|
||||
body.status-page {
|
||||
@if($styleBackgroundColor = Setting::get('style_background_color'))
|
||||
background-color: {{ $styleBackgroundColor }};
|
||||
@endif
|
||||
@if($styleTextColor = Setting::get('style_text_color'))
|
||||
color: {{ $styleTextColor }};
|
||||
@endif
|
||||
}
|
||||
</style>
|
||||
Reference in New Issue
Block a user