[WIP] Refactor project
This commit is contained in:
23
resources/views/vendor/boilerplate/users/avatar.blade.php
vendored
Normal file
23
resources/views/vendor/boilerplate/users/avatar.blade.php
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
<div class="avatar d-flex align-items-center justify-content-center">
|
||||
<div class="avatar-progress text-white position-absolute">
|
||||
<i class="fas fa-5x fa-circle-notch fa-spin"></i>
|
||||
<span class="avatar-percent">0%</span>
|
||||
</div>
|
||||
<div class="avatar-buttons">
|
||||
<div class="btn-group">
|
||||
<a class="btn btn-sm btn-default avatar-upload" data-link="{{ route('boilerplate.user.avatar.upload', null, false) }}" data-toggle="tooltip" title="Upload">
|
||||
<i class="fa fa-fw fa-upload"></i>
|
||||
</a>
|
||||
<a class="btn btn-sm btn-default avatar-gravatar" data-link="{{ route('boilerplate.user.avatar.gravatar', null, false) }}" data-toggle="tooltip" title="Get from Gravatar">
|
||||
<i class="fa fa-fw fa-cloud-download-alt"></i>
|
||||
</a>
|
||||
<a class="btn btn-sm btn-default avatar-delete {{ $user->hasAvatar() ? '' : 'd-none' }}" data-link="{{ route('boilerplate.user.avatar.delete', null, false) }}" data-toggle="tooltip" title="Delete">
|
||||
<i class="fa fa-fw fa-trash"></i>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="d-flex align-items-center justify-content-center avatar-label mb-0">
|
||||
<img src="{{ $user->avatar_url }}" class="avatar-img" alt="avatar" />
|
||||
{!! Form::file('avatar', ['id' => 'avatar-file', 'class' => 'd-none', 'accept' => 'image/*']) !!}
|
||||
</div>
|
||||
</div>
|
||||
62
resources/views/vendor/boilerplate/users/create.blade.php
vendored
Normal file
62
resources/views/vendor/boilerplate/users/create.blade.php
vendored
Normal file
@@ -0,0 +1,62 @@
|
||||
@extends('boilerplate::layout.index', [
|
||||
'title' => __('boilerplate::users.title'),
|
||||
'subtitle' => __('boilerplate::users.create.title'),
|
||||
'breadcrumb' => [
|
||||
__('boilerplate::users.title') => 'boilerplate.users.index',
|
||||
__('boilerplate::users.create.title')
|
||||
]
|
||||
])
|
||||
|
||||
@section('content')
|
||||
{{ Form::open(['route' => 'boilerplate.users.store', 'autocomplete' => 'off']) }}
|
||||
<div class="row">
|
||||
<div class="col-12 pb-3">
|
||||
<a href="{{ route("boilerplate.users.index") }}" class="btn btn-default" data-toggle="tooltip" title="@lang('boilerplate::users.returntolist')">
|
||||
<span class="far fa-arrow-alt-circle-left text-muted"></span>
|
||||
</a>
|
||||
<span class="btn-group float-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('boilerplate::users.save')
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-lg-6">
|
||||
@component('boilerplate::card', ['title' => 'boilerplate::users.informations'])
|
||||
@component('boilerplate::select2', ['name' => 'active', 'label' => 'boilerplate::users.status', 'minimum-results-for-search' => '-1'])
|
||||
<option value="1" @if (old('active', 1) == '1') selected="selected" @endif>@lang('boilerplate::users.active')</option>
|
||||
<option value="0" @if (old('active') == '0') selected="selected" @endif>@lang('boilerplate::users.inactive')</option>
|
||||
@endcomponent
|
||||
<div class="row">
|
||||
<div class="col-md-6 col-lg-12 col-xl-6">
|
||||
@component('boilerplate::input', ['name' => 'first_name', 'label' => 'boilerplate::users.firstname', 'autofocus' => true])@endcomponent
|
||||
</div>
|
||||
<div class="col-md-6 col-lg-12 col-xl-6">
|
||||
@component('boilerplate::input', ['name' => 'last_name', 'label' => 'boilerplate::users.lastname'])@endcomponent
|
||||
</div>
|
||||
</div>
|
||||
@component('boilerplate::input', ['name' => 'email', 'label' => 'boilerplate::users.email', 'help' => 'boilerplate::users.create.help'])@endcomponent
|
||||
@endcomponent
|
||||
</div>
|
||||
<div class="col-lg-6">
|
||||
@component('boilerplate::card', ['color' => 'teal', 'title' => 'boilerplate::users.roles'])
|
||||
<table class="table table-sm table-hover">
|
||||
@foreach($roles as $role)
|
||||
<tr>
|
||||
<td style="width:25px">
|
||||
@component('boilerplate::icheck', ['name' => 'roles['.$role->id.']', 'id' => 'role_'.$role->id, 'checked' => old('roles.'.$role->id) == 'on'])@endcomponent
|
||||
</td>
|
||||
<td>
|
||||
{{ Form::label('role_'.$role->id, $role->display_name, ['class' => 'mb-0 pb-0']) }}<br />
|
||||
<span class="small">{{ $role->description }}</span><br />
|
||||
<span class="small text-muted">{{ $role->permissions->implode('display_name', ', ') }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
@endforeach
|
||||
</table>
|
||||
@endcomponent
|
||||
</div>
|
||||
</div>
|
||||
{{ Form::close() }}
|
||||
@endsection
|
||||
75
resources/views/vendor/boilerplate/users/edit.blade.php
vendored
Normal file
75
resources/views/vendor/boilerplate/users/edit.blade.php
vendored
Normal file
@@ -0,0 +1,75 @@
|
||||
@extends('boilerplate::layout.index', [
|
||||
'title' => __('boilerplate::users.title'),
|
||||
'subtitle' => __('boilerplate::users.edit.title'),
|
||||
'breadcrumb' => [
|
||||
__('boilerplate::users.title') => 'boilerplate.users.index',
|
||||
__('boilerplate::users.edit.title')
|
||||
]
|
||||
])
|
||||
|
||||
@section('content')
|
||||
{{ Form::open(['route' => ['boilerplate.users.update', $user->id], 'method' => 'put', 'autocomplete' => 'off']) }}
|
||||
<div class="row">
|
||||
<div class="col-12 pb-3">
|
||||
<a href="{{ route("boilerplate.users.index") }}" class="btn btn-default" data-toggle="tooltip" title="@lang('boilerplate::users.returntolist')">
|
||||
<span class="far fa-arrow-alt-circle-left text-muted"></span>
|
||||
</a>
|
||||
<span class="btn-group float-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('boilerplate::users.save')
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::card', ['title' => __('boilerplate::users.informations')])
|
||||
@if(Auth::user()->id !== $user->id)
|
||||
@component('boilerplate::select2', ['name' => 'active', 'label' => 'boilerplate::users.status', 'minimum-results-for-search' => '-1'])
|
||||
<option value="1" @if (old('active', $user->active) == '1') selected="selected" @endif>@lang('boilerplate::users.active')</option>
|
||||
<option value="0" @if (old('active', $user->active) == '0') selected="selected" @endif>@lang('boilerplate::users.inactive')</option>
|
||||
@endcomponent
|
||||
@endif
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::input', ['name' => 'first_name', 'label' => 'boilerplate::users.firstname', 'value' => $user->first_name])@endcomponent
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::input', ['name' => 'last_name', 'label' => 'boilerplate::users.lastname', 'value' => $user->last_name])@endcomponent
|
||||
</div>
|
||||
</div>
|
||||
@component('boilerplate::input', ['name' => 'email', 'label' => 'boilerplate::users.email', 'value' => $user->email])@endcomponent
|
||||
@endcomponent
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::card', ['color' => 'teal', 'title' =>__('boilerplate::users.roles')])
|
||||
<table class="table table-sm table-hover">
|
||||
@foreach($roles as $role)
|
||||
@if($role->name !== 'admin' || ($role->name === 'admin' && Auth::user()->hasRole('admin')))
|
||||
<tr>
|
||||
<td style="width:25px">
|
||||
<div class="icheck-primary">
|
||||
@if(Auth::user()->id === $user->id && $role->name === 'admin' && Auth::user()->hasRole('admin'))
|
||||
{{ Form::checkbox('roles['.$role->id.']', 1, old('roles['.$role->id.']', $user->hasRole($role->name)), ['id' => 'role_'.$role->id, 'class' => 'icheck', 'checked', 'disabled']) }}
|
||||
{!! Form::hidden('roles['.$role->id.']', '1', ['id' => 'role_'.$role->id]) !!}
|
||||
@else
|
||||
{{ Form::checkbox('roles['.$role->id.']', 1, old('roles['.$role->id.']', $user->hasRole($role->name)), ['id' => 'role_'.$role->id, 'class' => 'icheck']) }}
|
||||
@endif
|
||||
<label for="{{ 'role_'.$role->id }}"></label>
|
||||
</div>
|
||||
</td>
|
||||
<td>
|
||||
{{ Form::label('role_'.$role->id, $role->display_name, ['class' => 'mbn']) }}<br />
|
||||
<span class="small">{{ $role->description }}</span><br />
|
||||
<span class="small text-muted">{{ $role->permissions->implode('display_name', ', ') }}</span>
|
||||
</td>
|
||||
</tr>
|
||||
@endif
|
||||
@endforeach
|
||||
</table>
|
||||
@endcomponent
|
||||
</div>
|
||||
</div>
|
||||
{{ Form::close() }}
|
||||
@endsection
|
||||
156
resources/views/vendor/boilerplate/users/list.blade.php
vendored
Normal file
156
resources/views/vendor/boilerplate/users/list.blade.php
vendored
Normal file
@@ -0,0 +1,156 @@
|
||||
@extends('boilerplate::layout.index', [
|
||||
'title' => __('boilerplate::users.title'),
|
||||
'subtitle' => __('boilerplate::users.list.title'),
|
||||
'breadcrumb' => [
|
||||
__('boilerplate::users.title') => 'boilerplate.users.index'
|
||||
]
|
||||
])
|
||||
|
||||
@section('right-sidebar')
|
||||
<div id="filters">
|
||||
<div class="form-group">
|
||||
<select name="state" class="form-control select2" data-placeholder="@lang('boilerplate::users.list.state')">
|
||||
<option></option>
|
||||
<option value="1">@lang('boilerplate::users.active')</option>
|
||||
<option value="0">@lang('boilerplate::users.inactive')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<select name="role" class="form-control select2" data-placeholder="@lang('boilerplate::role.role')">
|
||||
<option></option>
|
||||
@foreach($roles as $role)
|
||||
<option value="{{ $role->name }}">{{ $role->display_name }}</option>
|
||||
@endforeach
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
@endsection
|
||||
|
||||
@section('content')
|
||||
<div class="row">
|
||||
<div class="col-12 mbl">
|
||||
<span class="float-right pb-3">
|
||||
<a href="{{ route("boilerplate.users.create") }}" class="btn btn-primary">
|
||||
@lang('boilerplate::users.create.title')
|
||||
</a>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@component('boilerplate::card')
|
||||
<div class="table-responsive">
|
||||
<table class="table table-striped table-hover va-middle" id="users-list">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>{{-- id --}}</th>
|
||||
<th>{{-- avatar --}}</th>
|
||||
<th>@lang('boilerplate::users.list.state')</th>
|
||||
<th>@lang('boilerplate::users.list.lastname')</th>
|
||||
<th>@lang('boilerplate::users.list.firstname')</th>
|
||||
<th>@lang('boilerplate::users.list.email')</th>
|
||||
<th>@lang('boilerplate::users.list.roles')</th>
|
||||
<th>@lang('boilerplate::users.list.creationdate')</th>
|
||||
<th>@lang('boilerplate::users.list.lastconnect')</th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
</table>
|
||||
</div>
|
||||
@endcomponent
|
||||
@endsection
|
||||
|
||||
@include('boilerplate::load.datatables')
|
||||
@include('boilerplate::load.select2')
|
||||
|
||||
@push('js')
|
||||
<script>
|
||||
$('.select2').select2({
|
||||
minimumResultsForSearch: -1,
|
||||
allowClear: true,
|
||||
placeholder: $(this).data('placeholder'),
|
||||
width: '100%'
|
||||
});
|
||||
|
||||
$(function () {
|
||||
var oTable = $('#users-list').DataTable({
|
||||
processing: true,
|
||||
serverSide: true,
|
||||
stateSave: true,
|
||||
order: [[7, "desc"]],
|
||||
ajax: {
|
||||
url: '{!! route('boilerplate.users.datatable') !!}',
|
||||
type: 'post',
|
||||
},
|
||||
columns: [
|
||||
{data: 'id', name: 'id', visible: false},
|
||||
{data: 'avatar', name: 'avatar', searchable: false, sortable: false, width : '32px'},
|
||||
{data: 'status', name: 'users.active', searchable: true},
|
||||
{data: 'last_name', name: 'last_name'},
|
||||
{data: 'first_name', name: 'first_name'},
|
||||
{data: 'email', name: 'email'},
|
||||
{data: 'roles', name: 'roles.name', searchable: false, orderable: false},
|
||||
{
|
||||
data: 'created_at',
|
||||
name: 'users.created_at',
|
||||
searchable: false,
|
||||
render: $.fn.dataTable.render.moment('@lang('boilerplate::date.YmdHis')')
|
||||
},
|
||||
{
|
||||
data: 'last_login',
|
||||
name: 'last_login',
|
||||
searchable: false,
|
||||
render: function(date) {
|
||||
return date === null ? '-' : moment(date).fromNow(date)
|
||||
}
|
||||
},
|
||||
{
|
||||
data: 'actions',
|
||||
name: 'actions',
|
||||
orderable: false,
|
||||
searchable: false,
|
||||
width: '80px',
|
||||
class: 'visible-on-hover text-nowrap'
|
||||
}
|
||||
],
|
||||
fnInitComplete: function() {
|
||||
$('#users-list_filter').append('<button class="btn btn-default btn-sm ml-2" data-widget="control-sidebar" data-slide="true"><span class="fa fa-filter"></span></button>')
|
||||
}
|
||||
});
|
||||
|
||||
$('#filters select').on('change', function() {
|
||||
localStorage.setItem('user_search_'+$(this).attr('name'), $(this).val());
|
||||
oTable.column(($(this).attr('name') === 'state' ? 2 : 6)).search($(this).val()).draw()
|
||||
})
|
||||
|
||||
if (localStorage.getItem('user_search_state')) {
|
||||
value = localStorage.getItem('user_search_state');
|
||||
$('#filters select[name=state]').val(value).trigger('change')
|
||||
oTable.column(2).search(value).draw();
|
||||
}
|
||||
|
||||
if (localStorage.getItem('user_search_role')) {
|
||||
value = localStorage.getItem('user_search_role');
|
||||
$('#filters select[name=role]').val(value).trigger('change')
|
||||
oTable.column(6).search(value).draw();
|
||||
}
|
||||
|
||||
$(document).on('click', '#users-list .destroy', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var href = $(this).attr('href');
|
||||
|
||||
bootbox.confirm("@lang('boilerplate::users.list.confirmdelete')", function (result) {
|
||||
if (result === false) return;
|
||||
|
||||
$.ajax({
|
||||
url: href,
|
||||
method: 'delete',
|
||||
success: function () {
|
||||
oTable.ajax.reload();
|
||||
growl("@lang('boilerplate::users.list.deletesuccess')", "success");
|
||||
}
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@endpush
|
||||
86
resources/views/vendor/boilerplate/users/profile.blade.php
vendored
Normal file
86
resources/views/vendor/boilerplate/users/profile.blade.php
vendored
Normal file
@@ -0,0 +1,86 @@
|
||||
@extends('boilerplate::layout.index', [
|
||||
'title' => __('boilerplate::users.profile.title'),
|
||||
'subtitle' => $user->name,
|
||||
'breadcrumb' => [
|
||||
$user->name => 'boilerplate.user.profile',
|
||||
]
|
||||
])
|
||||
|
||||
@section('content')
|
||||
{{ Form::open(['route' => ['boilerplate.user.profile'], 'method' => 'post', 'autocomplete' => 'off', 'files' => true]) }}
|
||||
<div class="row">
|
||||
<div class="col-12 mb-3">
|
||||
<span class="btn-group float-right">
|
||||
<button type="submit" class="btn btn-primary">
|
||||
@lang('boilerplate::users.save')
|
||||
</button>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xl-5">
|
||||
@component('boilerplate::card', ['title' => __('boilerplate::users.profile.title')])
|
||||
<div class="d-flex flex-wrap">
|
||||
<div id="avatar-wrapper" class="mb-3">
|
||||
@include('boilerplate::users.avatar')
|
||||
</div>
|
||||
<div class="pl-3">
|
||||
<span class="info-box-text">
|
||||
<p class="mb-0"><strong class="h3">{{ $user->name }}</strong></p>
|
||||
<p class="">{{ $user->getRolesList() }}</p>
|
||||
</span>
|
||||
<span class="info-box-more">
|
||||
<p class="text-muted">
|
||||
<span class="far fa-fw fa-envelope"></span> {{ $user->email }}
|
||||
</p>
|
||||
<p class="mb-0 text-muted">
|
||||
{{ __('boilerplate::users.profile.subscribedsince', [
|
||||
'date' => $user->created_at->isoFormat(__('boilerplate::date.lFdY')),
|
||||
'since' => $user->created_at->diffForHumans()]) }}
|
||||
</p>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
@endcomponent
|
||||
</div>
|
||||
<div class="col-xl-7">
|
||||
@component('boilerplate::card', ['color' => 'teal', 'title' => __('boilerplate::users.informations')])
|
||||
<div class="row">
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::input', ['name' => 'first_name', 'label' => 'boilerplate::users.firstname', 'value' => $user->first_name, 'autofocus' => true])@endcomponent
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::input', ['name' => 'last_name', 'label' => 'boilerplate::users.lastname', 'value' => $user->last_name])@endcomponent
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::input', ['type' => 'password', 'name' => 'password', 'label' => ucfirst(__('boilerplate::auth.fields.password'))])@endcomponent
|
||||
</div>
|
||||
<div class="col-md-6">
|
||||
@component('boilerplate::input', ['type' => 'password', 'name' => 'password_confirmation', 'label' => ucfirst(__('boilerplate::auth.fields.password_confirm'))])@endcomponent
|
||||
</div>
|
||||
</div>
|
||||
@endcomponent
|
||||
</div>
|
||||
</div>
|
||||
{{ Form::close() }}
|
||||
@endsection
|
||||
|
||||
@push('js')
|
||||
<script>
|
||||
var avatar = {
|
||||
url: "{{ route('boilerplate.user.avatar.url', null, false) }}",
|
||||
locales: {
|
||||
delete: "@lang('boilerplate::avatar.delete')",
|
||||
gravatar: {
|
||||
success: "@lang('boilerplate::avatar.gravatar.success')",
|
||||
error: "@lang('boilerplate::avatar.gravatar.error')",
|
||||
},
|
||||
upload: {
|
||||
success: "@lang('boilerplate::avatar.upload.success')",
|
||||
error: "@lang('boilerplate::avatar.upload.error')",
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script src="{{ mix('/avatar.min.js', '/assets/vendor/boilerplate') }}"></script>
|
||||
@endpush
|
||||
Reference in New Issue
Block a user