primo upload
This commit is contained in:
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
@@ -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
|
||||
Reference in New Issue
Block a user