fixed error pages

This commit is contained in:
denisdulici 2019-12-26 10:53:50 +03:00
parent ef95a33648
commit 6f7d94e676
11 changed files with 374 additions and 341 deletions

View File

@ -2,7 +2,6 @@
namespace App\Http\ViewComposers;
use Auth;
use App\Utilities\Updater;
use Illuminate\View\View;
use App\Traits\Modules as RemoteModules;
@ -21,42 +20,43 @@ class Header
{
$user = user();
$bills = [];
$invoices = [];
$notifications = 0;
$invoices = $bills = [];
$updates = $notifications = 0;
$company = null;
// Get customer company
if ($user->can('read-client-portal')) {
$company = (object) [
'company_name' => setting('company.name'),
'company_email' => setting('company.email'),
'company_address' => setting('company.address'),
'company_logo' => setting('company.logo'),
];
}
$undereads = $user->unreadNotifications;
foreach ($undereads as $underead) {
$data = $underead->getAttribute('data');
switch ($underead->getAttribute('type')) {
case 'App\Notifications\Expense\Bill':
$bills[$data['bill_id']] = $data['amount'];
$notifications++;
break;
case 'App\Notifications\Income\Invoice':
$invoices[$data['invoice_id']] = $data['amount'];
$notifications++;
break;
if (!empty($user)) {
// Get customer company
if ($user->can('read-client-portal')) {
$company = (object) [
'company_name' => setting('company.name'),
'company_email' => setting('company.email'),
'company_address' => setting('company.address'),
'company_logo' => setting('company.logo'),
];
}
$undereads = $user->unreadNotifications;
foreach ($undereads as $underead) {
$data = $underead->getAttribute('data');
switch ($underead->getAttribute('type')) {
case 'App\Notifications\Expense\Bill':
$bills[$data['bill_id']] = $data['amount'];
$notifications++;
break;
case 'App\Notifications\Income\Invoice':
$invoices[$data['invoice_id']] = $data['amount'];
$notifications++;
break;
}
}
$updates = count(Updater::all());
$this->loadSuggestions();
}
$updates = count(Updater::all());
$this->loadSuggestions();
$view->with([
'user' => $user,
'notifications' => $notifications,

View File

@ -19,7 +19,7 @@ class Notifications
public function compose(View $view)
{
// No need to add suggestions in console
if (app()->runningInConsole() || !env('APP_INSTALLED')) {
if (app()->runningInConsole() || !env('APP_INSTALLED') || !user()) {
return;
}

View File

@ -26,26 +26,28 @@ class Suggestions
$modules = false;
$path = Route::current()->uri();
if (user()) {
$path = Route::current()->uri();
if ($path) {
$suggestions = $this->getSuggestions($path);
if ($path) {
$suggestions = $this->getSuggestions($path);
if ($suggestions) {
$suggestion_modules = $suggestions->modules;
foreach ($suggestion_modules as $key => $module) {
$installed = Module::where('company_id', session('company_id'))->where('alias', $module->alias)->first();
if ($suggestions) {
$suggestion_modules = $suggestions->modules;
foreach ($suggestion_modules as $key => $module) {
$installed = Module::where('company_id', '=', session('company_id'))->where('alias', '=', $module->alias)->first();
if ($installed) {
unset($suggestion_modules[$key]);
if ($installed) {
unset($suggestion_modules[$key]);
}
}
}
if ($suggestion_modules) {
shuffle($suggestion_modules);
if ($suggestion_modules) {
shuffle($suggestion_modules);
$modules[] = $suggestion_modules[0];
$modules[] = $suggestion_modules[0];
}
}
}
}

View File

@ -2,23 +2,22 @@
return [
'forbidden_access' => 'Forbidden Access',
'error_page' => 'Error Page',
'page_not_found' => 'Page Not Found',
'body' => [
'forbidden_access' => 'Oops! Forbidden Access.',
'error_page' => 'Oops! Something went wrong.',
'page_not_found' => 'Oops! Page not found.',
'title' => [
'403' => 'Oops! Forbidden Access',
'404' => 'Oops! Page not found',
'500' => 'Oops! Something went wrong',
],
'messages' => [
'forbidden_access' => 'You can not access this page.
Meanwhile, you may <a href=":link">return to dashboard</a>.',
'error_page' => 'We will work on fixing that right away.
Meanwhile, you may <a href=":link">return to dashboard</a>.',
'page_not_found' => 'We could not find the page you were looking for.
Meanwhile, you may <a href=":link">return to dashboard</a>.',
'header' => [
'403' => '403 Forbidden',
'404' => '404 Not Found',
'500' => '500 Internal Server Error',
],
'message' => [
'403' => 'You can not access this page.',
'404' => 'We could not find the page you were looking for.',
'500' => 'We will work on fixing that right away.',
],
];

View File

@ -1,16 +1,16 @@
@extends('layouts.admin')
@extends('layouts.error')
@section('title', trans('errors.forbidden_access'))
@section('title', trans('errors.title.403'))
@section('content')
<div class="card">
<div class="card-header">
<h2 class="mb-0 text-warning">403 Forbidden</h2>
<h2 class="mb-0 text-danger"><i class="fa fa-exclamation-triangle text-danger"></i>&nbsp;&nbsp;{{ trans('errors.header.403') }}</h2>
</div>
<div class="card-body">
<h3><i class="fa fa-exclamation-triangle text-danger"></i> {{ trans('errors.body.forbidden_access') }}</h3>
<p>{{ trans('errors.message.403') }}</p>
<p>{!! trans('errors.messages.forbidden_access', ['link' => url('/') ]) !!}</p>
<a href="{{ url('/') }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans('general.dashboard')]) }}</a>
</div>
</div>
@endsection

View File

@ -1,16 +1,16 @@
@extends('layouts.admin')
@extends('layouts.error')
@section('title', trans('errors.page_not_found'))
@section('title', trans('errors.title.404'))
@section('content')
<div class="card">
<div class="card-header">
<h2 class="mb-0 text-yellow">404 Not Found</h2>
<h2 class="mb-0 text-warning"><i class="fa fa-exclamation-triangle text-warning"></i>&nbsp;&nbsp;{{ trans('errors.header.404') }}</h2>
</div>
<div class="card-body">
<h3><i class="fa fa-exclamation-triangle text-yellow"></i> {{ trans('errors.body.page_not_found') }}</h3>
<p>{{ trans('errors.message.404') }}</p>
<p>{!! trans('errors.messages.page_not_found', ['link' => url('/')]) !!}</p>
<a href="{{ url('/') }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans('general.dashboard')]) }}</a>
</div>
</div>
@endsection

View File

@ -1,16 +1,17 @@
@extends('layouts.admin')
@extends('layouts.error')
@section('title', trans('errors.error_page'))
@section('title', trans('errors.title.500'))
@section('content')
<div class="card">
<div class="card-header">
<h2 class="mb-0 text-danger">500 Internal Server Error</h2>
<h2 class="mb-0 text-danger"><i class="fa fa-exclamation-triangle text-danger"></i>&nbsp;&nbsp;{{ trans('errors.header.500') }}</h2>
</div>
<div class="card-body">
<h3><i class="fa fa-exclamation-triangle text-danger"></i> {{ trans('errors.body.error_page') }}</h3>
<p>{{ trans('errors.message.500') }}</p>
<p>{!! trans('errors.messages.error_page', ['link' => url('/') ]) !!}</p>
<a href="{{ url('/') }}" class="btn btn-success header-button-top"><span class="fa fa-tachometer-alt"></span> &nbsp;{{ trans('general.go_to', ['name' => trans('general.dashboard')]) }}</a>
</div>
</div>
@endsection

View File

@ -0,0 +1,31 @@
<html lang="{{ app()->getLocale() }}">
@include('partials.admin.head')
<body class="g-sidenav-show g-sidenav-pinned">
@stack('body_start')
<div class="main-content" id="panel">
<div id="main-body">
@include('partials.admin.header')
<div class="container-fluid content-layout mt--6">
@include('partials.admin.content')
@include('partials.admin.footer')
</div>
</div>
</div>
@stack('body_end')
@include('partials.admin.scripts')
</body>
</html>

View File

@ -1,31 +1,31 @@
@stack('header_start')
<div id="header" class="header pb-6">
<div class="container-fluid content-layout">
<div class="header-body">
<div class="row py-4 align-items-center">
<div class="col-sm-4 col-md-5 align-items-center">
<h2 class="d-inline-flex mb-0 long-texts">@yield('title')</h2>
@yield('dashboard_action')
</div>
<div class="col-sm-8 col-md-7">
<div class="text-right">
@yield('new_button')
<div id="header" class="header pb-6">
<div class="container-fluid content-layout">
<div class="header-body">
<div class="row py-4 align-items-center">
<div class="col-sm-4 col-md-5 align-items-center">
<h2 class="d-inline-flex mb-0 long-texts">@yield('title')</h2>
@yield('dashboard_action')
</div>
<div class="col-sm-8 col-md-7">
<div class="text-right">
@yield('new_button')
@permission('read-modules-home')
@if (!empty($suggestion_modules))
@foreach($suggestion_modules as $s_module)
<span>
<a href="{{ url($s_module->action_url) . '?' . http_build_query((array) $s_module->action_parameters) }}" class="btn btn-white btn-sm header-button-bottom" target="{{ $s_module->action_target }}"><span class="fa fa-rocket"></span> &nbsp;{{ $s_module->name }}</a>
</span>
@endforeach
@endif
@endpermission
@permission('read-modules-home')
@if (!empty($suggestion_modules))
@foreach($suggestion_modules as $s_module)
<span>
<a href="{{ url($s_module->action_url) . '?' . http_build_query((array) $s_module->action_parameters) }}" class="btn btn-white btn-sm header-button-bottom" target="{{ $s_module->action_target }}"><span class="fa fa-rocket"></span> &nbsp;{{ $s_module->name }}</a>
</span>
@endforeach
@endif
@endpermission
@stack('header_button')
</div>
@stack('header_button')
</div>
</div>
</div>
</div>
</div>
</div>
@stack('header_end')

View File

@ -1,252 +1,252 @@
@stack('navbar_start')
<nav class="navbar navbar-top navbar-expand navbar-dark border-bottom">
<div class="container-fluid">
<div class="collapse navbar-collapse" id="navbarSupportedContent">
@if (user()->can('read-common-search'))
<form class="navbar-search navbar-search-light form-inline mb-0" id="navbar-search-main" autocomplete="off">
<div id="global-search" class="form-group mb-0 mr-sm-3">
<div class="input-group input-group-alternative input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-search"></i></span>
</div>
<input type="text" name="search" v-model="keyword" @input="onChange" v-click-outside="closeResult" class="form-control" autocomplete="off" placeholder="Search">
<div class="dropdown-menu dropdown-menu-xl dropdown-menu-center" ref="menu" :class="[{show: show}]">
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" :href="item.href" v-for="(item, index) in items">
<div class="row align-items-center">
<div class="col ml--2">
<div class="d-flex justify-content-between align-items-center">
<div>
<div class="name" v-text="item.name"></div>
</div>
<div class="text-muted">
<span class="type" v-text="item.type"></span>
</div>
<nav class="navbar navbar-top navbar-expand navbar-dark border-bottom">
<div class="container-fluid">
<div class="collapse navbar-collapse" id="navbarSupportedContent">
@permission('read-common-search')
<form class="navbar-search navbar-search-light form-inline mb-0" id="navbar-search-main" autocomplete="off">
<div id="global-search" class="form-group mb-0 mr-sm-3">
<div class="input-group input-group-alternative input-group-merge">
<div class="input-group-prepend">
<span class="input-group-text"><i class="fa fa-search"></i></span>
</div>
<input type="text" name="search" v-model="keyword" @input="onChange" v-click-outside="closeResult" class="form-control" autocomplete="off" placeholder="Search">
<div class="dropdown-menu dropdown-menu-xl dropdown-menu-center" ref="menu" :class="[{show: show}]">
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action" :href="item.href" v-for="(item, index) in items">
<div class="row align-items-center">
<div class="col ml--2">
<div class="d-flex justify-content-between align-items-center">
<div>
<div class="name" v-text="item.name"></div>
</div>
<div class="text-muted">
<span class="type" v-text="item.type"></span>
</div>
</div>
</div>
</a>
</div>
</div>
</a>
</div>
</div>
</div>
<button type="button" class="close" data-action="search-close" data-target="#navbar-search-main" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</form>
@endif
</div>
<button type="button" class="close" data-action="search-close" data-target="#navbar-search-main" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</form>
@endpermission
<ul class="navbar-nav align-items-center ml-md-auto">
<li class="nav-item d-xl-none">
<div class="pr-3 sidenav-toggler sidenav-toggler-dark" data-action="sidenav-pin" data-target="#sidenav-main">
<div class="sidenav-toggler-inner">
<i class="sidenav-toggler-line"></i>
<i class="sidenav-toggler-line"></i>
<i class="sidenav-toggler-line"></i>
</div>
<ul class="navbar-nav align-items-center ml-md-auto">
<li class="nav-item d-xl-none">
<div class="pr-3 sidenav-toggler sidenav-toggler-dark" data-action="sidenav-pin" data-target="#sidenav-main">
<div class="sidenav-toggler-inner">
<i class="sidenav-toggler-line"></i>
<i class="sidenav-toggler-line"></i>
<i class="sidenav-toggler-line"></i>
</div>
</li>
</div>
</li>
<li class="nav-item d-sm-none">
<a class="nav-link" href="#" data-action="search-show" data-target="#navbar-search-main">
<i class="fa fa-search"></i>
</a>
</li>
@if (user()->can(['create-incomes-invoices', 'create-incomes-revenues', 'create-incomes-customers', 'create-expenses-bills', 'create-expenses-payments', 'create-expenses-vendors']))
<li class="nav-item dropdown">
<a class="nav-link" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-plus"></i>
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-dark dropdown-menu-right">
<div class="row shortcuts px-4">
@permission('create-incomes-invoices')
<a href="{{ route('invoices.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-info">
<i class="fa fa-money-bill"></i>
</span>
<small class="text-info">{{ trans_choice('general.invoices', 1) }}</small>
</a>
@endpermission
@permission('create-incomes-revenues')
<a href="{{ route('revenues.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-info">
<i class="fas fa-hand-holding-usd"></i>
</span>
<small class="text-info">{{ trans_choice('general.revenues', 1) }}</small>
</a>
@endpermission
@permission('create-incomes-customers')
<a href="{{ route('customers.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-info">
<i class="fas fa-user"></i>
</span>
<small class="text-info">{{ trans_choice('general.customers', 1) }}</small>
</a>
@endpermission
@permission('create-expenses-bills')
<a href="{{ route('bills.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-danger">
<i class="fa fa-shopping-cart"></i>
</span>
<small class="text-danger">{{ trans_choice('general.bills', 1) }}</small>
</a>
@endpermission
@permission('create-expenses-payments')
<a href="{{ route('payments.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-danger">
<i class="fas fa-hand-holding-usd"></i>
</span>
<small class="text-danger">{{ trans_choice('general.payments', 1) }}</small>
</a>
@endpermission
@permission('create-expenses-vendors')
<a href="{{ route('vendors.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-danger">
<i class="fas fa-user"></i>
</span>
<small class="text-danger">{{ trans_choice('general.vendors', 1) }}</small>
</a>
@endpermission
</div>
</div>
</li>
@endif
<li class="nav-item d-sm-none">
<a class="nav-link" href="#" data-action="search-show" data-target="#navbar-search-main">
<i class="fa fa-search"></i>
</a>
</li>
@permission(['create-incomes-invoices', 'create-incomes-revenues', 'create-incomes-customers', 'create-expenses-bills', 'create-expenses-payments', 'create-expenses-vendors'])
<li class="nav-item dropdown">
<a class="nav-link" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<i class="fas fa-plus"></i>
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-dark dropdown-menu-right">
<div class="row shortcuts px-4">
@permission('create-incomes-invoices')
<a href="{{ route('invoices.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-info">
<i class="fa fa-money-bill"></i>
</span>
<small class="text-info">{{ trans_choice('general.invoices', 1) }}</small>
</a>
@endpermission
@permission('create-incomes-revenues')
<a href="{{ route('revenues.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-info">
<i class="fas fa-hand-holding-usd"></i>
</span>
<small class="text-info">{{ trans_choice('general.revenues', 1) }}</small>
</a>
@endpermission
@permission('create-incomes-customers')
<a href="{{ route('customers.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-info">
<i class="fas fa-user"></i>
</span>
<small class="text-info">{{ trans_choice('general.customers', 1) }}</small>
</a>
@endpermission
@permission('create-expenses-bills')
<a href="{{ route('bills.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-danger">
<i class="fa fa-shopping-cart"></i>
</span>
<small class="text-danger">{{ trans_choice('general.bills', 1) }}</small>
</a>
@endpermission
@permission('create-expenses-payments')
<a href="{{ route('payments.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-danger">
<i class="fas fa-hand-holding-usd"></i>
</span>
<small class="text-danger">{{ trans_choice('general.payments', 1) }}</small>
</a>
@endpermission
@permission('create-expenses-vendors')
<a href="{{ route('vendors.create') }}" class="col-4 shortcut-item">
<span class="shortcut-media avatar rounded-circle bg-gradient-danger">
<i class="fas fa-user"></i>
</span>
<small class="text-danger">{{ trans_choice('general.vendors', 1) }}</small>
</a>
@endpermission
</div>
</div>
</li>
@endif
<li class="nav-item dropdown">
<a class="nav-link" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span>
<i class="far fa-bell"></i>
</span>
@if ($notifications)
<span class="badge badge-md badge-circle badge-reminder badge-warning">{{ $notifications }}</span>
@endif
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right py-0 overflow-hidden">
@if ($notifications)
<div class="p-3">
<a class="text-sm text-muted">{{ trans_choice('header.notifications.counter', $notifications, ['count' => $notifications]) }}</a>
</div>
@endif
<div class="list-group list-group-flush">
@if (count($bills))
<a href="{{ route('users.read.bills', $user->id) }}" class="list-group-item list-group-item-action">
<div class="row align-items-center">
<div class="col-auto">
<i class="fa fa-shopping-cart"></i>
</div>
<div class="col ml--2">
<div class="d-flex justify-content-between align-items-center">
<h4 class="mb-0 text-sm">{{ trans_choice('header.notifications.upcoming_bills', count($bills), ['count' => count($bills)]) }}</h4>
</div>
</div>
</div>
</a>
@endif
@if (count($invoices))
<a href="{{ route('users.read.invoices', $user->id) }}" class="list-group-item list-group-item-action">
<div class="row align-items-center">
<div class="col-auto">
<i class="fa fa-money-bill"></i>
</div>
<div class="col ml--2">
<div class="d-flex justify-content-between align-items-center">
<h4 class="mb-0 text-sm">{{ trans_choice('header.notifications.overdue_invoices', count($invoices), ['count' => count($invoices)]) }}</h4>
</div>
</div>
</div>
</a>
@endif
</div>
@if ($notifications)
<a href="#" class="dropdown-item text-center text-primary font-weight-bold py-3">{{ trans('header.notifications.view_all') }}</a>
@else
<a class="dropdown-item text-center text-primary font-weight-bold py-3">{{ trans_choice('header.notifications.counter', $notifications, ['count' => $notifications]) }}</a>
@endif
</div>
</li>
@permission('read-install-updates')
<li class="nav-item">
<a class="nav-link" href="{{ route('updates.index') }}" title="{{ $updates }} Updates Available" role="button" aria-haspopup="true" aria-expanded="false">
<span>
<i class="far fa-bell"></i>
<i class="fa fa-sync-alt"></i>
</span>
@if ($notifications)
<span class="badge badge-md badge-circle badge-reminder badge-warning">{{ $notifications }}</span>
@if ($updates)
<span class="badge badge-md badge-circle badge-update badge-warning">{{ $updates }}</span>
@endif
</a>
<div class="dropdown-menu dropdown-menu-lg dropdown-menu-right py-0 overflow-hidden">
@if ($notifications)
<div class="p-3">
<a class="text-sm text-muted">{{ trans_choice('header.notifications.counter', $notifications, ['count' => $notifications]) }}</a>
</div>
@endif
<div class="list-group list-group-flush">
@if (count($bills))
<a href="{{ route('users.read.bills', $user->id) }}" class="list-group-item list-group-item-action">
<div class="row align-items-center">
<div class="col-auto">
<i class="fa fa-shopping-cart"></i>
</div>
<div class="col ml--2">
<div class="d-flex justify-content-between align-items-center">
<h4 class="mb-0 text-sm">{{ trans_choice('header.notifications.upcoming_bills', count($bills), ['count' => count($bills)]) }}</h4>
</div>
</div>
</div>
</a>
@endif
@if (count($invoices))
<a href="{{ route('users.read.invoices', $user->id) }}" class="list-group-item list-group-item-action">
<div class="row align-items-center">
<div class="col-auto">
<i class="fa fa-money-bill"></i>
</div>
<div class="col ml--2">
<div class="d-flex justify-content-between align-items-center">
<h4 class="mb-0 text-sm">{{ trans_choice('header.notifications.overdue_invoices', count($invoices), ['count' => count($invoices)]) }}</h4>
</div>
</div>
</div>
</a>
@endif
</div>
@if ($notifications)
<a href="#" class="dropdown-item text-center text-primary font-weight-bold py-3">{{ trans('header.notifications.view_all') }}</a>
@else
<a class="dropdown-item text-center text-primary font-weight-bold py-3">{{ trans_choice('header.notifications.counter', $notifications, ['count' => $notifications]) }}</a>
@endif
</div>
</li>
@endpermission
@permission('read-install-updates')
<li class="nav-item">
<a class="nav-link" href="{{ route('updates.index') }}" title="{{ $updates }} Updates Available" role="button" aria-haspopup="true" aria-expanded="false">
<span>
<i class="fa fa-sync-alt"></i>
<li class="nav-item d-none d-md-block">
<a class="nav-link" href="{{ url(trans('header.support_link')) }}" target="_blank" title="{{ trans('general.help') }}" role="button" aria-haspopup="true" aria-expanded="false">
<i class="far fa-life-ring"></i>
</a>
</li>
</ul>
<ul class="navbar-nav align-items-center ml-auto ml-md-0">
<li class="nav-item dropdown">
<a class="nav-link pr-0" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<div class="media align-items-center">
<img src="{{ asset('public/img/user.png') }}" height="36" width="36" alt="User"/>
<div class="media-body ml-2 d-none d-lg-block">
<span class="mb-0 text-sm font-weight-bold">
@if (!empty($user->name))
{{ $user->name }}
@endif
</span>
@if ($updates)
<span class="badge badge-md badge-circle badge-update badge-warning">{{ $updates }}</span>
@endif
</a>
</li>
@endpermission
<li class="nav-item d-none d-md-block">
<a class="nav-link" href="{{ url(trans('header.support_link')) }}" target="_blank" title="{{ trans('general.help') }}" role="button" aria-haspopup="true" aria-expanded="false">
<i class="far fa-life-ring"></i>
</a>
</li>
</ul>
<ul class="navbar-nav align-items-center ml-auto ml-md-0">
<li class="nav-item dropdown">
<a class="nav-link pr-0" href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
<div class="media align-items-center">
<img src="{{ asset('public/img/user.png') }}" height="36" width="36" alt="User"/>
<div class="media-body ml-2 d-none d-lg-block">
<span class="mb-0 text-sm font-weight-bold">
@if (!empty($user->name))
{{ $user->name }}
@endif
</span>
</div>
</div>
</a>
<div class="dropdown-menu dropdown-menu-right">
<div class="dropdown-header noti-title">
<h6 class="text-overflow m-0">{{ trans('general.welcome') }}</h6>
</div>
@permission('update-auth-users')
<a href="{{ route('users.edit', $user->id) }}" class="dropdown-item">
<i class="fas fa-user"></i>
<span>{{ trans('auth.profile') }}</span>
</a>
@endpermission
@permission('read-auth-users')
<div class="dropdown-divider"></div>
<a href="{{ route('users.index') }}" class="dropdown-item">
<i class="fas fa-users"></i>
<span>{{ trans_choice('general.users', 2) }}</span>
</a>
@endpermission
@permission('read-auth-roles')
<a href="{{ route('roles.index') }}" class="dropdown-item">
<i class="fas fa-list"></i>
<span>{{ trans_choice('general.roles', 2) }}</span>
</a>
@endpermission
@permission('read-auth-permissions')
<a href="{{ route('permissions.index') }}" class="dropdown-item">
<i class="fas fa-key"></i>
<span>{{ trans_choice('general.permissions', 2) }}</span>
</a>
@endpermission
<div class="dropdown-divider"></div>
<a href="{{ route('logout') }}" class="dropdown-item">
<i class="fas fa-power-off"></i>
<span>{{ trans('auth.logout') }}</span>
</a>
</div>
</li>
</ul>
</div>
</a>
<div class="dropdown-menu dropdown-menu-right">
<div class="dropdown-header noti-title">
<h6 class="text-overflow m-0">{{ trans('general.welcome') }}</h6>
</div>
@permission('update-auth-users')
<a href="{{ route('users.edit', $user->id) }}" class="dropdown-item">
<i class="fas fa-user"></i>
<span>{{ trans('auth.profile') }}</span>
</a>
@endpermission
@permission('read-auth-users')
<div class="dropdown-divider"></div>
<a href="{{ route('users.index') }}" class="dropdown-item">
<i class="fas fa-users"></i>
<span>{{ trans_choice('general.users', 2) }}</span>
</a>
@endpermission
@permission('read-auth-roles')
<a href="{{ route('roles.index') }}" class="dropdown-item">
<i class="fas fa-list"></i>
<span>{{ trans_choice('general.roles', 2) }}</span>
</a>
@endpermission
@permission('read-auth-permissions')
<a href="{{ route('permissions.index') }}" class="dropdown-item">
<i class="fas fa-key"></i>
<span>{{ trans_choice('general.permissions', 2) }}</span>
</a>
@endpermission
<div class="dropdown-divider"></div>
<a href="{{ route('logout') }}" class="dropdown-item">
<i class="fas fa-power-off"></i>
<span>{{ trans('auth.logout') }}</span>
</a>
</div>
</li>
</ul>
</div>
</nav>
</div>
</nav>
@stack('navbar_end')

View File

@ -1,21 +1,21 @@
@stack('header_start')
<div id="header" class="header pb-6">
<div class="container-fluid content-layout">
<div class="header-body">
<div class="row py-4 align-items-center">
<div class="col-sm-4 col-md-5 align-items-center">
<h2 class="d-inline-flex mb-0 long-texts">@yield('title')</h2>
@yield('dashboard_action')
</div>
<div class="col-sm-8 col-md-7">
<div class="text-right">
@yield('new_button')
<div id="header" class="header pb-6">
<div class="container-fluid content-layout">
<div class="header-body">
<div class="row py-4 align-items-center">
<div class="col-sm-4 col-md-5 align-items-center">
<h2 class="d-inline-flex mb-0 long-texts">@yield('title')</h2>
@yield('dashboard_action')
</div>
<div class="col-sm-8 col-md-7">
<div class="text-right">
@yield('new_button')
@stack('header_button')
</div>
@stack('header_button')
</div>
</div>
</div>
</div>
</div>
</div>
@stack('header_end')