First complete upload CasaDoc

This commit is contained in:
2024-09-18 10:42:19 +02:00
commit 2ab3e52df3
3042 changed files with 407823 additions and 0 deletions
+88
View File
@@ -0,0 +1,88 @@
@extends('layouts.auth')
@section('page-title', trans('Login'))
@section('content')
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p" id="login">
<div class="text-center">
<img src="{{ url('assets/img/casadoclogo.png') }}" alt="{{ setting('app_name') }}" height="100">
</div>
<div class="card mt-5">
<div class="card-body">
<h5 class="card-title text-center mt-4 text-uppercase">
@lang('Login')
</h5>
<div class="p-4">
@include('auth.social.buttons')
@include('partials.messages')
<form role="form" action="<?= url('login') ?>" method="POST" id="login-form" autocomplete="off" class="mt-3">
<input type="hidden" value="<?= csrf_token() ?>" name="_token">
@if (Request::has('to'))
<input type="hidden" value="{{ Request::get('to') }}" name="to">
@endif
<div class="form-group">
<label for="username" class="sr-only">@lang('Email or Username')</label>
<input type="text"
name="username"
id="username"
class="form-control input-solid"
placeholder="@lang('Email or Username')"
value="{{ old('username') }}">
</div>
<div class="form-group password-field">
<label for="password" class="sr-only">@lang('Password')</label>
<input type="password"
name="password"
id="password"
class="form-control input-solid"
placeholder="@lang('Password')">
</div>
@if (setting('remember_me'))
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="remember" id="remember" value="1"/>
<label class="custom-control-label font-weight-normal" for="remember">
@lang('Remember me?')
</label>
</div>
@endif
<div class="form-group mt-4">
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-login">
@lang('Log In')
</button>
</div>
</form>
@if (setting('forgot_password'))
<a href="<?= route('password.request') ?>" class="forgot">@lang('I forgot my password')</a>
@endif
</div>
</div>
</div>
<div class="text-center text-muted">
@if (setting('reg_enabled'))
@lang("Don't have an account?")
<a class="font-weight-bold" href="<?= url("register") ?>">@lang('Sign Up')</a>
@endif
</div>
</div>
@stop
@section('scripts')
{!! HTML::script('assets/js/as/login.js') !!}
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\LoginRequest', '#login-form') !!}
@stop
@@ -0,0 +1,53 @@
@extends('layouts.auth')
@section('page-title', __('Reset Password'))
@section('content')
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
<div class="text-center">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</div>
<div class="card mt-5">
<div class="card-body">
<h5 class="card-title text-center mt-4 mb-2 text-uppercase">
@lang('Forgot Your Password?')
</h5>
<div class="p-4">
<form role="form" action="<?= route('password.email') ?>" method="POST" id="remind-password-form" autocomplete="off">
{{ csrf_field() }}
<p class="text-muted mb-4 text-center font-weight-light">
@lang('Please provide your email below and we will send you a password reset link.')
</p>
@include('partials.messages')
<div class="form-group password-field my-3">
<label for="password" class="sr-only">@lang('Email')</label>
<input type="email"
name="email"
id="email"
class="form-control input-solid"
placeholder="@lang('Your E-Mail')">
</div>
<div class="form-group mt-4">
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-reset-password">
@lang('Reset Password')
</button>
</div>
</form>
</div>
</div>
</div>
</div>
@stop
@section('scripts')
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\PasswordRemindRequest', '#remind-password-form') !!}
@stop
@@ -0,0 +1,71 @@
@extends('layouts.auth')
@section('page-title', __('Reset Password'))
@section('content')
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
<div class="text-center">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</div>
<div class="card mt-5">
<div class="card-body">
<h5 class="card-title text-center mt-4 mb-2 text-uppercase">
@lang('Reset Your Password')
</h5>
<form role="form" action="{{ route('password.update') }}" method="POST" id="reset-password-form"
autocomplete="off" class="p-4">
<input type="hidden" name="token" value="{{ $token }}">
{{ csrf_field() }}
<p class="text-muted mb-4 text-center font-weight-light px-2">
@lang('Please provide your email and pick a new password below.')
</p>
@include('partials.messages')
<div class="form-group">
<label for="password" class="sr-only">@lang('Your E-Mail')</label>
<input type="email"
name="email"
id="email"
class="form-control input-solid"
placeholder="@lang('Your E-Mail')">
</div>
<div class="form-group">
<label for="password" class="sr-only">@lang('New Password')</label>
<input type="password"
name="password"
id="password"
class="form-control input-solid"
placeholder="@lang('New Password')">
</div>
<div class="form-group">
<label for="password" class="sr-only">@lang('Confirm New Password')</label>
<input type="password"
name="password_confirmation"
id="password_confirmation"
class="form-control input-solid"
placeholder="@lang('Confirm New Password')">
</div>
<div class="form-group mt-5">
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-reset-password">
@lang('Update Password')
</button>
</div>
</form>
</div>
</div>
</div>
@stop
@section('scripts')
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\PasswordResetRequest', '#reset-password-form') !!}
@stop
+124
View File
@@ -0,0 +1,124 @@
@extends('layouts.auth')
@section('page-title', __('Sign Up'))
@if (setting('registration.captcha.enabled'))
<script src='https://www.google.com/recaptcha/api.js'></script>
@endif
@section('content')
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
<div class="text-center">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</div>
<div class="card mt-5">
<div class="card-body">
<h5 class="card-title text-center mt-4 text-uppercase">
@lang('Register')
</h5>
<div class="p-4">
@include('auth.social.buttons')
@include('partials/messages')
<form role="form" action="<?= url('register') ?>" method="post" id="registration-form" autocomplete="off" class="mt-3">
<input type="hidden" value="<?= csrf_token() ?>" name="_token">
<div class="form-group">
<input type="email"
name="email"
id="email"
class="form-control input-solid"
placeholder="@lang('Email')"
value="{{ old('email') }}">
</div>
<div class="form-group">
<input type="text"
name="username"
id="username"
class="form-control input-solid"
placeholder="@lang('Username')"
value="{{ old('username') }}">
</div>
<div class="form-group">
<input type="password"
name="password"
id="password"
class="form-control input-solid"
placeholder="@lang('Password')">
</div>
<div class="form-group">
<input type="password"
name="password_confirmation"
id="password_confirmation"
class="form-control input-solid"
placeholder="@lang('Confirm Password')">
</div>
@if (setting('tos'))
<div class="custom-control custom-checkbox">
<input type="checkbox" class="custom-control-input" name="tos" id="tos" value="1"/>
<label class="custom-control-label font-weight-normal" for="tos">
@lang('I accept')
<a href="#tos-modal" data-toggle="modal">@lang('Terms of Service')</a>
</label>
</div>
@endif
{{-- Only display captcha if it is enabled --}}
@if (setting('registration.captcha.enabled'))
<div class="form-group my-4">
{!! app('captcha')->display() !!}
</div>
@endif
{{-- end captcha --}}
<div class="form-group mt-4">
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-login">
@lang('Register')
</button>
</div>
</form>
</div>
</div>
</div>
<div class="text-center text-muted">
@if (setting('reg_enabled'))
@lang('Already have an account?')
<a class="font-weight-bold" href="<?= url("login") ?>">@lang('Login')</a>
@endif
</div>
</div>
@if (setting('tos'))
<div class="modal fade" id="tos-modal" tabindex="-1" role="dialog" aria-labelledby="tos-label">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="tos-label">@lang('Terms of Service')</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body">
@include('auth.tos')
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">
@lang('Close')
</button>
</div>
</div>
</div>
</div>
@endif
@stop
@section('scripts')
{!! JsValidator::formRequest('Vanguard\Http\Requests\Auth\RegisterRequest', '#registration-form') !!}
@stop
@@ -0,0 +1,30 @@
@if ($socialProviders)
<?php $colSize = 12 / count($socialProviders); ?>
<div class="row pb-3 pt-2">
@if (in_array('facebook', $socialProviders))
<div class="col-{{ $colSize }} d-flex align-items-center justify-content-center">
<a href="{{ url('auth/facebook/login') }}" class="btn-facebook">
<i class="fab fa-facebook fa-2x"></i>
</a>
</div>
@endif
@if (in_array('twitter', $socialProviders))
<div class="col-{{ $colSize }} d-flex align-items-center justify-content-center">
<a href="{{ url('auth/twitter/login') }}" class="btn-twitter">
<i class="fab fa-twitter fa-2x"></i>
</a>
</div>
@endif
@if (in_array('google', $socialProviders))
<div class="col-{{ $colSize }} d-flex align-items-center justify-content-center">
<a href="{{ url('auth/google/login') }}" class="btn-google">
<i class="fab fa-google-plus-square fa-2x"></i>
</a>
</div>
@endif
</div>
@endif
+44
View File
@@ -0,0 +1,44 @@
@extends('layouts.auth')
@section('page-title', trans('Two-Factor Authentication'))
@section('content')
<div class="col-md-8 col-lg-6 col-xl-5 mx-auto my-10p">
<div class="text-center">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ setting('app_name') }}" height="50">
</div>
<div class="card mt-5">
<div class="card-body">
<h5 class="card-title text-center mt-4 text-uppercase">
@lang('Two-Factor Authentication')
</h5>
<div class="p-4">
@include('partials/messages')
<form role="form" action="<?= route('auth.token.validate') ?>" method="POST" autocomplete="off">
<input type="hidden" value="<?= csrf_token() ?>" name="_token">
<div class="form-group">
<label for="password" class="sr-only">@lang('Token')</label>
<input type="text"
name="token"
id="token"
class="form-control input-solid"
placeholder="@lang('Authy 2FA Token')">
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary btn-lg btn-block" id="btn-reset-password">
@lang('Validate')
</button>
</div>
</form>
</div>
</div>
</div>
</div>
@stop
+24
View File
@@ -0,0 +1,24 @@
<h4>1. Terms</h4>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
Donec quis lacus porttitor, dignissim nibh sit amet, fermentum felis.
Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere
cubilia Curae; In ultricies consectetur viverra. Nullam velit neque,
placerat condimentum tempus tincidunt, placerat eu lectus. Nam molestie
porta purus, et pretium risus vehicula in. Cras sem ipsum, varius sagittis
rhoncus nec, dictum maximus diam. Duis ac laoreet est. In turpis velit, placerat
eget nisi vitae, dignissim tristique nisl. Curabitur sollicitudin, nunc ut
viverra interdum, lacus...
</p>
<h4>2. Use License</h4>
<ol type="a">
<li>
Aenean vehicula erat eu nisi scelerisque, a mattis purus blandit. Curabitur congue
ollis nisl malesuada egestas. Lorem ipsum dolor sit amet, consectetur adipiscing elit:
</li>
</ol>
<p>...</p>
+30
View File
@@ -0,0 +1,30 @@
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-center">
<div class="col-md-8">
<div class="card">
<div class="card-body">
<h5 class="card-title">{{ __('Verify Your Email Address') }}</h5>
@if (session('resent'))
<div class="alert alert-success" role="alert">
{{ __('A fresh verification link has been sent to your email address.') }}
</div>
@endif
{{ __('Before proceeding, please check your email for a verification link.') }}
{{ __('If you did not receive the email') }},
<form action="{{ route('verification.resend') }}" method="POST" class="d-inline">
@csrf
<button type="submit" class="d-inline btn btn-link p-0">
{{ __('click here to request another') }}
</button>.
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
+35
View File
@@ -0,0 +1,35 @@
@extends('layouts.app')
@section('page-title', __('Dashboard'))
@section('page-heading', __('Dashboard'))
@section('breadcrumbs')
<li class="breadcrumb-item active">
@lang('Dashboard')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="row">
@foreach (\Vanguard\Plugins\Vanguard::availableWidgets(auth()->user()) as $widget)
@if ($widget->width)
<div class="col-md-{{ $widget->width }}">
@endif
{!! app()->call([$widget, 'render']) !!}
@if($widget->width)
</div>
@endif
@endforeach
</div>
@stop
@section('scripts')
@foreach (\Vanguard\Plugins\Vanguard::availableWidgets(auth()->user()) as $widget)
@if (method_exists($widget, 'scripts'))
{!! app()->call([$widget, 'scripts']) !!}
@endif
@endforeach
@stop
@@ -0,0 +1,32 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => [
'welcome' => 'selected done',
'requirements' => 'selected done',
'permissions' => 'selected done',
'database' => 'selected done',
'installation' => 'selected done',
'complete' => 'selected'
]])
<div class="step-content">
<h3>Complete!</h3>
<hr>
<p><strong>Well Done!</strong></p>
<p>You application is now successfully installed! You can login by clicking on "Log In" button below.</p>
@if (is_writable(base_path()))
<p><strong>Important!</strong> Since your root directory is still writable,
you can change the permissions to 755 to make it writable only by root user.</p>
@endif
<a class="btn btn-primary float-right" href="{{ url('login') }}">
<i class="fa fa-sign-in"></i>
Log In
</a>
<div class="clearfix"></div>
</div>
@stop
@@ -0,0 +1,51 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => [
'welcome' => 'selected done',
'requirements' => 'selected done',
'permissions' => 'selected done',
'database' => 'selected'
]])
@include('partials.messages')
{!! Form::open(['route' => 'install.installation']) !!}
<div class="step-content">
<h3>Database Info</h3>
<hr>
<div class="form-group">
<label for="host">Host</label>
<input type="text" class="form-control" id="host" name="host" value="{{ old('host') }}">
<small>Database host. Usually you should enter localhost or mysql.</small>
</div>
<div class="form-group">
<label for="username">Username</label>
<input type="text" class="form-control" id="username" name="username" value="{{ old('username') }}">
<small>Your database username.</small>
</div>
<div class="form-group">
<label for="password">Password</label>
<input type="password" class="form-control" id="password" name="password">
<small>Database password for provided username.</small>
</div>
<div class="form-group">
<label for="database">Database Name</label>
<input type="text" class="form-control" id="database" name="database" value="{{ old('database') }}">
<small>Name of database where tables should be created.</small>
</div>
<div class="form-group">
<label for="prefix">Tables Prefix</label>
<input type="text" class="form-control" id="prefix" name="prefix" value="{{ old('prefix') }}">
<small>Prefix to put in front of database table names. You can leave it blank if you want.</small>
</div>
<button class="btn btn-green float-right mt-3">
Next
<i class="fa fa-arrow-right"></i>
</button>
<div class="clearfix"></div>
</div>
{!! Form::close() !!}
@stop
+27
View File
@@ -0,0 +1,27 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => [
'welcome' => 'selected done',
'requirements' => 'selected done',
'permissions' => 'selected done',
'database' => 'selected done',
'installation' => 'selected done',
'complete' => 'selected error'
]])
<div class="step-content">
<h3>Whoops!</h3>
<hr>
<p><strong>There was something wrong during the installation!</strong></p>
<p>Please check your log located inside <code>storage/logs</code> directory to see what's going on.</p>
<a class="btn btn-primary float-right mt-3" href="{{ route('install.start') }}">
<i class="fa fa-undo"></i>
Try Again
</a>
<div class="clearfix"></div>
</div>
@stop
@@ -0,0 +1,30 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => [
'welcome' => 'selected done',
'requirements' => 'selected done',
'permissions' => 'selected done',
'database' => 'selected done',
'installation' => 'selected'
]])
{!! Form::open(['route' => 'install.install']) !!}
<div class="step-content">
<h3>Installation</h3>
<hr>
<p>Vanguard is ready to be installed!</p>
<p>Before you proceed, please provide the name for your application below:</p>
<div class="form-group">
<label for="app_name">App Name</label>
<input type="text" class="form-control" id="app_name" name="app_name" value="Vanguard">
</div>
<button class="btn btn-green pull-right" data-toggle="loader" data-loading-text="Installing" type="submit">
<i class="fa fa-play"></i>
Install
</button>
<div class="clearfix"></div>
</div>
{!! Form::close() !!}
@stop
@@ -0,0 +1,35 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => [
'welcome' => 'selected done',
'requirements' => 'selected done',
'permissions' => 'selected'
]])
<div class="step-content">
<h3>Permissions</h3>
<hr>
<ul class="list-group mb-4">
@foreach($folders as $path => $isWritable)
<li class="list-group-item">
{{ $path }}
@if ($isWritable)
<span class="badge badge-secondary float-right ml-2">775</span>
<span class="badge badge-success float-right"><i class="fa fa-check"></i></span>
@else
<span class="badge badge-secondary float-right ml-2">775</span>
<span class="badge badge-danger float-right"><i class="fa fa-times"></i></span>
@endif
</li>
@endforeach
</ul>
<a class="btn btn-green float-right" href="{{ route('install.database') }}">
Next
<i class="fa fa-arrow-right"></i>
</a>
<div class="clearfix"></div>
</div>
@stop
@@ -0,0 +1,41 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => ['welcome' => 'selected done', 'requirements' => 'selected']])
@if (! $allLoaded)
<div class="alert alert-danger">
<strong>Oh snap!</strong> Your system does not meet the requirements. You have to fix them in order to continue.
</div>
@endif
<div class="step-content">
<h3>System Requirements</h3>
<hr>
<ul class="list-group mb-4">
@foreach ($requirements as $extension => $loaded)
<li class="list-group-item {{ ! $loaded ? 'list-group-item-danger' : '' }}">
{{ $extension }}
@if ($loaded)
<span class="badge badge-success float-right"><i class="fa fa-check"></i></span>
@else
<span class="badge badge-danger float-right"><i class="fa fa-times"></i></span>
@endif
</li>
@endforeach
</ul>
@if ($allLoaded)
<a class="btn btn-green float-right" href="{{ route('install.permissions') }}">
Next
<i class="fa fa-arrow-right"></i>
</a>
@else
<button class="btn btn-green pull-right" disabled>
Next
<i class="fa fa-arrow-right"></i>
</button>
@endif
<div class="clearfix"></div>
</div>
@stop
+20
View File
@@ -0,0 +1,20 @@
@extends('layouts.install')
@section('content')
@include('install.steps', ['steps' => ['welcome' => 'selected']])
<div class="step-content">
<h3>Welcome</h3>
<hr>
<p>This steps will guide you through few step installation process.</p>
<p>When this installation process is finished, you will be able
to login and manage your users immediately! </p>
<br>
<a href="{{ route('install.requirements') }}" class="btn btn-primary float-right" role="button">
Next
<i class="fa fa-arrow-right"></i>
</a>
<div class="clearfix"></div>
</div>
@stop
+40
View File
@@ -0,0 +1,40 @@
<div class="steps">
<ul>
<li>
<a class="{{ isset($steps['welcome']) ? $steps['welcome'] : '' }}">
<div class="stepNumber"><i class="fa fa-home"></i></div>
<span class="stepDesc text-small">Welcome</span>
</a>
</li>
<li>
<a class="{{ isset($steps['requirements']) ? $steps['requirements'] : '' }}">
<div class="stepNumber"><i class="fa fa-list"></i></div>
<span class="stepDesc text-small">System Requirements</span>
</a>
</li>
<li>
<a class="{{ isset($steps['permissions']) ? $steps['permissions'] : '' }}">
<div class="stepNumber"><i class="fa fa-lock"></i></div>
<span class="stepDesc text-small">Permissions</span>
</a>
</li>
<li>
<a class="{{ isset($steps['database']) ? $steps['database'] : '' }}">
<div class="stepNumber"><i class="fa fa-database"></i></div>
<span class="stepDesc text-small">Database Info</span>
</a>
</li>
<li>
<a class="{{ isset($steps['installation']) ? $steps['installation'] : '' }}">
<div class="stepNumber"><i class="fa fa-terminal"></i></div>
<span class="stepDesc text-small">Installation</span>
</a>
</li>
<li>
<a class="{{ isset($steps['complete']) ? $steps['complete'] : '' }}">
<div class="stepNumber"><i class="fa fa-flag-checkered"></i></div>
<span class="stepDesc text-small">Complete</span>
</a>
</li>
</ul>
</div>
+49
View File
@@ -0,0 +1,49 @@
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>@yield('page-title') - {{ setting('app_name') }}</title>
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="{{ url('assets/img/icons/apple-touch-icon-144x144.png') }}" />
<link rel="apple-touch-icon-precomposed" sizes="152x152" href="{{ url('assets/img/icons/apple-touch-icon-152x152.png') }}" />
<link rel="icon" type="image/png" href="{{ url('assets/img/icons/favicon-32x32.png') }}" sizes="32x32" />
<link rel="icon" type="image/png" href="{{ url('assets/img/icons/favicon-16x16.png') }}" sizes="16x16" />
<meta name="application-name" content="{{ setting('app_name') }}"/>
<meta name="msapplication-TileColor" content="#FFFFFF" />
<meta name="msapplication-TileImage" content="{{ url('assets/img/icons/mstile-144x144.png') }}" />
<link media="all" type="text/css" rel="stylesheet" href="{{ url(mix('assets/css/vendor.css')) }}">
<link media="all" type="text/css" rel="stylesheet" href="{{ url(mix('assets/css/app.css')) }}">
@yield('styles')
@hook('app:styles')
</head>
<body>
@include('partials.navbar')
<div class="container-fluid">
<div class="row">
@include('partials.sidebar.main')
<div class="content-page">
<main role="main" class="px-4">
@yield('content')
</main>
</div>
</div>
</div>
<script src="{{ url(mix('assets/js/vendor.js')) }}"></script>
<script src="{{ url('assets/js/as/app.js') }}"></script>
@yield('scripts')
@hook('app:scripts')
</body>
</html>
+30
View File
@@ -0,0 +1,30 @@
<!doctype html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>@yield('page-title') - {{ setting('app_name') }}</title>
{!! HTML::style('assets/css/app.css') !!}
{!! HTML::style('assets/css/fontawesome-all.min.css') !!}
@yield('header-scripts')
@hook('auth:styles')
</head>
<body class="auth">
<div class="container">
@yield('content')
</div>
{!! HTML::script('assets/js/vendor.js') !!}
{!! HTML::script('assets/js/as/app.js') !!}
{!! HTML::script('assets/js/as/btn.js') !!}
@yield('scripts')
@hook('auth:scripts')
</body>
</html>
+42
View File
@@ -0,0 +1,42 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Installation - {{ setting('app_name') }}</title>
{!! HTML::style('assets/css/vendor.css') !!}
{!! HTML::style('assets/css/app.css') !!}
{!! HTML::style('assets/css/install.css') !!}
@yield('styles')
</head>
<body style="background-color: #fff;">
<div class="container-fluid">
<div class="row">
<div class="col-md-6 offset-3 logo-wrapper">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="Vanguard" class="logo">
</div>
</div>
<div class="wizard col-md-6 offset-3">
@yield('content')
</div>
</div>
<script type="text/javascript" src="{{ mix("assets/js/vendor.js") }}"></script>
<script type="text/javascript" src="{{ url('assets/js/as/app.js') }}"></script>
<script type="text/javascript" src="{{ url('assets/js/as/btn.js') }}"></script>
<script>
$("a[data-toggle=loader], button[data-toggle=loader]").click(function () {
if ($(this).parents('form').valid()) {
as.btn.loading($(this), $(this).data('loading-text'));
$(this).parents('form').submit();
}
});
</script>
@yield('scripts')
</body>
</html>
@@ -0,0 +1,22 @@
@component('mail::message')
# @lang('Hello!')
@lang('You are receiving this email because we received a password reset request for your account.')
@component('mail::button', ['url' => route('password.reset', ['token' => $token])])
@lang('Reset Password')
@endcomponent
@lang('This password reset link will expire in :count minutes.', [
'count' => config('auth.passwords.users.expire')
])
@lang('If you did not request a password reset, no further action is required.')
@lang('Regards'),<br>
{{ setting('app_name') }}
@endcomponent
@@ -0,0 +1,19 @@
@component('mail::message')
# @lang('Hello!')
@lang('New user was just registered on :app website.', ['app' => setting('app_name')])
@lang('To view the user details just visit the link below.')
@component('mail::button', ['url' => route('users.show', $user)])
@lang('View User')
@endcomponent
@lang('Regards'),<br>
{{ setting('app_name') }}
@endcomponent
@@ -0,0 +1,27 @@
@if(isset ($errors) && count($errors) > 0)
<div class="alert alert-danger alert-notification">
<ul class="list-unstyled mb-0">
@foreach($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
</div>
@endif
@if(Session::get('success', false))
<?php $data = Session::get('success'); ?>
@if (is_array($data))
@foreach ($data as $msg)
<div class="alert alert-success alert-notification">
<i class="fa fa-check"></i>
{{ $msg }}
</div>
@endforeach
@else
<div class="alert alert-success alert-notification">
<i class="fa fa-check"></i>
{{ $data }}
</div>
@endif
@endif
+101
View File
@@ -0,0 +1,101 @@
<nav class="navbar fixed-top align-items-start navbar-expand-lg pl-0 pr-0 py-0" >
<div class="navbar-brand-wrapper d-flex align-items-center justify-content-center">
<a class="navbar-brand mr-0" href="{{ url('/') }}">
<img src="{{ url('assets/img/vanguard-logo.png') }}" class="logo-lg" height="35" alt="{{ setting('app_name') }}">
<img src="{{ url('assets/img/vanguard-logo-no-text.png') }}" class="logo-sm" height="35" alt="{{ setting('app_name') }}">
</a>
</div>
<div>
@if (app('impersonate')->isImpersonating())
<a href="{{ route('impersonate.leave') }}" class="navbar-toggler text-danger hidden-md">
<i class="fas fa-user-secret"></i>
</a>
@endif
<button class="navbar-toggler" type="button" id="sidebar-toggle">
<i class="fas fa-align-right text-muted"></i>
</button>
<button class="navbar-toggler mr-3"
type="button"
data-toggle="collapse"
data-target="#top-navigation"
aria-controls="top-navigation"
aria-expanded="false"
aria-label="Toggle navigation">
<i class="fas fa-bars text-muted"></i>
</button>
</div>
<div class="collapse navbar-collapse" id="top-navigation">
<div class="row ml-2">
<div class="col-lg-12 d-flex align-items-left align-items-md-center flex-column flex-md-row py-3">
<h4 class="page-header mb-0">
@yield('page-heading')
</h4>
<ol class="breadcrumb mb-0 font-weight-light">
<li class="breadcrumb-item">
<a href="{{ url('/') }}" class="text-muted">
<i class="fa fa-home"></i>
</a>
</li>
@yield('breadcrumbs')
</ol>
</div>
</div>
<ul class="navbar-nav ml-auto pr-3 flex-row">
@if (app('impersonate')->isImpersonating())
<li class="nav-item d-flex align-items-center visible-lg">
<a href="{{ route('impersonate.leave') }}" class="btn text-danger">
<i class="fas fa-user-secret mr-2"></i>
@lang('Stop Impersonating')
</a>
</li>
@endif
@hook('navbar:items')
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle"
href="#"
id="navbarDropdown"
role="button"
data-toggle="dropdown"
aria-haspopup="true"
aria-expanded="false">
<img src="{{ auth()->user()->present()->avatar }}"
width="50"
height="50"
class="rounded-circle img-thumbnail img-responsive">
</a>
<div class="dropdown-menu dropdown-menu-right position-absolute p-0" aria-labelledby="navbarDropdown">
<a class="dropdown-item py-2" href="{{ route('profile') }}">
<i class="fas fa-user text-muted mr-2"></i>
@lang('My Profile')
</a>
@if (config('session.driver') == 'database')
<a href="{{ route('profile.sessions') }}" class="dropdown-item py-2">
<i class="fas fa-list text-muted mr-2"></i>
@lang('Active Sessions')
</a>
@endif
@hook('navbar:dropdown')
<div class="dropdown-divider m-0"></div>
<a class="dropdown-item py-2" href="{{ route('auth.logout') }}">
<i class="fas fa-sign-out-alt text-muted mr-2"></i>
@lang('Logout')
</a>
</div>
</li>
</ul>
</div>
</nav>
@@ -0,0 +1,26 @@
@if ($item && $item->authorize(auth()->user()))
<li class="nav-item">
<a class="nav-link {{ Request::is($item->getActivePath()) ? 'active' : '' }}"
href="{{ $item->getHref() }}"
@if($item->isDropdown())
data-toggle="collapse"
aria-expanded="{{ Request::is($item->getExpandedPath()) ? 'true' : 'false' }}"
@endif
>
@if ($item->getIcon())
<i class="{{ $item->getIcon() }}"></i>
@endif
<span>{{ $item->getTitle() }}</span>
</a>
@if ($item->isDropdown())
<ul class="{{ Request::is($item->getExpandedPath()) ? '' : 'collapse' }} list-unstyled sub-menu"
id="{{ str_replace('#', '', $item->getHref()) }}">
@foreach ($item->children() as $child)
@include('partials.sidebar.items', ['item' => $child])
@endforeach
</ul>
@endif
</li>
@endif
@@ -0,0 +1,37 @@
<nav class="col-md-2 sidebar">
<div class="user-box text-center pt-5 pb-3">
<div class="user-img">
<img src="{{ auth()->user()->present()->avatar }}"
width="90"
height="90"
alt="user-img"
class="rounded-circle img-thumbnail img-responsive">
</div>
<h5 class="my-3">
<a href="{{ route('profile') }}">{{ auth()->user()->present()->nameOrEmail }}</a>
</h5>
<ul class="list-inline mb-2">
<li class="list-inline-item">
<a href="{{ route('profile') }}" title="@lang('My Profile')">
<i class="fas fa-cog"></i>
</a>
</li>
<li class="list-inline-item">
<a href="{{ route('auth.logout') }}" class="text-custom" title="@lang('Logout')">
<i class="fas fa-sign-out-alt"></i>
</a>
</li>
</ul>
</div>
<div class="sidebar-sticky">
<ul class="nav flex-column">
@foreach (\Vanguard\Plugins\Vanguard::availablePlugins() as $plugin)
@include('partials.sidebar.items', ['item' => $plugin->sidebar()])
@endforeach
</ul>
</div>
</nav>
@@ -0,0 +1,82 @@
@extends('layouts.app')
@section('page-title', __('Permissions'))
@section('page-heading', $edit ? $permission->name : __('Create New Permission'))
@section('breadcrumbs')
<li class="breadcrumb-item">
<a href="{{ route('permissions.index') }}">@lang('Permissions')</a>
</li>
<li class="breadcrumb-item active">
{{ __($edit ? 'Edit' : 'Create') }}
</li>
@stop
@section('content')
@include('partials.messages')
@if ($edit)
{!! Form::open(['route' => ['permissions.update', $permission], 'method' => 'PUT', 'id' => 'permission-form']) !!}
@else
{!! Form::open(['route' => 'permissions.store', 'id' => 'permission-form']) !!}
@endif
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-3">
<h5 class="card-title">
@lang('Permission Details')
</h5>
<p class="text-muted font-weight-light">
@lang('A general permission information.')
</p>
</div>
<div class="col-md-9">
<div class="form-group">
<label for="name">@lang('Name')</label>
<input type="text"
class="form-control input-solid"
id="name"
name="name"
placeholder="@lang('Permission Name')"
value="{{ $edit ? $permission->name : old('name') }}">
</div>
<div class="form-group">
<label for="display_name">@lang('Display Name')</label>
<input type="text"
class="form-control input-solid"
id="display_name"
name="display_name"
placeholder="@lang('Display Name')"
value="{{ $edit ? $permission->display_name : old('display_name') }}">
</div>
<div class="form-group">
<label for="description">@lang('Description')</label>
<textarea name="description"
id="description"
class="form-control input-solid">{{ $edit ? $permission->description : old('description') }}</textarea>
</div>
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-2">
<button type="submit" class="btn btn-primary">
{{ __($edit ? "Update Permission" : "Create Permission") }}
</button>
</div>
</div>
@stop
@section('scripts')
@if ($edit)
{!! JsValidator::formRequest('Vanguard\Http\Requests\Permission\UpdatePermissionRequest', '#permission-form') !!}
@else
{!! JsValidator::formRequest('Vanguard\Http\Requests\Permission\CreatePermissionRequest', '#permission-form') !!}
@endif
@stop
+111
View File
@@ -0,0 +1,111 @@
@extends('layouts.app')
@section('page-title', __('Permissions'))
@section('page-heading', __('Permissions'))
@section ('breadcrumbs')
<li class="breadcrumb-item active">
@lang('Permissions')
</li>
@stop
@section('content')
@include('partials.messages')
{!! Form::open(['route' => 'permissions.save', 'class' => 'mb-4']) !!}
<div class="card">
<div class="card-body">
<div class="row mb-3 pb-3 border-bottom-light">
<div class="col-lg-12">
<div class="float-right">
<a href="{{ route('permissions.create') }}" class="btn btn-primary btn-rounded">
<i class="fas fa-plus mr-2"></i>
@lang('Add Permission')
</a>
</div>
</div>
</div>
<div class="table-responsive" id="users-table-wrapper">
<table class="table table-striped table-borderless">
<thead>
<tr>
<th class="min-width-200">@lang('Name')</th>
@foreach ($roles as $role)
<th class="text-center">{{ $role->display_name }}</th>
@endforeach
<th class="text-center min-width-100">@lang('Action')</th>
</tr>
</thead>
<tbody>
@if (count($permissions))
@foreach ($permissions as $permission)
<tr>
<td>{{ $permission->display_name ?: $permission->name }}</td>
@foreach ($roles as $role)
<td class="text-center">
<div class="custom-control custom-checkbox">
{!!
Form::checkbox(
"roles[{$role->id}][]",
$permission->id,
$role->hasPermission($permission->name),
[
'class' => 'custom-control-input',
'id' => "cb-{$role->id}-{$permission->id}"
]
)
!!}
<label class="custom-control-label d-inline"
for="cb-{{ $role->id }}-{{ $permission->id }}"></label>
</div>
</td>
@endforeach
<td class="text-center">
<a href="{{ route('permissions.edit', $permission) }}" class="btn btn-icon"
title="@lang('Edit Permission')" data-toggle="tooltip" data-placement="top">
<i class="fas fa-edit"></i>
</a>
@if ($permission->removable)
<a href="{{ route('permissions.destroy', $permission) }}" class="btn btn-icon"
title="@lang('Delete Permission')"
data-toggle="tooltip"
data-placement="top"
data-method="DELETE"
data-confirm-title="@lang('Please Confirm')"
data-confirm-text="@lang('Are you sure that you want to delete this permission?')"
data-confirm-delete="@lang('Yes, delete it!')">
<i class="fas fa-trash"></i>
</a>
@endif
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="4"><em>@lang('No records found.')</em></td>
</tr>
@endif
</tbody>
</table>
</div>
</div>
</div>
@if (count($permissions))
<div class="row">
<div class="col-md-2">
<button type="submit" class="btn btn-primary">@lang('Save Permissions')</button>
</div>
</div>
@endif
{!! Form::close() !!}
@stop
@@ -0,0 +1,14 @@
<div class="card widget">
<div class="card-body">
<div class="row">
<div class="p-3 text-danger flex-1">
<i class="fa fa-user-slash fa-3x"></i>
</div>
<div class="pr-3">
<h2 class="text-right">{{ number_format($count) }}</h2>
<div class="text-muted">@lang('Banned Users')</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,31 @@
<div class="card overflow-hidden">
<h6 class="card-header d-flex align-items-center justify-content-between">
@lang('Latest Registrations')
@if (count($latestRegistrations))
<small class="float-right">
<a href="{{ route('users.index') }}">@lang('View All')</a>
</small>
@endif
</h6>
<div class="card-body p-0">
@if (count($latestRegistrations))
<ul class="list-group list-group-flush">
@foreach ($latestRegistrations as $user)
<li class="list-group-item list-group-item-action px-4 py-3">
<a href="{{ route('users.show', $user) }}" class="d-flex text-dark no-decoration">
<img class="rounded-circle" width="40" height="40" src="{{ $user->present()->avatar }}">
<div class="ml-2" style="line-height: 1.2;">
<span class="d-block p-0">{{ $user->present()->nameOrEmail }}</span>
<small class="text-muted">{{ $user->created_at->diffForHumans() }}</small>
</div>
</a>
</li>
@endforeach
</ul>
@else
<p class="text-muted">@lang('No records found.')</p>
@endif
</div>
</div>
@@ -0,0 +1,14 @@
<div class="card widget">
<div class="card-body">
<div class="row">
<div class="p-3 text-success flex-1">
<i class="fa fa-user-plus fa-3x"></i>
</div>
<div class="pr-3">
<h2 class="text-right">{{ number_format($count) }}</h2>
<div class="text-muted">@lang('New Users')</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,12 @@
<script>
var users = @json(array_values($usersPerMonth));
var months = @json(array_keys($usersPerMonth));
var trans = {
chartLabel: "{{ __('Registration History') }}",
new: "{{ __('new') }}",
user: "{{ __('user') }}",
users: "{{ __('users') }}"
};
</script>
{!! HTML::script('assets/js/chart.min.js') !!}
{!! HTML::script('assets/js/as/dashboard-admin.js') !!}
@@ -0,0 +1,11 @@
<div class="card">
<h6 class="card-header">
@lang('Registration History')
</h6>
<div class="card-body">
<div class="pt-4 px-3">
<canvas id="myChart" height="365"></canvas>
</div>
</div>
</div>
@@ -0,0 +1,14 @@
<div class="card widget">
<div class="card-body">
<div class="row">
<div class="p-3 text-primary flex-1">
<i class="fa fa-users fa-3x"></i>
</div>
<div class="pr-3">
<h2 class="text-right">{{ number_format($count) }}</h2>
<div class="text-muted">@lang('Total Users')</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,14 @@
<div class="card widget">
<div class="card-body">
<div class="row">
<div class="p-3 text-info flex-1">
<i class="fa fa-user fa-3x"></i>
</div>
<div class="pr-3">
<h2 class="text-right">{{ number_format($count) }}</h2>
<div class="text-muted">@lang('Unconfirmed Users')</div>
</div>
</div>
</div>
</div>
@@ -0,0 +1,53 @@
<div class="col-md-3">
<div class="card">
<div class="card-body">
<a href="{{ route('profile') }}" class="text-center no-decoration">
<div class="icon my-3">
<i class="fas fa-user fa-2x"></i>
</div>
<p class="lead mb-0">@lang('Update Profile')</p>
</a>
</div>
</div>
</div>
@if (config('session.driver') == 'database')
<div class="col-md-3">
<div class="card">
<div class="card-body">
<a href="{{ route('profile.sessions') }}" class="text-center no-decoration">
<div class="icon my-3">
<i class="fa fa-list fa-2x"></i>
</div>
<p class="lead mb-0">@lang('My Sessions')</p>
</a>
</div>
</div>
</div>
@endif
<div class="col-md-3">
<div class="card">
<div class="card-body">
<a href="{{ route('profile.activity') }}" class="text-center no-decoration">
<div class="icon my-3">
<i class="fas fa-server fa-2x"></i>
</div>
<p class="lead mb-0">@lang('Activity Log')</p>
</a>
</div>
</div>
</div>
<div class="col-md-3">
<div class="card">
<div class="card-body">
<a href="{{ route('auth.logout') }}" class="text-center no-decoration">
<div class="icon my-3">
<i class="fas fa-sign-out-alt fa-2x"></i>
</div>
<p class="lead mb-0">@lang('Logout')</p>
</a>
</div>
</div>
</div>
+78
View File
@@ -0,0 +1,78 @@
@extends('layouts.app')
@section('page-title', __('Roles'))
@section('page-heading', $edit ? $role->name : __('Create New Role'))
@section('breadcrumbs')
<li class="breadcrumb-item">
<a href="{{ route('roles.index') }}">@lang('Roles')</a>
</li>
<li class="breadcrumb-item active">
{{ __($edit ? 'Edit' : 'Create') }}
</li>
@stop
@section('content')
@include('partials.messages')
@if ($edit)
{!! Form::open(['route' => ['roles.update', $role], 'method' => 'PUT', 'id' => 'role-form']) !!}
@else
{!! Form::open(['route' => 'roles.store', 'id' => 'role-form']) !!}
@endif
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-3">
<h5 class="card-title">
@lang('Role Details')
</h5>
<p class="text-muted">
@lang('A general role information.')
</p>
</div>
<div class="col-md-9">
<div class="form-group">
<label for="name">@lang('Name')</label>
<input type="text"
class="form-control input-solid"
id="name"
name="name"
placeholder="@lang('Role Name')"
value="{{ $edit ? $role->name : old('name') }}">
</div>
<div class="form-group">
<label for="display_name">@lang('Display Name')</label>
<input type="text"
class="form-control input-solid"
id="display_name"
name="display_name"
placeholder="@lang('Display Name')"
value="{{ $edit ? $role->display_name : old('display_name') }}">
</div>
<div class="form-group">
<label for="description">@lang('Description')</label>
<textarea name="description"
id="description"
class="form-control input-solid">{{ $edit ? $role->description : old('description') }}</textarea>
</div>
</div>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">
{{ __($edit ? 'Update Role' : 'Create Role') }}
</button>
@stop
@section('scripts')
@if ($edit)
{!! JsValidator::formRequest('Vanguard\Http\Requests\Role\UpdateRoleRequest', '#role-form') !!}
@else
{!! JsValidator::formRequest('Vanguard\Http\Requests\Role\CreateRoleRequest', '#role-form') !!}
@endif
@stop
+76
View File
@@ -0,0 +1,76 @@
@extends('layouts.app')
@section('page-title', __('Roles'))
@section('page-heading', __('Roles'))
@section('breadcrumbs')
<li class="breadcrumb-item active">
@lang('Roles')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="card">
<div class="card-body">
<div class="row mb-3 pb-3 border-bottom-light">
<div class="col-lg-12">
<div class="float-right">
<a href="{{ route('roles.create') }}" class="btn btn-primary btn-rounded">
<i class="fas fa-plus mr-2"></i>
@lang('Add Role')
</a>
</div>
</div>
</div>
<div class="table-responsive" id="users-table-wrapper">
<table class="table table-striped table-borderless">
<thead>
<tr>
<th class="min-width-100">@lang('Name')</th>
<th class="min-width-150">@lang('Display Name')</th>
<th class="min-width-150">@lang('# of users with this role')</th>
<th class="text-center">@lang('Action')</th>
</tr>
</thead>
<tbody>
@if (count($roles))
@foreach ($roles as $role)
<tr>
<td>{{ $role->name }}</td>
<td>{{ $role->display_name }}</td>
<td>{{ $role->users_count }}</td>
<td class="text-center">
<a href="{{ route('roles.edit', $role) }}" class="btn btn-icon"
title="@lang('Edit Role')" data-toggle="tooltip" data-placement="top">
<i class="fas fa-edit"></i>
</a>
@if ($role->removable)
<a href="{{ route('roles.destroy', $role) }}" class="btn btn-icon"
title="@lang('Delete Role')"
data-toggle="tooltip"
data-placement="top"
data-method="DELETE"
data-confirm-title="@lang('Please Confirm')"
data-confirm-text="@lang('Are you sure that you want to delete this role?')"
data-confirm-delete="@lang('Yes, delete it!')">
<i class="fas fa-trash"></i>
</a>
@endif
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="4"><em>@lang('No records found.')</em></td>
</tr>
@endif
</tbody>
</table>
</div>
</div>
</div>
@stop
+70
View File
@@ -0,0 +1,70 @@
@extends('layouts.app')
@section('page-title', __('Authentication Settings'))
@section('page-heading', __('Authentication'))
@section('breadcrumbs')
<li class="breadcrumb-item text-muted">
@lang('Settings')
</li>
<li class="breadcrumb-item active">
@lang('Authentication')
</li>
@stop
@section('content')
@include('partials.messages')
<!-- Nav tabs -->
<ul class="nav nav-pills mb-4 mt-2" id="pills-tab" role="tablist">
<li class="nav-item">
<a href="#auth"
class="nav-link active"
id="pills-home-tab"
data-toggle="pill"
aria-controls="pills-home"
aria-selected="true">
<i class="fa fa-lock"></i>
@lang('Authentication')
</a>
</li>
<li class="nav-item">
<a href="#registration"
class="nav-link"
id="pills-home-tab"
data-toggle="pill"
aria-controls="pills-home"
aria-selected="true">
<i class="fa fa-user-plus"></i>
@lang('Registration')
</a>
</li>
</ul>
<!-- Tab panes -->
<div class="tab-content">
<div role="tabpanel" class="tab-pane active" id="auth">
<div class="row">
<div class="col-md-6">
@include('settings.partials.auth')
@include('settings.partials.two-factor')
</div>
<div class="col-md-6">
@include('settings.partials.throttling')
</div>
</div>
</div>
<div role="tabpanel" class="tab-pane" id="registration">
<div class="row">
<div class="col-md-6">
@include('settings.partials.registration')
</div>
<div class="col-md-6">
@include('settings.partials.recaptcha')
</div>
</div>
</div>
</div>
@stop
@@ -0,0 +1,40 @@
@extends('layouts.app')
@section('page-title', __('General Settings'))
@section('page-heading', __('General Settings'))
@section('breadcrumbs')
<li class="breadcrumb-item text-muted">
@lang('Settings')
</li>
<li class="breadcrumb-item active">
@lang('General')
</li>
@stop
@section('content')
@include('partials.messages')
{!! Form::open(['route' => 'settings.general.update', 'id' => 'general-settings-form']) !!}
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
<div class="form-group">
<label for="name">@lang('Name')</label>
<input type="text" class="form-control input-solid" id="app_name"
name="app_name" value="{{ setting('app_name') }}">
</div>
</div>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">
@lang('Update')
</button>
{{ Form::close() }}
@stop
@@ -0,0 +1,62 @@
@extends('layouts.app')
@section('page-title', __('Notification Settings'))
@section('page-heading', __('Notification Settings'))
@section('breadcrumbs')
<li class="breadcrumb-item text-muted">
@lang('Settings')
</li>
<li class="breadcrumb-item active">
@lang('Notifications')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="row">
<div class="col-md-6">
<div class="card">
<h5 class="card-header">
@lang('Email Notifications')
</h5>
<div class="card-body">
{!! Form::open(['route' => 'settings.notifications.update', 'id' => 'notification-settings-form']) !!}
<div class="form-group mb-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="notifications_signup_email">
<input type="checkbox"
name="notifications_signup_email"
class="switch"
value="1"
id="switch-signup-email"
{{ setting('notifications_signup_email') ? 'checked' : '' }}>
<label for="switch-signup-email"></label>
</div>
<div class="ml-3 d-flex flex-column">
<label class="mb-0">@lang('Sign-Up Notification')</label>
<small class="pt-0 text-muted">
@lang('Send an email to the Administrators when user signs up.')
</small>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mt-3">
@lang('Update')
</button>
{!! Form::close() !!}
</div>
</div>
</div>
</div>
@stop
@@ -0,0 +1,58 @@
<div class="card">
<h6 class="card-header">
@lang('General')
</h6>
<div class="card-body">
{!! Form::open(['route' => 'settings.auth.update', 'id' => 'auth-general-settings-form']) !!}
<div class="form-group mb-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="remember_me">
{!! Form::checkbox('remember_me', 1, setting('remember_me'), ['class' => 'switch', 'id' => 'switch-remember-me']) !!}
<label for="switch-remember-me"></label>
</div>
<div class="ml-3 d-flex flex-column">
<label class="mb-0">@lang('Allow "Remember Me"')</label>
<small class="pt-0 text-muted">
@lang("Should 'Remember Me' checkbox be displayed on login form?")
</small>
</div>
</div>
</div>
<div class="form-group my-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="forgot_password">
{!! Form::checkbox('forgot_password', 1, setting('forgot_password'), ['class' => 'switch', 'id' => 'switch-forgot-pass']) !!}
<label for="switch-forgot-pass"></label>
</div>
<div class="ml-3 d-flex flex-column">
<label class="mb-0">@lang('Forgot Password')</label>
<small class="pt-0 text-muted">
@lang('Enable/Disable forgot password feature.')
</small>
</div>
</div>
</div>
<div class="form-group my-4">
<label for="login_reset_token_lifetime">
@lang('Reset Token Lifetime') <br>
<small class="text-muted">
@lang('Number of minutes that the reset token should be considered valid.')
</small>
</label>
<input type="text" name="login_reset_token_lifetime"
class="form-control input-solid" value="{{ setting('login_reset_token_lifetime', 30) }}">
</div>
<button type="submit" class="btn btn-primary">
@lang('Update')
</button>
{!! Form::close() !!}
</div>
</div>
@@ -0,0 +1,39 @@
<div class="card">
<div class="card-body">
<h5 class="card-title mb-1">
@lang('Google reCAPTCHA')
</h5>
<small class="text-muted d-block mb-4">
@lang('Enable/Disable Google reCAPTCHA during the registration.')
</small>
@if (! (config('captcha.secret') && config('captcha.sitekey')))
<div class="alert alert-info">
@lang('To utilize Google reCAPTCHA, please get your') <code>@lang('Site Key')</code>
@lang('and') <code>@lang('Secret Key')</code>
@lang('from')
<a href="https://www.google.com/recaptcha/intro/index.html" target="_blank">
<strong>@lang('reCAPTCHA Website')</strong>
</a>,
@lang('and update your') <code>RECAPTCHA_SITEKEY</code> @lang('and')
<code>RECAPTCHA_SECRETKEY</code> @lang('environment variables inside') <code>.env</code>
@lang('file').
</div>
@else
@if (setting('registration.captcha.enabled'))
{!! Form::open(['route' => 'settings.registration.captcha.disable', 'id' => 'captcha-settings-form']) !!}
<button type="submit" class="btn btn-danger">
@lang('Disable')
</button>
{!! Form::close() !!}
@else
{!! Form::open(['route' => 'settings.registration.captcha.enable', 'id' => 'captcha-settings-form']) !!}
<button type="submit" class="btn btn-primary">
@lang('Enable')
</button>
{!! Form::close() !!}
@endif
@endif
</div>
</div>
@@ -0,0 +1,66 @@
<div class="card">
<h6 class="card-header">@lang('General')</h6>
<div class="card-body">
{!! Form::open(['route' => 'settings.auth.update', 'id' => 'registration-settings-form']) !!}
<div class="form-group mb-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="reg_enabled">
<input
type="checkbox" name="reg_enabled"
id="switch-reg-enabled"
class="switch" value="1"
{{ setting('reg_enabled') ? 'checked' : '' }}>
<label for="switch-reg-enabled"></label>
</div>
<div class="ml-3 d-flex flex-column">
<label class="mb-0">@lang('Allow Registration')</label>
</div>
</div>
</div>
<div class="form-group my-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="tos">
{!! Form::checkbox('tos', 1, setting('tos'), ['class' => 'switch', 'id' => 'switch-tos']) !!}
<label for="switch-tos"></label>
</div>
<div class="ml-3 d-flex flex-column">
<label class="mb-0">@lang('Terms & Conditions')</label>
<small class="pt-0 text-muted">
@lang('The user has to confirm that he agree with terms and conditions in order to create an account.')
</small>
</div>
</div>
</div>
<div class="form-group my-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="reg_email_confirmation">
{!! Form::checkbox('reg_email_confirmation', 1, setting('reg_email_confirmation'), ['class' => 'switch', 'id' => 'switch-reg-email-confirm']) !!}
<label for="switch-reg-email-confirm"></label>
</div>
<div class="ml-3 d-flex flex-column">
<label class="mb-0">
@lang('Email Confirmation')
</label>
<small class="text-muted">
@lang('Require email confirmation from your newly registered users.')
</small>
</div>
</div>
</div>
<button type="submit" class="btn btn-primary mt-3">
@lang('Update')
</button>
{!! Form::close() !!}
</div>
</div>
@@ -0,0 +1,54 @@
<div class="card">
<h6 class="card-header">
@lang('Authentication Throttling')
</h6>
<div class="card-body">
{!! Form::open(['route' => 'settings.auth.update', 'id' => 'auth-throttle-settings-form']) !!}
<div class="form-group mb-4">
<div class="d-flex align-items-center">
<div class="switch">
<input type="hidden" value="0" name="throttle_enabled">
{!! Form::checkbox('throttle_enabled', 1, setting('throttle_enabled'), ['class' => 'switch', 'id' => 'switch-throttle']) !!}
<label for="switch-throttle"></label>
</div>
<div class="ml-3 d-flex flex-column">
<label class="mb-0">@lang('Throttle Authentication')</label>
<small class="text-muted">
@lang('Should the system throttle authentication attempts?')
</small>
</div>
</div>
</div>
<div class="form-group my-4">
<label for="throttle_attempts">
@lang('Maximum Number of Attempts') <br>
<small class="text-muted">
@lang('Maximum number of incorrect login attempts before lockout.')
</small>
</label>
<input type="text" name="throttle_attempts" class="form-control input-solid"
value="{{ setting('throttle_attempts', 10) }}">
</div>
<div class="form-group my-4">
<label for="throttle_lockout_time">
@lang('Lockout Time') <br>
<small class="text-muted">
@lang('Number of minutes to lock the user out for after specified maximum number of incorrect login attempts.')
</small>
</label>
<input type="text" name="throttle_lockout_time" class="form-control input-solid"
value="{{ setting('throttle_lockout_time', 1) }}">
</div>
<button type="submit" class="btn btn-primary">
@lang('Update')
</button>
{!! Form::close() !!}
</div>
</div>
@@ -0,0 +1,38 @@
<div class="card">
<div class="card-body">
<h5 class="card-title mb-1">@lang('Two-Factor Authentication')</h5>
<small class="text-muted d-block mb-4">
@lang('Enable/Disable Two-Factor Authentication for the application.')
</small>
@if (! config('services.authy.key'))
<div class="alert alert-info">
@lang('In order to enable Two-Factor Authentication you have to register and create new application on')
<a href="https://www.authy.com/" target="_blank"><strong>@lang('Authy website')</strong></a>,
@lang('and update your') <code>AUTHY_KEY</code>
@lang('environment variable inside') <code>.env</code> @lang('file').
</div>
@else
@if (setting('2fa.enabled'))
{!! Form::open(['route' => 'settings.auth.2fa.disable', 'id' => 'auth-2fa-settings-form']) !!}
<button type="submit"
class="btn btn-danger"
data-toggle="loader"
data-loading-text="@lang('Disabling...')">
@lang('Disable')
</button>
{!! Form::close() !!}
@else
{!! Form::open(['route' => 'settings.auth.2fa.enable', 'id' => 'auth-2fa-settings-form']) !!}
<button type="submit"
class="btn btn-primary"
data-toggle="loader"
data-loading-text="@lang('Enabling...')">
@lang('Enable')
</button>
{!! Form::close() !!}
@endif
@endif
</div>
</div>
+71
View File
@@ -0,0 +1,71 @@
@extends('layouts.app')
@section('page-title', __('Add User'))
@section('page-heading', __('Create New User'))
@section('breadcrumbs')
<li class="breadcrumb-item">
<a href="{{ route('users.index') }}">@lang('Users')</a>
</li>
<li class="breadcrumb-item active">
@lang('Create')
</li>
@stop
@section('content')
@include('partials.messages')
{!! Form::open(['route' => 'users.store', 'files' => true, 'id' => 'user-form']) !!}
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-3">
<h5 class="card-title">
@lang('User Details')
</h5>
<p class="text-muted font-weight-light">
@lang('A general user profile information.')
</p>
</div>
<div class="col-md-9">
@include('user.partials.details', ['edit' => false, 'profile' => false])
</div>
</div>
</div>
</div>
<div class="card">
<div class="card-body">
<div class="row">
<div class="col-md-3">
<h5 class="card-title">
@lang('Login Details')
</h5>
<p class="text-muted font-weight-light">
@lang('Details used for authenticating with the application.')
</p>
</div>
<div class="col-md-9">
@include('user.partials.auth', ['edit' => false])
</div>
</div>
</div>
</div>
<div class="row">
<div class="col-md-12">
<button type="submit" class="btn btn-primary">
@lang('Create User')
</button>
</div>
</div>
{!! Form::close() !!}
<br>
@stop
@section('scripts')
{!! HTML::script('assets/js/as/profile.js') !!}
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\CreateUserRequest', '#user-form') !!}
@stop
+134
View File
@@ -0,0 +1,134 @@
@extends('layouts.app')
@section('page-title', __('Edit User'))
@section('page-heading', $user->present()->nameOrEmail)
@section('breadcrumbs')
<li class="breadcrumb-item">
<a href="{{ route('users.index') }}">@lang('Users')</a>
</li>
<li class="breadcrumb-item">
<a href="{{ route('users.show', $user->id) }}">
{{ $user->present()->nameOrEmail }}
</a>
</li>
<li class="breadcrumb-item active">
@lang('Edit')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="row">
<div class="col-8">
<div class="card">
<div class="card-body">
<ul class="nav nav-tabs" id="nav-tab" role="tablist">
<li class="nav-item">
<a class="nav-link active"
id="details-tab"
data-toggle="tab"
href="#details"
role="tab"
aria-controls="home"
aria-selected="true">
@lang('User Details')
</a>
</li>
<li class="nav-item">
<a class="nav-link"
id="authentication-tab"
data-toggle="tab"
href="#login-details"
role="tab"
aria-controls="home"
aria-selected="true">
@lang('Login Details')
</a>
</li>
@if (setting('2fa.enabled'))
<li class="nav-item">
<a class="nav-link"
id="authentication-tab"
data-toggle="tab"
href="#2fa"
role="tab"
aria-controls="home"
aria-selected="true">
@lang('Two-Factor Authentication')
</a>
</li>
@endif
</ul>
<div class="tab-content mt-4" id="nav-tabContent">
<div class="tab-pane fade show active px-2"
id="details"
role="tabpanel"
aria-labelledby="nav-home-tab">
<form action="{{ route('users.update.details', $user) }}" method="POST" id="details-form">
@csrf
@method('PUT')
@include('user.partials.details', ['profile' => false])
</form>
</div>
<div class="tab-pane fade px-2"
id="login-details"
role="tabpanel"
aria-labelledby="nav-profile-tab">
<form action="{{ route('users.update.login-details', $user) }}"
method="POST"
id="login-details-form">
@csrf
@method('PUT')
@include('user.partials.auth')
</form>
</div>
@if (setting('2fa.enabled'))
<div class="tab-pane fade px-2" id="2fa" role="tabpanel" aria-labelledby="nav-profile-tab">
<?php $route = Authy::isEnabled($user) ? 'disable' : 'enable'; ?>
<form action="{{ route("two-factor.{$route}") }}" method="POST" id="two-factor-form">
@csrf
<input type="hidden" name="user" value="{{ $user->id }}">
@include('user.partials.two-factor')
</form>
</div>
@endif
</div>
</div>
</div>
</div>
<div class="col-4">
<div class="card">
<div class="card-body">
<form action="{{ route('user.update.avatar', $user->id) }}"
method="POST"
id="avatar-form"
enctype="multipart/form-data">
@csrf
@include('user.partials.avatar', ['updateUrl' => route('user.update.avatar.external', $user->id)])
</form>
</div>
</div>
</div>
</div>
@stop
@section('scripts')
{!! HTML::script('assets/js/as/btn.js') !!}
{!! HTML::script('assets/js/as/profile.js') !!}
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateDetailsRequest', '#details-form') !!}
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateLoginDetailsRequest', '#login-details-form') !!}
@if (setting('2fa.enabled'))
{!! JsValidator::formRequest('Vanguard\Http\Requests\TwoFactor\EnableTwoFactorRequest', '#two-factor-form') !!}
@endif
@stop
+103
View File
@@ -0,0 +1,103 @@
@extends('layouts.app')
@section('page-title', __('Users'))
@section('page-heading', __('Users'))
@section('breadcrumbs')
<li class="breadcrumb-item active">
@lang('Users')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="card">
<div class="card-body">
<form action="" method="GET" id="users-form" class="pb-2 mb-3 border-bottom-light">
<div class="row my-3 flex-md-row flex-column-reverse">
<div class="col-md-4 mt-md-0 mt-2">
<div class="input-group custom-search-form">
<input type="text"
class="form-control input-solid"
name="search"
value="{{ Request::get('search') }}"
placeholder="@lang('Search for users...')">
<span class="input-group-append">
@if (Request::has('search') && Request::get('search') != '')
<a href="{{ route('users.index') }}"
class="btn btn-light d-flex align-items-center text-muted"
role="button">
<i class="fas fa-times"></i>
</a>
@endif
<button class="btn btn-light" type="submit" id="search-users-btn">
<i class="fas fa-search text-muted"></i>
</button>
</span>
</div>
</div>
<div class="col-md-2 mt-2 mt-md-0">
{!!
Form::select(
'status',
$statuses,
Request::get('status'),
['id' => 'status', 'class' => 'form-control input-solid']
)
!!}
</div>
<div class="col-md-6">
<a href="{{ route('users.create') }}" class="btn btn-primary btn-rounded float-right">
<i class="fas fa-plus mr-2"></i>
@lang('Add User')
</a>
</div>
</div>
</form>
<div class="table-responsive" id="users-table-wrapper">
<table class="table table-borderless table-striped">
<thead>
<tr>
<th></th>
<th class="min-width-80">@lang('Username')</th>
<th class="min-width-150">@lang('Full Name')</th>
<th class="min-width-100">@lang('Email')</th>
<th class="min-width-80">@lang('Registration Date')</th>
<th class="min-width-80">@lang('Status')</th>
<th class="text-center min-width-150">@lang('Action')</th>
</tr>
</thead>
<tbody>
@if (count($users))
@foreach ($users as $user)
@include('user.partials.row')
@endforeach
@else
<tr>
<td colspan="7"><em>@lang('No records found.')</em></td>
</tr>
@endif
</tbody>
</table>
</div>
</div>
</div>
{!! $users->render() !!}
@stop
@section('scripts')
<script>
$("#status").change(function () {
$("#users-form").submit();
});
</script>
@stop
@@ -0,0 +1,44 @@
<div class="form-group">
<label for="email">@lang('Email')</label>
<input type="email"
class="form-control input-solid"
id="email"
name="email"
placeholder="@lang('Email')"
value="{{ $edit ? $user->email : '' }}">
</div>
<div class="form-group">
<label for="username">@lang('Username')</label>
<input type="text"
class="form-control input-solid"
id="username"
placeholder="(@lang('optional'))"
name="username"
value="{{ $edit ? $user->username : '' }}">
</div>
<div class="form-group">
<label for="password">{{ $edit ? __("New Password") : __('Password') }}</label>
<input type="password"
class="form-control input-solid"
id="password"
name="password"
@if ($edit) placeholder="@lang("Leave field blank if you don't want to change it")" @endif>
</div>
<div class="form-group">
<label for="password_confirmation">{{ $edit ? __("Confirm New Password") : __('Confirm Password') }}</label>
<input type="password"
class="form-control input-solid"
id="password_confirmation"
name="password_confirmation"
@if ($edit) placeholder="@lang("Leave field blank if you don't want to change it")" @endif>
</div>
@if ($edit)
<button type="submit" class="btn btn-primary mt-2" id="update-login-details-btn">
<i class="fa fa-refresh"></i>
@lang('Update Details')
</button>
@endif
@@ -0,0 +1,92 @@
<div class="avatar-wrapper">
<div class="spinner">
<div class="spinner-dot"></div>
<div class="spinner-dot"></div>
<div class="spinner-dot"></div>
</div>
<div id="avatar"></div>
<div class="text-center">
<div class="avatar-preview">
<img class="avatar rounded-circle img-thumbnail img-responsive mt-5 mb-4"
width="150"
src="{{ $edit ? $user->present()->avatar : url('assets/img/profile.png') }}">
<h5 class="text-muted">{{ $user->present()->nameOrEmail }}</h5>
</div>
<div id="change-picture"
class="btn btn-outline-secondary btn-block mt-5"
data-toggle="modal"
data-target="#choose-modal">
<i class="fa fa-camera"></i>
@lang('Change Photo')
</div>
<div class="row avatar-controls d-none">
<div class="col-md-6">
<div id="cancel-upload" class="btn btn-block btn-outline-secondary text-center">
<i class="fa fa-times"></i> @lang('Cancel')
</div>
</div>
<div class="col-md-6">
<button type="submit" id="save-photo" class="btn btn-success btn-block text-center">
<i class="fa fa-check"></i> @lang('Save')
</button>
</div>
</div>
</div>
</div>
<div class="modal fade" id="choose-modal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-body">
<div class="row">
<div class="col-md-4 avatar-source" id="no-photo"
data-url="{{ $updateUrl }}">
<img src="{{ url('assets/img/profile.png') }}" class="rounded-circle img-thumbnail img-responsive">
<p class="mt-3">@lang('No Photo')</p>
</div>
<div class="col-md-4 avatar-source">
<div class="btn btn-light btn-upload">
<i class="fa fa-upload"></i>
<input type="file" name="avatar" id="avatar-upload">
</div>
<p class="mt-3">@lang('Upload Photo')</p>
</div>
@if ($edit)
<div class="col-md-4 avatar-source source-external"
data-url="{{ $updateUrl }}">
<img src="{{ $user->gravatar() }}" class="rounded-circle img-thumbnail img-responsive">
<p class="mt-3">@lang('Gravatar')</p>
</div>
@endif
</div>
@if ($edit && count($socialLogins))
@foreach ($socialLogins->chunk(3) as $logins)
<br>
<div class="row">
@foreach($logins as $login)
<div class="col-md-4 avatar-source source-external"
data-url="{{ $updateUrl }}">
<img src="{{ $login->avatar }}"
class="rounded-circle img-thumbnail img-responsive"
style="width: 120px;">
<p>{{ ucfirst($login->provider) }}</p>
</div>
@endforeach
</div>
@endforeach
@endif
</div>
</div>
</div>
</div>
<div class="d-none">
<input type="hidden" name="points[x1]" id="points_x1">
<input type="hidden" name="points[y1]" id="points_y1">
<input type="hidden" name="points[x2]" id="points_x2">
<input type="hidden" name="points[y2]" id="points_y2">
</div>
@@ -0,0 +1,60 @@
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="first_name">@lang('Role')</label>
{!! Form::select('role_id', $roles, $edit ? $user->role->id : '',
['class' => 'form-control input-solid', 'id' => 'role_id', $profile ? 'disabled' : '']) !!}
</div>
<div class="form-group">
<label for="status">@lang('Status')</label>
{!! Form::select('status', $statuses, $edit ? $user->status : '',
['class' => 'form-control input-solid', 'id' => 'status', $profile ? 'disabled' : '']) !!}
</div>
<div class="form-group">
<label for="first_name">@lang('First Name')</label>
<input type="text" class="form-control input-solid" id="first_name"
name="first_name" placeholder="@lang('First Name')" value="{{ $edit ? $user->first_name : '' }}">
</div>
<div class="form-group">
<label for="last_name">@lang('Last Name')</label>
<input type="text" class="form-control input-solid" id="last_name"
name="last_name" placeholder="@lang('Last Name')" value="{{ $edit ? $user->last_name : '' }}">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="birthday">@lang('Date of Birth')</label>
<div class="form-group">
<input type="text"
name="birthday"
id='birthday'
value="{{ $edit && $user->birthday ? $user->present()->birthday : '' }}"
class="form-control input-solid" />
</div>
</div>
<div class="form-group">
<label for="phone">@lang('Phone')</label>
<input type="text" class="form-control input-solid" id="phone"
name="phone" placeholder="@lang('Phone')" value="{{ $edit ? $user->phone : '' }}">
</div>
<div class="form-group">
<label for="address">@lang('Address')</label>
<input type="text" class="form-control input-solid" id="address"
name="address" placeholder="@lang('Address')" value="{{ $edit ? $user->address : '' }}">
</div>
<div class="form-group">
<label for="address">@lang('Country')</label>
{!! Form::select('country_id', $countries, $edit ? $user->country_id : '', ['class' => 'form-control input-solid']) !!}
</div>
</div>
@if ($edit)
<div class="col-md-12 mt-2">
<button type="submit" class="btn btn-primary" id="update-details-btn">
<i class="fa fa-refresh"></i>
@lang('Update Details')
</button>
</div>
@endif
</div>
@@ -0,0 +1,73 @@
<tr>
<td style="width: 40px;">
<a href="{{ route('users.show', $user) }}">
<img
class="rounded-circle img-responsive"
width="40"
src="{{ $user->present()->avatar }}"
alt="{{ $user->present()->name }}">
</a>
</td>
<td class="align-middle">
<a href="{{ route('users.show', $user) }}">
{{ $user->username ?: __('N/A') }}
</a>
</td>
<td class="align-middle">{{ $user->first_name . ' ' . $user->last_name }}</td>
<td class="align-middle">{{ $user->email }}</td>
<td class="align-middle">{{ $user->created_at->format(config('app.date_format')) }}</td>
<td class="align-middle">
<span class="badge badge-lg badge-{{ $user->present()->labelClass }}">
{{ trans("app.status.{$user->status}") }}
</span>
</td>
<td class="text-center align-middle">
<div class="dropdown show d-inline-block">
<a class="btn btn-icon"
href="#" role="button" id="dropdownMenuLink"
data-toggle="dropdown"
aria-haspopup="true" aria-expanded="false">
<i class="fas fa-ellipsis-h"></i>
</a>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuLink">
@if (config('session.driver') == 'database')
<a href="{{ route('user.sessions', $user) }}" class="dropdown-item text-gray-500">
<i class="fas fa-list mr-2"></i>
@lang('User Sessions')
</a>
@endif
<a href="{{ route('users.show', $user) }}" class="dropdown-item text-gray-500">
<i class="fas fa-eye mr-2"></i>
@lang('View User')
</a>
@canBeImpersonated($user)
<a href="{{ route('impersonate', $user) }}" class="dropdown-item text-gray-500 impersonate">
<i class="fas fa-user-secret mr-2"></i>
@lang('Impersonate')
</a>
@endCanBeImpersonated
</div>
</div>
<a href="{{ route('users.edit', $user) }}"
class="btn btn-icon edit"
title="@lang('Edit User')"
data-toggle="tooltip" data-placement="top">
<i class="fas fa-edit"></i>
</a>
<a href="{{ route('users.destroy', $user) }}"
class="btn btn-icon"
title="@lang('Delete User')"
data-toggle="tooltip"
data-placement="top"
data-method="DELETE"
data-confirm-title="@lang('Please Confirm')"
data-confirm-text="@lang('Are you sure that you want to delete this user?')"
data-confirm-delete="@lang('Yes, delete him!')">
<i class="fas fa-trash"></i>
</a>
</td>
</tr>
@@ -0,0 +1,47 @@
@if (! Authy::isEnabled($user))
<div class="alert alert-info">
@lang('In order to enable Two-Factor Authentication, you must install')
<a target="_blank" href="https://www.authy.com/">Authy</a>
@lang('application on your phone').
</div>
<div class="row">
<div class="col-md-6">
<div class="form-group">
<label for="country_code">@lang('Country Code')</label>
<input type="text"
class="form-control"
id="country_code"
placeholder="381"
name="country_code"
value="{{ $user->two_factor_country_code }}">
</div>
</div>
<div class="col-md-6">
<div class="form-group">
<label for="phone_number">@lang('Cell Phone')</label>
<input type="text"
class="form-control"
id="phone_number"
placeholder="@lang('Phone without country code')"
name="phone_number"
value="{{ $user->two_factor_phone }}">
</div>
</div>
</div>
<button type="submit"
class="btn btn-primary"
data-toggle="loader"
data-loading-text="@lang('Enabling...')">
@lang('Enable')
</button>
@else
<button type="submit"
class="btn btn-danger mt-2"
data-toggle="loader"
data-loading-text="@lang('Disabling...')">
<i class="fa fa-close"></i>
@lang('Disable')
</button>
@endif
+125
View File
@@ -0,0 +1,125 @@
@extends('layouts.app')
@section('page-title', __('My Profile'))
@section('page-heading', __('My Profile'))
@section('breadcrumbs')
<li class="breadcrumb-item active">
@lang('My Profile')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="row">
<div class="col-md-8">
<div class="card">
<div class="card-body">
<ul class="nav nav-tabs" id="nav-tab" role="tablist">
<li class="nav-item">
<a class="nav-link active"
id="details-tab"
data-toggle="tab"
href="#details"
role="tab"
aria-controls="home"
aria-selected="true">
@lang('User Details')
</a>
</li>
<li class="nav-item">
<a class="nav-link"
id="authentication-tab"
data-toggle="tab"
href="#login-details"
role="tab"
aria-controls="home"
aria-selected="true">
@lang('Login Details')
</a>
</li>
@if (setting('2fa.enabled'))
<li class="nav-item">
<a class="nav-link"
id="authentication-tab"
data-toggle="tab"
href="#2fa"
role="tab"
aria-controls="home"
aria-selected="true">
@lang('Two-Factor Authentication')
</a>
</li>
@endif
</ul>
<div class="tab-content mt-4" id="nav-tabContent">
<div class="tab-pane fade show active px-2"
id="details"
role="tabpanel"
aria-labelledby="nav-home-tab">
<form action="{{ route('profile.update.details') }}" method="POST" id="details-form">
@method('PUT')
@csrf
@include('user.partials.details', ['profile' => true])
</form>
</div>
<div class="tab-pane fade px-2"
id="login-details"
role="tabpanel"
aria-labelledby="nav-profile-tab">
<form action="{{ route('profile.update.login-details') }}"
method="POST"
id="login-details-form">
@method('PUT')
@csrf
@include('user.partials.auth')
</form>
</div>
@if (setting('2fa.enabled'))
<div class="tab-pane fade px-2" id="2fa" role="tabpanel" aria-labelledby="nav-profile-tab">
<?php $route = Authy::isEnabled($user) ? 'disable' : 'enable'; ?>
<form action="{{ route("two-factor.{$route}") }}" method="POST" id="two-factor-form">
@csrf
@include('user.partials.two-factor')
</form>
</div>
@endif
</div>
</div>
</div>
</div>
<div class="col-md-4">
<div class="card">
<div class="card-body">
<form action="{{ route("profile.update.avatar") }}"
method="POST"
id="avatar-form"
enctype="multipart/form-data">
@csrf
@include('user.partials.avatar', ['updateUrl' => route('profile.update.avatar-external')])
</form>
</div>
</div>
</div>
</div>
@stop
@section('scripts')
{!! HTML::script('assets/js/as/btn.js') !!}
{!! HTML::script('assets/js/as/profile.js') !!}
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateDetailsRequest', '#details-form') !!}
{!! JsValidator::formRequest('Vanguard\Http\Requests\User\UpdateProfileLoginDetailsRequest', '#login-details-form') !!}
@if (setting('2fa.enabled'))
{!! JsValidator::formRequest('Vanguard\Http\Requests\TwoFactor\EnableTwoFactorRequest', '#two-factor-form') !!}
@endif
@stop
+80
View File
@@ -0,0 +1,80 @@
@extends('layouts.app')
@section('page-title', $user->present()->nameOrEmail . ' - ' . __('Active Sessions'))
@section('page-heading')
@lang('Sessions') ({{ $user->present()->nameOrEmail }})
@stop
@section('breadcrumbs')
@if (isset($adminView))
<li class="breadcrumb-item">
<a href="{{ route('users.index') }}">@lang('Users')</a>
</li>
<li class="breadcrumb-item">
<a href="{{ route('users.show', $user->id) }}">
{{ $user->present()->nameOrEmail }}
</a>
</li>
@endif
<li class="breadcrumb-item active">
@lang('Sessions')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="card">
<div class="card-body">
<div class="table-responsive">
<table class="table table-borderless table-striped">
<thead>
<tr>
<th>@lang('IP Address')</th>
<th>@lang('Device')</th>
<th>@lang('Browser')</th>
<th>@lang('Last Activity')</th>
<th class="text-center">@lang('Action')</th>
</tr>
</thead>
<tbody>
@if (count($sessions))
@foreach ($sessions as $session)
<tr>
<td>{{ $session->ip_address }}</td>
<td>
{{ $session->device ?: __('Unknown') }} ({{ $session->platform ?: __('Unknown') }})
</td>
<td>{{ $session->browser ?: __('Unknown') }}</td>
<td>{{ $session->last_activity->format(config('app.date_time_format')) }}</td>
<td class="text-center">
<a href="{{ isset($profile) ? route('profile.sessions.invalidate', $session->id) : route('user.sessions.invalidate', [$user->id, $session->id]) }}"
class="btn btn-icon"
title="@lang('Invalidate Session')"
data-toggle="tooltip"
data-placement="top"
data-method="DELETE"
data-confirm-title="@lang('Please Confirm')"
data-confirm-text="@lang('Are you sure that you want to invalidate this session?')"
data-confirm-delete="@lang('Yes, proceed!')">
<i class="fas fa-times"></i>
</a>
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="6"><em>@lang('No records found.')</em></td>
</tr>
@endif
</tbody>
</table>
</div>
</div>
</div>
@stop
@@ -0,0 +1,72 @@
@extends('layouts.app')
@section('page-title', __('My Profile'))
@section('page-heading', __('My Profile'))
@section('breadcrumbs')
<li class="breadcrumb-item">
@lang('My Profile')
</li>
<li class="breadcrumb-item active">
@lang('Two-Factor Phone Verification')
</li>
@stop
@section('content')
@include('partials.messages')
<div class="row">
<div class="col-md-6 m-auto">
<div class="card">
<div class="card-body">
<h5 class="card-title card-title-bold">
@lang('Phone Verification')
</h5>
<p>
@lang('We have sent you a verification token via SMS. Please provide the token
below to verify your phone number.')
</p>
{!! Form::open(['route' => "two-factor.verify", 'id' => 'two-factor-form']) !!}
@if ($user)
<input type="hidden" name="user" value="{{ $user }}">
@endif
<div class="form-group mt-4">
<input type="text"
class="form-control"
id="token"
name="token"
placeholder="@lang('Token')">
</div>
<div class="mt-3">
<button type="submit"
class="btn btn-primary"
data-toggle="loader"
data-loading-text="@lang('Verifying...')">
@lang('Verify')
</button>
<a href="javascript:;"
class="btn d-none"
id="resend-token"
data-loading-text="@lang('Sending...')">
@lang('Resend Token')
</a>
</div>
{!! Form::close() !!}
</div>
</div>
</div>
</div>
@stop
@section('scripts')
<script>
var user = {{ isset($user) ? $user : 'null' }};
</script>
{!! HTML::script('assets/js/as/btn.js') !!}
{!! HTML::script('assets/js/as/two-factor.js') !!}
@stop
+90
View File
@@ -0,0 +1,90 @@
@extends('layouts.app')
@section('page-title', $user->present()->nameOrEmail)
@section('page-heading', $user->present()->nameOrEmail)
@section('breadcrumbs')
<li class="breadcrumb-item">
<a href="{{ route('users.index') }}">@lang('Users')</a>
</li>
<li class="breadcrumb-item active">
{{ $user->present()->nameOrEmail }}
</li>
@stop
@section('content')
<div class="row">
<div class="col-lg-5 col-xl-4 @if (! isset($activities)) mx-auto @endif">
<div class="card">
<h6 class="card-header d-flex align-items-center justify-content-between">
@lang('Details')
<small>
@canBeImpersonated($user)
<a href="{{ route('impersonate', $user) }}"
data-toggle="tooltip"
data-placement="top"
title="@lang('Impersonate User')">
@lang('Impersonate')
</a>
<span class="text-muted">|</span>
@endCanBeImpersonated
<a href="{{ route('users.edit', $user) }}"
class="edit"
data-toggle="tooltip"
data-placement="top"
title="@lang('Edit User')">
@lang('Edit')
</a>
</small>
</h6>
<div class="card-body">
<div class="d-flex align-items-center flex-column pt-3">
<div>
<img class="rounded-circle img-thumbnail img-responsive mb-4"
width="130"
height="130" src="{{ $user->present()->avatar }}">
</div>
@if ($name = $user->present()->name)
<h5>{{ $user->present()->name }}</h5>
@endif
<a href="mailto:{{ $user->email }}" class="text-muted font-weight-light mb-2">
{{ $user->email }}
</a>
</div>
<ul class="list-group list-group-flush mt-3">
@if ($user->phone)
<li class="list-group-item">
<strong>@lang('Phone'):</strong>
<a href="telto:{{ $user->phone }}">{{ $user->phone }}</a>
</li>
@endif
<li class="list-group-item">
<strong>@lang('Birthday'):</strong>
{{ $user->present()->birthday }}
</li>
<li class="list-group-item">
<strong>@lang('Address'):</strong>
{{ $user->present()->fullAddress }}
</li>
<li class="list-group-item">
<strong>@lang('Last Logged In'):</strong>
{{ $user->present()->lastLogin }}
</li>
</ul>
</div>
</div>
</div>
@if (isset($activities))
<div class="col-lg-7 col-xl-8">
@include("user-activity::recent-activity", ['activities' => $activities])
</div>
@endif
</div>
@stop
View File
+54
View File
@@ -0,0 +1,54 @@
<script>
jQuery(document).ready(function(){
$("<?php echo $validator['selector']; ?>").validate({
errorElement: 'span',
errorClass: 'invalid-feedback',
errorPlacement: function(error, element) {
if (element.parent('.input-group').length ||
element.prop('type') === 'checkbox' || element.prop('type') === 'radio') {
error.insertAfter(element.parent());
// else just place the validation message immediately after the input
} else {
error.insertAfter(element);
}
},
highlight: function(element) {
$(element).closest('.form-group input').removeClass('is-valid').addClass('is-invalid');
},
<?php if (isset($validator['ignore']) && is_string($validator['ignore'])) : ?>
ignore: "<?php echo $validator['ignore']; ?>",
<?php endif; ?>
// Uncomment this to mark as validated non required fields
unhighlight: function(element) {
$(element).closest('.form-group input').removeClass('is-invalid');
},
success: function(element) {
$(element).closest('.form-group input').removeClass('is-invalid').addClass('is-valid');
},
focusInvalid: false, // do not focus the last invalid input
<?php if (Config::get('jsvalidation.focus_on_error')) : ?>
invalidHandler: function(form, validator) {
if (!validator.numberOfInvalids())
return;
$('html, body').animate({
scrollTop: $(validator.errorList[0].element).offset().top
}, <?php echo Config::get('jsvalidation.duration_animate') ?>);
$(validator.errorList[0].element).focus();
},
<?php endif; ?>
rules: <?php echo json_encode($validator['rules']); ?>
})
})
</script>
+19
View File
@@ -0,0 +1,19 @@
<table class="action" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<a href="{{ $url }}" class="button button-{{ $color ?? 'brand' }}" target="_blank">{{ $slot }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
+11
View File
@@ -0,0 +1,11 @@
<tr>
<td>
<table class="footer" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="content-cell" align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>
+7
View File
@@ -0,0 +1,7 @@
<tr>
<td class="header">
<a href="{{ $url }}">
{{ $slot }}
</a>
</td>
</tr>
+54
View File
@@ -0,0 +1,54 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<style>
@media only screen and (max-width: 600px) {
.inner-body {
width: 100% !important;
}
.footer {
width: 100% !important;
}
}
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
<table class="wrapper" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table class="content" width="100%" cellpadding="0" cellspacing="0" role="presentation">
{{ $header ?? '' }}
<!-- Email Body -->
<tr>
<td class="body" width="100%" cellpadding="0" cellspacing="0">
<table class="inner-body" align="center" width="570" cellpadding="0" cellspacing="0" role="presentation">
<!-- Body content -->
<tr>
<td class="content-cell">
{{ Illuminate\Mail\Markdown::parse($slot) }}
{{ $subcopy ?? '' }}
</td>
</tr>
</table>
</td>
</tr>
{{ $footer ?? '' }}
</table>
</td>
</tr>
</table>
</body>
</html>
+27
View File
@@ -0,0 +1,27 @@
@component('mail::layout')
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="{{ config('app.name') }}" height="50">
@endcomponent
@endslot
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
@endcomponent
@endslot
@endcomponent
+13
View File
@@ -0,0 +1,13 @@
<table class="panel" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="panel-content">
<table width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td class="panel-item">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
</td>
</tr>
</table>
+7
View File
@@ -0,0 +1,7 @@
<table class="promotion" align="center" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
@@ -0,0 +1,13 @@
<table width="100%" border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td align="center">
<table border="0" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
<a href="{{ $url }}" class="button button-green" target="_blank">{{ $slot }}</a>
</td>
</tr>
</table>
</td>
</tr>
</table>
+7
View File
@@ -0,0 +1,7 @@
<table class="subcopy" width="100%" cellpadding="0" cellspacing="0" role="presentation">
<tr>
<td>
{{ Illuminate\Mail\Markdown::parse($slot) }}
</td>
</tr>
</table>
+3
View File
@@ -0,0 +1,3 @@
<div class="table">
{{ Illuminate\Mail\Markdown::parse($slot) }}
</div>
+307
View File
@@ -0,0 +1,307 @@
/* Base */
body,
body *:not(html):not(style):not(br):not(tr):not(code) {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif,
'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol';
box-sizing: border-box;
}
body {
background-color: #f8fafc;
color: #74787e;
height: 100%;
hyphens: auto;
line-height: 1.4;
margin: 0;
-moz-hyphens: auto;
-ms-word-break: break-all;
width: 100% !important;
-webkit-hyphens: auto;
-webkit-text-size-adjust: none;
word-break: break-all;
word-break: break-word;
}
p,
ul,
ol,
blockquote {
line-height: 1.4;
text-align: left;
}
a {
color: #3869d4;
}
a img {
border: none;
}
/* Typography */
h1 {
color: #3d4852;
font-size: 19px;
font-weight: bold;
margin-top: 0;
text-align: left;
}
h2 {
color: #3d4852;
font-size: 16px;
font-weight: bold;
margin-top: 0;
text-align: left;
}
h3 {
color: #3d4852;
font-size: 14px;
font-weight: bold;
margin-top: 0;
text-align: left;
}
p {
color: #3d4852;
font-size: 16px;
line-height: 1.5em;
margin-top: 0;
text-align: left;
}
p.sub {
font-size: 12px;
}
img {
max-width: 100%;
}
/* Layout */
.wrapper {
background-color: #f8fafc;
margin: 0;
padding: 0;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
}
.content {
margin: 0;
padding: 0;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
}
/* Header */
.header {
padding: 25px 0;
text-align: center;
border-top: 5px solid #1c8966;
}
.header a {
color: #bbbfc3;
font-size: 19px;
font-weight: bold;
text-decoration: none;
text-shadow: 0 1px 0 white;
}
/* Body */
.body {
background-color: #ffffff;
border-bottom: 1px solid #edeff2;
border-top: 1px solid #edeff2;
margin: 0;
padding: 0;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
}
.inner-body {
background-color: #ffffff;
margin: 0 auto;
padding: 0;
width: 570px;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 570px;
}
/* Subcopy */
.subcopy {
border-top: 1px solid #edeff2;
margin-top: 25px;
padding-top: 25px;
}
.subcopy p {
font-size: 12px;
}
/* Footer */
.footer {
margin: 0 auto;
padding: 0;
text-align: center;
width: 570px;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 570px;
}
.footer p {
color: #aeaeae;
font-size: 12px;
text-align: center;
}
/* Tables */
.table table {
margin: 30px auto;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
}
.table th {
border-bottom: 1px solid #edeff2;
padding-bottom: 8px;
margin: 0;
}
.table td {
color: #74787e;
font-size: 15px;
line-height: 18px;
padding: 10px 0;
margin: 0;
}
.content-cell {
padding: 35px;
}
/* Buttons */
.action {
margin: 30px auto;
padding: 0;
text-align: center;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
}
.button {
border-radius: 3px;
box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);
color: #fff;
display: inline-block;
text-decoration: none;
-webkit-text-size-adjust: none;
}
.button-blue,
.button-primary {
background-color: #3490dc;
border-top: 10px solid #3490dc;
border-right: 18px solid #3490dc;
border-bottom: 10px solid #3490dc;
border-left: 18px solid #3490dc;
}
.button-green,
.button-success {
background-color: #38c172;
border-top: 10px solid #38c172;
border-right: 18px solid #38c172;
border-bottom: 10px solid #38c172;
border-left: 18px solid #38c172;
}
.button-red,
.button-error {
background-color: #e3342f;
border-top: 10px solid #e3342f;
border-right: 18px solid #e3342f;
border-bottom: 10px solid #e3342f;
border-left: 18px solid #e3342f;
}
.button-brand {
background-color: #1c8966;
border-top: 10px solid #1c8966;
border-right: 18px solid #1c8966;
border-bottom: 10px solid #1c8966;
border-left: 18px solid #1c8966;
}
/* Panels */
.panel {
margin: 0 0 21px;
}
.panel-content {
background-color: #f1f5f8;
padding: 16px;
}
.panel-item {
padding: 0;
}
.panel-item p:last-of-type {
margin-bottom: 0;
padding-bottom: 0;
}
/* Promotions */
.promotion {
background-color: #ffffff;
border: 2px dashed #9ba2ab;
margin: 0;
margin-bottom: 25px;
margin-top: 25px;
padding: 24px;
width: 100%;
-premailer-cellpadding: 0;
-premailer-cellspacing: 0;
-premailer-width: 100%;
}
.promotion h1 {
text-align: center;
}
.promotion p {
font-size: 15px;
text-align: center;
}
code {
background: rgba(0,0,0,.05);
padding: 2px 4px;
border-radius: 2px;
}
+1
View File
@@ -0,0 +1 @@
{{ $slot }}: {{ $url }}
+1
View File
@@ -0,0 +1 @@
{{ $slot }}
+1
View File
@@ -0,0 +1 @@
[{{ $slot }}]({{ $url }})
+9
View File
@@ -0,0 +1,9 @@
{!! strip_tags($header) !!}
{!! strip_tags($slot) !!}
@isset($subcopy)
{!! strip_tags($subcopy) !!}
@endisset
{!! strip_tags($footer) !!}
+27
View File
@@ -0,0 +1,27 @@
@component('mail::layout')
{{-- Header --}}
@slot('header')
@component('mail::header', ['url' => config('app.url')])
{{ config('app.name') }}
@endcomponent
@endslot
{{-- Body --}}
{{ $slot }}
{{-- Subcopy --}}
@isset($subcopy)
@slot('subcopy')
@component('mail::subcopy')
{{ $subcopy }}
@endcomponent
@endslot
@endisset
{{-- Footer --}}
@slot('footer')
@component('mail::footer')
© {{ date('Y') }} {{ config('app.name') }}. @lang('All rights reserved.')
@endcomponent
@endslot
@endcomponent
+1
View File
@@ -0,0 +1 @@
{{ $slot }}
+1
View File
@@ -0,0 +1 @@
{{ $slot }}
@@ -0,0 +1 @@
[{{ $slot }}]({{ $url }})
+1
View File
@@ -0,0 +1 @@
{{ $slot }}
+1
View File
@@ -0,0 +1 @@
{{ $slot }}
@@ -0,0 +1,22 @@
<?php
if (! empty($greeting)) {
echo $greeting, "\n\n";
} else {
echo $level == 'error' ? 'Whoops!' : 'Hello!', "\n\n";
}
if (! empty($introLines)) {
echo implode("\n", $introLines), "\n\n";
}
if (isset($actionText)) {
echo "{$actionText}: {$actionUrl}", "\n\n";
}
if (! empty($outroLines)) {
echo implode("\n", $outroLines), "\n\n";
}
echo 'Regards,', "\n";
echo config('app.name'), "\n";
+193
View File
@@ -0,0 +1,193 @@
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<style type="text/css" rel="stylesheet" media="all">
/* Media Queries */
@media only screen and (max-width: 500px) {
.button {
width: 100% !important;
}
}
</style>
</head>
<?php
$style = [
/* Layout ------------------------------ */
'body' => 'margin: 0; padding: 0; width: 100%; background-color: #F2F4F6;',
'email-wrapper' => 'width: 100%; margin: 0; padding: 0; background-color: #F2F4F6; border-top: 5px solid #1c8966;',
/* Masthead ----------------------- */
'email-masthead' => 'padding: 25px 0; text-align: center;',
'email-masthead_name' => 'font-size: 16px; font-weight: bold; color: #2F3133; text-decoration: none; text-shadow: 0 1px 0 white;',
'email-body' => 'width: 100%; margin: 0; padding: 0; border-top: 1px solid #EDEFF2; border-bottom: 1px solid #EDEFF2; background-color: #FFF;',
'email-body_inner' => 'width: auto; max-width: 570px; margin: 0 auto; padding: 0;',
'email-body_cell' => 'padding: 35px;',
'email-footer' => 'width: auto; max-width: 570px; margin: 0 auto; padding: 0; text-align: center;',
'email-footer_cell' => 'color: #AEAEAE; padding: 35px; text-align: center;',
/* Body ------------------------------ */
'body_action' => 'width: 100%; margin: 30px auto; padding: 0; text-align: center;',
'body_sub' => 'margin-top: 25px; padding-top: 25px; border-top: 1px solid #EDEFF2;',
/* Type ------------------------------ */
'anchor' => 'color: #3869D4;',
'header-1' => 'margin-top: 0; color: #2F3133; font-size: 19px; font-weight: bold; text-align: left;',
'paragraph' => 'margin-top: 0; color: #74787E; font-size: 16px; line-height: 1.5em;',
'paragraph-sub' => 'margin-top: 0; color: #74787E; font-size: 12px; line-height: 1.5em;',
'paragraph-center' => 'text-align: center;',
/* Buttons ------------------------------ */
'button' => 'display: block; display: inline-block; width: 200px; min-height: 20px; padding: 10px;
background-color: #3869D4; border-radius: 3px; color: #ffffff; font-size: 15px; line-height: 25px;
text-align: center; text-decoration: none; -webkit-text-size-adjust: none;',
'button--green' => 'background-color: #5cb85c;',
'button--red' => 'background-color: #dc4d2f;',
'button--blue' => 'background-color: #3869D4;',
'button--default' => 'background-color: #1c8966;'
];
?>
<?php $fontFamily = 'font-family: Arial, \'Helvetica Neue\', Helvetica, sans-serif;'; ?>
<body style="{{ $style['body'] }}">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<td style="{{ $style['email-wrapper'] }}" align="center">
<table width="100%" cellpadding="0" cellspacing="0">
<!-- Logo -->
<tr>
<td style="{{ $style['email-masthead'] }}">
<a style="{{ $fontFamily }} {{ $style['email-masthead_name'] }}" href="{{ url('/') }}" target="_blank">
<img src="{{ url('assets/img/vanguard-logo.png') }}" alt="Vanguard" height="60">
{{--{{ config('app.name') }}--}}
</a>
</td>
</tr>
<!-- Email Body -->
<tr>
<td style="{{ $style['email-body'] }}" width="100%">
<table style="{{ $style['email-body_inner'] }}" align="center" width="570" cellpadding="0" cellspacing="0">
<tr>
<td style="{{ $fontFamily }} {{ $style['email-body_cell'] }}">
<!-- Greeting -->
<h1 style="{{ $style['header-1'] }}">
@if (! empty($greeting))
{{ $greeting }}
@else
@if ($level == 'error')
Whoops!
@else
Hello!
@endif
@endif
</h1>
<!-- Intro -->
@foreach ($introLines as $line)
<p style="{{ $style['paragraph'] }}">
{{ $line }}
</p>
@endforeach
<!-- Action Button -->
@if (isset($actionText))
<table style="{{ $style['body_action'] }}" align="center" width="100%" cellpadding="0" cellspacing="0">
<tr>
<td align="center">
<?php
switch ($level) {
case 'success':
$actionColor = 'button--green';
break;
case 'error':
$actionColor = 'button--red';
break;
default:
$actionColor = 'button--default';
}
?>
<a href="{{ $actionUrl }}"
style="{{ $fontFamily }} {{ $style['button'] }} {{ $style[$actionColor] }}"
class="button"
target="_blank">
{{ $actionText }}
</a>
</td>
</tr>
</table>
@endif
<!-- Outro -->
@foreach ($outroLines as $line)
<p style="{{ $style['paragraph'] }}">
{{ $line }}
</p>
@endforeach
<!-- Salutation -->
<p style="{{ $style['paragraph'] }}">
@lang('Regards'),<br>{{ config('app.name') }}
</p>
<!-- Sub Copy -->
@if (isset($actionText))
<table style="{{ $style['body_sub'] }}">
<tr>
<td style="{{ $fontFamily }}">
<p style="{{ $style['paragraph-sub'] }}">
@lang("If you're having trouble clicking the \":button\" button, copy and paste the URL below into your web browser:", ['button' => $actionText])
</p>
<p style="{{ $style['paragraph-sub'] }}">
<a style="{{ $style['anchor'] }}" href="{{ $actionUrl }}" target="_blank">
{{ $actionUrl }}
</a>
</p>
</td>
</tr>
</table>
@endif
</td>
</tr>
</table>
</td>
</tr>
<!-- Footer -->
<tr>
<td>
<table style="{{ $style['email-footer'] }}" align="center" width="570" cellpadding="0" cellspacing="0">
<tr>
<td style="{{ $fontFamily }} {{ $style['email-footer_cell'] }}">
<p style="{{ $style['paragraph-sub'] }}">
&copy; {{ date('Y') }}
<a style="{{ $style['anchor'] }}" href="{{ url('/') }}" target="_blank">{{ config('app.name') }}</a>.
@lang('All rights reserved.')
</p>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>
+36
View File
@@ -0,0 +1,36 @@
@if ($paginator->hasPages())
<ul class="pagination">
<!-- Previous Page Link -->
@if ($paginator->onFirstPage())
<li class="page-item disabled"><span class="page-link">&laquo;</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
@endif
<!-- Pagination Elements -->
@foreach ($elements as $element)
<!-- "Three Dots" Separator -->
@if (is_string($element))
<li class="page-item disabled"><span class="page-link">{{ $element }}</span></li>
@endif
<!-- Array Of Links -->
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="page-item active"><span class="page-link">{{ $page }}</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
<!-- Next Page Link -->
@if ($paginator->hasMorePages())
<li class="page-item"><a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a></li>
@else
<li class="page-item disabled"><span class="page-link">&raquo;</span></li>
@endif
</ul>
@endif
+36
View File
@@ -0,0 +1,36 @@
@if ($paginator->hasPages())
<ul class="pagination">
<!-- Previous Page Link -->
@if ($paginator->onFirstPage())
<li class="disabled"><span>&laquo;</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
@endif
<!-- Pagination Elements -->
@foreach ($elements as $element)
<!-- "Three Dots" Separator -->
@if (is_string($element))
<li class="disabled"><span>{{ $element }}</span></li>
@endif
<!-- Array Of Links -->
@if (is_array($element))
@foreach ($element as $page => $url)
@if ($page == $paginator->currentPage())
<li class="active"><span>{{ $page }}</span></li>
@else
<li><a href="{{ $url }}">{{ $page }}</a></li>
@endif
@endforeach
@endif
@endforeach
<!-- Next Page Link -->
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a></li>
@else
<li class="disabled"><span>&raquo;</span></li>
@endif
</ul>
@endif
@@ -0,0 +1,17 @@
@if ($paginator->hasPages())
<ul class="pagination">
<!-- Previous Page Link -->
@if ($paginator->onFirstPage())
<li class="page-item disabled"><span class="page-link">&laquo;</span></li>
@else
<li class="page-item"><a class="page-link" href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
@endif
<!-- Next Page Link -->
@if ($paginator->hasMorePages())
<li class="page-item"><a class="page-link" href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a></li>
@else
<li class="page-item disabled"><span class="page-link">&raquo;</span></li>
@endif
</ul>
@endif
@@ -0,0 +1,17 @@
@if ($paginator->hasPages())
<ul class="pagination">
<!-- Previous Page Link -->
@if ($paginator->onFirstPage())
<li class="disabled"><span>&laquo;</span></li>
@else
<li><a href="{{ $paginator->previousPageUrl() }}" rel="prev">&laquo;</a></li>
@endif
<!-- Next Page Link -->
@if ($paginator->hasMorePages())
<li><a href="{{ $paginator->nextPageUrl() }}" rel="next">&raquo;</a></li>
@else
<li class="disabled"><span>&raquo;</span></li>
@endif
</ul>
@endif