fix: 🐛 makes functional change order method on models who own order field

This commit is contained in:
Alexis Gousseau 2025-05-20 14:34:57 +02:00
parent eb642c85eb
commit ec031ec3ec
41 changed files with 1150 additions and 1032 deletions

View file

@ -6,19 +6,19 @@ use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\AppUser\StoreAppUserRequest;
use App\Http\Requests\Bo\AppUser\UpdateAppUserRequest;
use App\Http\Requests\Bo\ImportRequest;
use App\Http\Requests\Bo\UpdateChangeOrderRequest;
use App\Imports\AppUserImport;
use App\Models\AppUser;
use App\Models\Directory;
use App\Traits\Controllers\ChangesModelOrder;
use Illuminate\Http\Request;
use Illuminate\Support\Arr;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use Maatwebsite\Excel\Facades\Excel;
class AppUserController extends Controller
{
use ChangesModelOrder;
/**
* Display a listing of the resource.
*
@ -40,7 +40,11 @@ class AppUserController extends Controller
'email'
);
}
$searchFields = trans('Nom, Prénom, Email');
$searchFields = \implode(', ', [
trans('validation.attributes.last_name'),
trans('validation.attributes.first_name'),
trans('validation.attributes.email'),
]);
/** Sort columns with a query */
$this->sortQuery($query);
@ -188,4 +192,61 @@ class AppUserController extends Controller
return redirect()->route('bo.app-users.index')->with('success', 'Import terminé.');
}
/**
* Change order.
*
* @param \App\Http\Requests\Bo\UpdateChangeOrderRequest $request
* @param mixed ...$params
* @return \Illuminate\Http\RedirectResponse
* @throws \RuntimeException Si le nom du parametre de la route ne correspond pas au params utilisé.
*/
public function changeOrder(UpdateChangeOrderRequest $request, mixed ...$params): \Illuminate\Http\RedirectResponse
{
$paramNames = collect(request()->route()->parameterNames);
$className = Str::of($paramNames->get($paramNames->count() - 2))->lower()->studly();
$className = "\\App\\Models\\AppUser";
$modelId = Arr::get($params, $paramNames->count() - 2);
$model = AppUser::find($modelId);
if (!class_exists($className)) {
throw new \RuntimeException("The {$className} class doesn't exist.");
}
if (!\is_object($model)) {
throw new \RuntimeException("The second last param isn't an object.");
}
if (get_class($model) !== (string) Str::of($className)->replaceStart('\\', '')) {
throw new \RuntimeException("The {$className} doesn't match second last binded param.");
}
/** @var \Illuminate\Database\Eloquent\Model|null */
$model = $className::query()->where($model->getRouteKeyName(), $model->getRouteKey())->first();
if (!$model) {
return back()->with('error', trans('crud.messages.order_not_changed'));
}
return DB::transaction(function () use ($request, $className, $model) {
/** @var \Illuminate\Database\Eloquent\Model|null */
$tmp = $className::where('order', $request->direction ? '<' : '>', $model->getOriginal('order'))
->orderBy('order', $request->direction ? 'DESC' : 'ASC')->first();
if (!$tmp) {
return back()->with('error', trans('crud.messages.order_not_changed'));
}
$newOrder = $tmp->getOriginal('order');
// @phpstan-ignore property.notFound
$tmp->order = $model->getOriginal('order');
$tmp->saveQuietly();
// @phpstan-ignore property.notFound
$model->order = $newOrder;
$model->saveQuietly();
Session::flash('success', trans('crud.messages.order_changed'));
return back();
});
}
}

View file

@ -34,7 +34,11 @@ class ContactController extends Controller
'email',
);
}
$searchFields = \implode(',', [trans('Nom'), trans('Prénom'), trans('Email')]);
$searchFields = \implode(', ', [
trans('validation.attributes.last_name'),
trans('validation.attributes.email'),
trans('validation.attributes.phone'),
]);
/** Sort columns with a query */
$this->sortQuery($query);

View file

@ -45,7 +45,7 @@ class DocumentController extends Controller
'title',
);
}
$searchFields = trans('Titre');
$searchFields = trans('validation.attributes.title');
/** Search by tags */
$query->when($request->tag, function ($query) use ($request) {

View file

@ -36,7 +36,7 @@ class FormularyController extends Controller
'name',
);
}
$searchFields = trans('Nom');
$searchFields = trans('validation.attributes.name');
/** Sort columns with a query */
$this->sortQuery($query);

View file

@ -34,7 +34,7 @@ class TagController extends Controller
'name',
);
}
$searchFields = trans('Nom');
$searchFields = trans('validation.attributes.name');
/** Sort columns with a query */
$this->sortQuery($query);

View file

@ -0,0 +1,21 @@
<?php
namespace App\Policies;
use App\Enums\UserRolesEnum;
use App\Models\User;
use App\Policies\Rules\UserStaticRules;
class AppUserPolicy
{
/**
* Determine whether the user can publish/unpublish the model.
*
* @param \App\Models\User $authUser
* @return boolean
*/
public function changeOrder(User $authUser): bool
{
return UserStaticRules::atLeastRole($authUser, UserRolesEnum::admin);
}
}

View file

@ -0,0 +1,21 @@
<?php
namespace App\Policies;
use App\Enums\UserRolesEnum;
use App\Models\User;
use App\Policies\Rules\UserStaticRules;
class DocumentPolicy
{
/**
* Determine whether the user can publish/unpublish the model.
*
* @param \App\Models\User $authUser
* @return boolean
*/
public function changeOrder(User $authUser): bool
{
return UserStaticRules::atLeastRole($authUser, UserRolesEnum::admin);
}
}

View file

@ -0,0 +1,42 @@
<?php
use App\Models\AppUser;
use App\Models\Document;
use Illuminate\Database\Migrations\Migration;
return new class extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up(): void
{
AppUser::query()->get()->map(function (AppUser $appUser, int $key) {
$appUser->order = $key + 1;
$appUser->saveQuietly();
});
Document::query()->get()->map(function (Document $document, int $key) {
$document->order = $key + 1;
$document->saveQuietly();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down(): void
{
AppUser::query()->get()->map(function (AppUser $appUser) {
$appUser->order = 0;
$appUser->saveQuietly();
});
Document::query()->get()->map(function (Document $document) {
$document->order = 0;
$document->saveQuietly();
});
}
};

View file

@ -57,3 +57,7 @@
.table-col-sorter {
height: 3rem;
}
main {
min-height: calc(100vh - 56px - 40px);
}

View file

@ -7,24 +7,18 @@
<body>
@include('bo.layouts.header')
<main class="container-fluid @yield('bg-color') pt-3">
<div class="row justify-content-center">
<div class="col-12 col-md-6">
@include('modules.flash-message')
</div>
</div>
<div class="row justify-content-center">
<div class="col-12 col-md-10 col-lg-8">
@include('modules.breadcrumb.breadcrumb-body')
</div>
</div>
<div class="row p-md-3 justify-content-center">
<div class="col-12 col-md-10 col-lg-8 p-md-0 pt-3">
@yield('content')
</div>
</div>
<main class="container py-3">
{{-- Show a message when an action is performed --}}
@include('modules.flash-messages')
{{-- Main content --}}
@yield('content')
</main>
@stack('scriptsConstants')
<!-- Footer -->
@include('bo.layouts.footer')
<!-- Other -->
@include('modules.script-constants')
@vite(['resources/ts/bo/bo.ts'])
@stack('scripts')

View file

@ -0,0 +1,10 @@
<footer class="bg-body-tertiary px-0 text-center" id="footer">
<div class="p-2 text-center">
@if (isset($cpsr_name) && isset($cpsr_version))
<span class="text-reset">{{ $cpsr_name }}&nbsp;-&nbsp;{{ $cpsr_version }}</span>
<span>-</span>
@endif
<span class="text-reset fw-bold">{{ __('UWIL') }}</span>
© {{ date('Y') }}
</div>
</footer>

View file

@ -1,4 +1,4 @@
<nav class="navbar navbar-expand-lg bg-light text-bg-light shadow-sm">
<nav class="navbar navbar-expand-xl bg-light text-bg-light shadow-sm">
<div class="container">
<a class="navbar-brand rounded py-1" href="{{ url('/') }}">
{{ config('app.name', 'Laravel') }}

View file

@ -8,7 +8,7 @@
</li>
<li class="nav-item">
<a class="nav-link @if (request()->routeIs('bo.app-users.*')) active @endif" data-bs-toggle="tooltip"
href="{{ route('bo.app-users.index') }}?rst=1" title="{{ __('Liste des :model', ['model' => __('models.classes.users')]) }}">
href="{{ route('bo.app-users.index') }}" title="{{ __('Liste des :model', ['model' => __('models.classes.users')]) }}">
{{ __(':model', ['model' => __('models.classes.users')]) }}
</a>
</li>

View file

@ -1,87 +1,70 @@
<div class="table-responsive">
<table class="table fix-action">
<thead>
@php
$cols = ['lastname' => __('Nom'), 'firstname' => __('Prénom'), 'email' => __('Email'), 'order' => __('Order')];
@endphp
@include('bo.modules.table-col-sorter', [
'cols' => $cols,
'cols' => [
'lastname' => __('Nom'),
'firstname' => __('Prénom'),
'email' => __('Email'),
'order' => __('Order')
],
'mobileHide' => [],
])
</thead>
<tbody>
@if ($app_users->count())
@foreach ($app_users as $app_usersModel)
<tr>
<td>
<span>{{ $app_usersModel->lastname }}</span>
</td>
<td class="text-center">
<span>{{ $app_usersModel->firstname }}</span>
</td>
<td class="text-center">
<span>{{ $app_usersModel->email }}</span>
</td>
@php $routeName = request()->route()->getName(); @endphp
@if(empty(request()->search) && Session::get("$routeName.sort_col") === "order")
<td class="align-middle d-flex justify-content-center align-items-center">
<form action="{{ route('bo.app-users.change-order', ['appuser' => $app_usersModel, 'action' => 'up']) }}"
method="POST"
class="text-center @if($loop->first and $app_users->onFirstPage()) invisible @endif">
@csrf
<button type="submit"
class="btn btn-sm btn-outline-dark @if(($loop->first and $app_users->onFirstPage())) disabled @endif"
title="{{ __('Modifier l\'ordre d\'apparition vers le haut') }}"
data-bs-toggle="tooltip">
<i class="fas fa-arrow-up"></i>
</button>
</form>
<form action="{{ route('bo.app-users.change-order', ['appuser' => $app_usersModel, 'action' => 'down']) }}"
method="POST"
class="text-center @if($loop->last and $app_users->currentPage() === $app_users->lastPage()) invisible @endif">
@csrf
<button type="submit"
class="btn btn-sm btn-outline-dark ms-1 @if($loop->last and $app_users->currentPage() === $app_users->lastPage()) disabled @endif"
title="{{ __('Modifier l\'ordre d\'apparition vers le bas') }}"
data-bs-toggle="tooltip">
<i class="fas fa-arrow-down"></i>
</button>
</form>
</td>
@endif
<td>
<div class="btn-group">
<form action="{{ route('bo.app-users.destroy', $app_usersModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a id="formSubmitClone"
href="{{ route('bo.app-users.edit', $app_usersModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier l\':model', ['model' => Str::singular(__('models.classes.users'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
<button class="btn btn-sm btn-danger"
title="{{ __('Supprimer l\':model', ['model' => Str::singular(__('models.classes.users'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
@foreach ($app_users as $app_usersModel)
<tr>
<td>
<span>{{ $app_usersModel->lastname }}</span>
</td>
<td class="text-center">
<span>{{ $app_usersModel->firstname }}</span>
</td>
<td class="text-center">
<span>{{ $app_usersModel->email }}</span>
</td>
@php $routeName = request()->route()->getName(); @endphp
@if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order')
@include('bo.modules.change-model-order', [
'routeName' => 'appUsers',
'models' => $app_users,
'model' => $app_usersModel,
])
@endif
<td>
<div class="btn-group">
<form action="{{ route('bo.app-users.destroy', $app_usersModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a id="formSubmitClone"
href="{{ route('bo.app-users.edit', $app_usersModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier l\':model', ['model' => Str::singular(__('models.classes.users'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
<button class="btn btn-sm btn-danger"
title="{{ __('Supprimer l\':model', ['model' => Str::singular(__('models.classes.users'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</form>
</div>
</td>
</tr>
@endforeach
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.users')]) }}
</span>
</td>
</tr>
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.users')]) }}
</span>
</td>
</tr>
@endif
</tbody>
</table>

View file

@ -6,48 +6,48 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.app_users') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex align-items-center">
<form class="input-group"
action="{{ route('bo.app-users.import') }}"
method="POST"
enctype="multipart/form-data">
<input class="form-control" type="file" name="import" accept="text/csv,.csv"
title="{{ __('Sélectionner un fichier .csv') }}"
data-bs-toggle="tooltip" required>
@csrf
<button type="submit" class="btn btn-primary"
title="{{ __('Importer le fichier .csv') }}"
data-bs-toggle="tooltip">
{{ __('Importer') }}
</button>
</form>
<div class="ms-1 justify-content-end">
<a href="{{ route('bo.app-users.create') }}"
class="btn btn-primary"
title="{{ __('Créer un(e) :model', ['model' => Str::singular(__('models.classes.app_users'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.app_users') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex align-items-center">
<form class="input-group"
action="{{ route('bo.app-users.import') }}"
method="POST"
enctype="multipart/form-data">
<input class="form-control" type="file" name="import" accept="text/csv,.csv"
title="{{ __('Sélectionner un fichier .csv') }}"
data-bs-toggle="tooltip" required>
@csrf
<button type="submit" class="btn btn-primary"
title="{{ __('Importer le fichier .csv') }}"
data-bs-toggle="tooltip">
{{ __('Importer') }}
</button>
</form>
<div class="ms-1 justify-content-end">
<a href="{{ route('bo.app-users.create') }}"
class="btn btn-primary"
title="{{ __('Créer un(e) :model', ['model' => Str::singular(__('models.classes.app_users'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.app-users.index-list')
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.app-users.index-list')
</div>
</div>
{{ $app_users->withQueryString()->onEachSide(1)->links() }}
</div>
{{ $app_users->withQueryString()->onEachSide(1)->links() }}
</div>
</div>
@endsection

View file

@ -1,17 +1,14 @@
<div class="table-responsive">
<table class="fix-action table">
<thead>
@php
$cols = [
@include('bo.modules.table-col-sorter', [
'cols' => [
'lastname' => __('Nom'),
'email' => __('Email'),
'phone' => __('Téléphone'),
'app_user_id' => __('Commercial'),
'updated_at' => __('Mis à jour'),
];
@endphp
@include('bo.modules.table-col-sorter', [
'cols' => $cols,
],
'mobileHide' => [],
])
</thead>

View file

@ -3,8 +3,7 @@
@section('title', sprintf('%s - %s', __('models.classes.contacts'), Str::ucfirst(__('liste'))))
@section('description', __('Page de contôle sur tous les contacts de l\'application.'))
@section('breadcrumb',
request()->route()->getName())
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">

View file

@ -3,8 +3,7 @@
@section('title', sprintf('%s - %s', __('models.classes.contacts'), Str::ucfirst(__('liste'))))
@section('description', __('Page de contôle sur tous les contacts de l\'application.'))
@section('breadcrumb',
request()->route()->getName())
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">

View file

@ -6,60 +6,60 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.directories.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.directories')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.directories')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<form action="{{ route('bo.directories.destroy', $directoryModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('POST')
@csrf
<div class="btn-group" role="group">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le :model', ['model' => Str::singular(__('models.classes.directories'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="btn btn-danger"
title="{{ __('Supprimer le :model', ['model' => Str::singular(__('models.classes.directories'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</div>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.directories.update', $directoryModel->id) }}" method="POST">
@csrf
@method('PUT')
@include('bo.pages.directories.form', ['model' => $directoryModel])
<div class="card">
<div class="card-header">
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder :model', ['model' => Str::singular(__('models.classes.directories'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.directories.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.directories')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.directories')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<form action="{{ route('bo.directories.destroy', $directoryModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('POST')
@csrf
<div class="btn-group" role="group">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le :model', ['model' => Str::singular(__('models.classes.directories'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="btn btn-danger"
title="{{ __('Supprimer le :model', ['model' => Str::singular(__('models.classes.directories'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</div>
</form>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.directories.update', $directoryModel->id) }}" method="POST">
@csrf
@method('PUT')
@include('bo.pages.directories.form', ['model' => $directoryModel])
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder :model', ['model' => Str::singular(__('models.classes.directories'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View file

@ -6,51 +6,51 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.directories') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<form action="{{ route('bo.directories.store') }}"
class="pb-3 mb-3 border-bottom"
method="POST">
@csrf
<div class="col-12 input-group">
<input
id="directoryName"
class="form-control @error('name.fr') is-invalid @enderror"
name="name[fr]"
placeholder="{{ __('Ajouter un dossier (nom en français)') }}">
<button
class="btn btn-primary"
title="Ajouter un nouveau nom de dossier unique en français à la liste"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</button>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.directories') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<form action="{{ route('bo.directories.store') }}"
class="pb-3 mb-3 border-bottom"
method="POST">
@csrf
<div class="col-12 input-group">
<input
id="directoryName"
class="form-control @error('name.fr') is-invalid @enderror"
name="name[fr]"
placeholder="{{ __('Ajouter un dossier (nom en français)') }}">
<button
class="btn btn-primary"
title="Ajouter un nouveau nom de dossier unique en français à la liste"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</button>
</div>
@include('modules.input-error', [
'inputName' => "name.fr",
'helperId' => 'directoryNameHelp',
'helper' => __('Doit posséder 3 caractères minimum, 255 maximum.'),
])
</form>
<div class="col">
@php
$data = [
'id' => 'system',
'directories' => $directories
]
@endphp
<div id="directories" data-json='@json($data)'></div>
</div>
@include('modules.input-error', [
'inputName' => "name.fr",
'helperId' => 'directoryNameHelp',
'helper' => __('Doit posséder 3 caractères minimum, 255 maximum.'),
])
</form>
<div class="col">
@php
$data = [
'id' => 'system',
'directories' => $directories
]
@endphp
<div id="directories" data-json='@json($data)'></div>
</div>
</div>
</div>
</div>
@endsection

View file

@ -6,68 +6,68 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.documents.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.documents')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.documents')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<form action="{{ route('bo.documents.destroy', $documentModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a href="{{ asset("storage/docs/" . $documentModel->uuid . "." . $documentModel->type->value()) }}"
target="blank"
class="btn btn-warning"
role="button"
title="{{ __('Visualiser le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-eye"></i>
</a>
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="btn btn-danger"
title="{{ __('Supprimer le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</div>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.documents.update', $documentModel->id) }}" method="POST">
@csrf
@method('PUT')
@include('bo.pages.documents.form', ['model' => $documentModel])
<div class="card">
<div class="card-header">
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.documents.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.documents')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.documents')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<form action="{{ route('bo.documents.destroy', $documentModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a href="{{ asset("storage/docs/" . $documentModel->uuid . "." . $documentModel->type->value()) }}"
target="blank"
class="btn btn-warning"
role="button"
title="{{ __('Visualiser le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-eye"></i>
</a>
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="btn btn-danger"
title="{{ __('Supprimer le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</div>
</form>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.documents.update', $documentModel->id) }}" method="POST">
@csrf
@method('PUT')
@include('bo.pages.documents.form', ['model' => $documentModel])
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View file

@ -1,122 +1,106 @@
<div class="table-responsive">
<table class="table fix-action">
<thead>
@php
$cols = ['title' => __('Title'), 'directory_id' => __('Dossier'), 'document_id' => __('Document'), 'type' => __('Type'), 'order' => __('Order')];
@endphp
@include('bo.modules.table-col-sorter', [
'cols' => $cols,
'cols' => [
'title' => __('Title'),
'directory_id' => __('Dossier'),
'document_id' => __('Document'),
'type' => __('Type'),
'order' => __('Order')
],
'mobileHide' => []
])
</thead>
<tbody>
@if ($documents->count())
@foreach ($documents as $documentModel)
<tr>
<td class="align-middle">
<span>{{ $documentModel->title }}</span>
</td>
<td class="text-center align-middle">
@if(isset($documentModel->directory->is_system) && !$documentModel->directory->is_system)
<a href="{{ route('bo.directories.edit', ['directory' => $documentModel->directory_id]) }}">
<button class="btn btn-sm btn-outline-dark"
title="{{ __('Accéder au dossier associé') }}"
data-bs-toggle="tooltip">
{{ $documentModel->directory->name['fr'] }}
</button>
</a>
@endif
</td>
<td class="text-center align-middle">
@if(!is_null($documentModel->document_id))
<a href="{{ route('bo.documents.edit', ['document' => $documentModel->document_id]) }}">
<button class="btn btn-sm btn-outline-dark"
title="{{ __('Accéder au document associé') }}"
data-bs-toggle="tooltip">
{{ $documentModel->parentDocument->title }}
</button>
</a>
@endif
</td>
<td class="text-center align-middle">
@foreach(\App\Enums\Documents\TypeEnum::cases() as $typeEnum)
@if ($documentModel->type->value() === $typeEnum->value)
<span class="px1"
title="{{ sprintf('Document de type .%s', $documentModel->type->name()) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-{{ $typeEnum->icon() }}"></i>
</span>
@foreach ($documents as $documentModel)
<tr>
<td class="align-middle">
<span>{{ $documentModel->title }}</span>
</td>
<td class="text-center align-middle">
@if(isset($documentModel->directory->is_system) && !$documentModel->directory->is_system)
<a href="{{ route('bo.directories.edit', ['directory' => $documentModel->directory_id]) }}">
<button class="btn btn-sm btn-outline-dark"
title="{{ __('Accéder au dossier associé') }}"
data-bs-toggle="tooltip">
{{ $documentModel->directory->name['fr'] }}
</button>
</a>
@endif
</td>
<td class="text-center align-middle">
@if(!is_null($documentModel->document_id))
<a href="{{ route('bo.documents.edit', ['document' => $documentModel->document_id]) }}">
<button class="btn btn-sm btn-outline-dark"
title="{{ __('Accéder au document associé') }}"
data-bs-toggle="tooltip">
{{ $documentModel->parentDocument->title }}
</button>
</a>
@endif
</td>
<td class="text-center align-middle">
@foreach(\App\Enums\Documents\TypeEnum::cases() as $typeEnum)
@if ($documentModel->type->value() === $typeEnum->value)
<span class="px1"
title="{{ sprintf('Document de type .%s', $documentModel->type->name()) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-{{ $typeEnum->icon() }}"></i>
</span>
@endif
@endforeach
</td>
@php $routeName = request()->route()->getName(); @endphp
@if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order')
@include('bo.modules.change-model-order', [
'routeName' => 'documents',
'models' => $documents,
'model' => $documentModel,
])
@endif
@endforeach
</td>
@php $routeName = request()->route()->getName(); @endphp
@if(empty(request()->search) && Session::get("$routeName.sort_col") === "order")
<td class="align-middle d-flex justify-content-center align-items-center">
<form action="{{ route('bo.documents.change-order', ['document' => $documentModel, 'action' => 'up']) }}"
method="POST"
class="text-center @if($loop->first and $documents->onFirstPage()) invisible @endif">
@csrf
<button type="submit"
class="btn btn-sm btn-outline-dark @if(($loop->first and $documents->onFirstPage())) disabled @endif"
title="{{ __('Modifier l\'ordre d\'apparition vers le haut') }}"
data-bs-toggle="tooltip">
<i class="fas fa-arrow-up"></i>
</button>
</form>
<form action="{{ route('bo.documents.change-order', ['document' => $documentModel, 'action' => 'down']) }}"
method="POST"
class="text-center @if($loop->last and $documents->currentPage() === $documents->lastPage()) invisible @endif">
@csrf
<button type="submit"
class="btn btn-sm btn-outline-dark ms-1 @if($loop->last and $documents->currentPage() === $documents->lastPage()) disabled @endif"
title="{{ __('Modifier l\'ordre d\'apparition vers le bas') }}"
data-bs-toggle="tooltip">
<i class="fas fa-arrow-down"></i>
</button>
</form>
</td>
@endif
<td>
<div class="btn-group">
<form action="{{ route('bo.documents.destroy', $documentModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a href="{{ asset("storage/docs/" . $documentModel->uuid . "." . $documentModel->type->name()) }}"
target="blank"
class="btn btn-sm btn-warning"
role="button"
title="{{ __('Visualiser le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-eye"></i>
</a>
<a id="formSubmitClone"
href="{{ route('bo.documents.edit', $documentModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
<button class="btn btn-sm btn-danger"
title="{{ __('Supprimer le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
<td>
<div class="btn-group">
<form action="{{ route('bo.documents.destroy', $documentModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a href="{{ asset("storage/docs/" . $documentModel->uuid . "." . $documentModel->type->name()) }}"
target="blank"
class="btn btn-sm btn-warning"
role="button"
title="{{ __('Visualiser le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-eye"></i>
</a>
<a id="formSubmitClone"
href="{{ route('bo.documents.edit', $documentModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
<button class="btn btn-sm btn-danger"
title="{{ __('Supprimer le :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</form>
</div>
</td>
</tr>
@endforeach
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.documents')]) }}
</span>
</td>
</tr>
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.documents')]) }}
</span>
</td>
</tr>
@endif
</tbody>
</table>

View file

@ -6,34 +6,34 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.documents') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex justify-content-end align-items-center">
<div class="ms-1 justify-content-end">
<a href="{{ route('bo.documents.create') }}"
class="btn btn-primary"
title="{{ __('Créer un(e) :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.documents') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex justify-content-end align-items-center">
<div class="ms-1 justify-content-end">
<a href="{{ route('bo.documents.create') }}"
class="btn btn-primary"
title="{{ __('Créer un(e) :model', ['model' => Str::singular(__('models.classes.documents'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.documents.index-list')
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.documents.index-list')
</div>
</div>
{{ $documents->withQueryString()->onEachSide(1)->links() }}
</div>
{{ $documents->withQueryString()->onEachSide(1)->links() }}
</div>
</div>
@endsection

View file

@ -6,48 +6,48 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.formularies.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.formularies')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('création')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
</div>
</div>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.formularies.store') }}" method="POST">
@csrf
@include('bo.pages.formularies.form')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.formularies.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.formularies')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('création')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
<i class="fa-solid fa-floppy-disk"></i>
</button>
</div>
</div>
</form>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.formularies.store') }}" method="POST">
@csrf
@include('bo.pages.formularies.form')
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder le champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View file

@ -1,11 +1,9 @@
@extends('bo.layout', ['brParam' => $formularyModel])
@section('title', sprintf('%s - %s %s', Str::singular(__('models.classes.formularies')), Str::ucfirst(__('édition')),
$formularyModel->lastname))
@section('title', sprintf('%s - %s %s', Str::singular(__('models.classes.formularies')), Str::ucfirst(__('édition')), $formularyModel->lastname))
@section('description', __('Page d\'édition d\'un nouveau champs poour le formulaire de contact.'))
@section('breadcrumb',
request()->route()->getName())
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">

View file

@ -66,27 +66,27 @@
title="{{ __('Supprimer le champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</div>
</form>
@endif
</div>
@endif
</div>
@else
<span data-bs-toggle="tooltip" data-bs-placement="top"
title="{{ __('Ce champs est obligatoire, seul son ordre est éditable') }}">
<i class="fas fa-lock"></i>
</span>
<span data-bs-toggle="tooltip" data-bs-placement="top"
title="{{ __('Ce champs est obligatoire, seul son ordre est éditable') }}">
<i class="fas fa-lock"></i>
</span>
@endif
</td>
</tr>
@endforeach
@else
<tr>
<td class="text-center" colspan="{{ count($cols) + 1 }}">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.users')]) }}
</span>
</td>
</tr>
<tr>
<td class="text-center" colspan="{{ count($cols) + 1 }}">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.users')]) }}
</span>
</td>
</tr>
@endif
</tbody>
</table>

View file

@ -6,32 +6,32 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ Str::singular(__('models.classes.formularies')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex justify-content-end align-items-center">
<a href="{{ route('bo.formularies.create') }}"
class="btn btn-primary"
title="{{ __('Créer un champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ Str::singular(__('models.classes.formularies')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex justify-content-end align-items-center">
<a href="{{ route('bo.formularies.create') }}"
class="btn btn-primary"
title="{{ __('Créer un champs du :model', ['model' => Str::singular(__('models.classes.formularies'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
</div>
</div>
</div>
</div>
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.formularies.index-list')
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.formularies.index-list')
</div>
</div>
{{ $formulariesModel->withQueryString()->onEachSide(1)->links() }}
</div>
{{ $formulariesModel->withQueryString()->onEachSide(1)->links() }}
</div>
</div>
@endsection

View file

@ -6,51 +6,51 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.settings.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.settings')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.settings')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<div class="btn-group" role="group">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le :model', ['model' => Str::singular(__('models.classes.settings'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.settings.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.settings')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.settings')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<div class="btn-group" role="group">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder le :model', ['model' => Str::singular(__('models.classes.settings'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
</div>
</div>
</div>
</div>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.settings.update', $settingModel->id) }}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
@include('bo.pages.settings.form', ['model' => $settingModel])
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder :model', ['model' => Str::singular(__('models.classes.settings'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
<div class="card-body bg-light">
<form action="{{ route('bo.settings.update', $settingModel->id) }}" method="POST" enctype="multipart/form-data">
@csrf
@method('PUT')
@include('bo.pages.settings.form', ['model' => $settingModel])
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder :model', ['model' => Str::singular(__('models.classes.settings'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
</div>
</div>
</div>
</form>
</form>
</div>
</div>
</div>
@endsection

View file

@ -1,186 +1,186 @@
<input name="key" value="{{ $settingModel->key }}" class="d-none">
@switch($settingModel->type)
@case(\App\Enums\SettingTypesEnum::string)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.varchar', [
'id' => 'setting' . $settingModel->key,
'label' => __('Texte du :model', ['model' => Str::singular(__('models.classes.settings'))]),
'hasWordCounter' => true,
'name' => 'value',
'required' => true,
'model' => $settingModel ?? null,
'helper' => __('Doit posséder 3 caractères minimum, 255 maximum.'),
'placeholder' => "Un beau texte"
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::json)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.text', [
'id' => 'setting' . $settingModel->key,
'label' => __('Texte du :model', ['model' => Str::singular(__('models.classes.settings'))]),
'hasWordCounter' => true,
'name' => 'value',
'required' => true,
'model' => $settingModel ?? null,
'helper' => __('Doit posséder 3 caractères minimum, 255 maximum.'),
'placeholder' => "Un beau texte"
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::numeric)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.int-number', [
'id' => $settingModel->key,
'name' => 'value',
'label' => __('Nombre du :model', ['model' => Str::singular(__('models.classes.settings'))]),
'model' => $settingModel ?? null,
'min' => 1,
'helper' => __('Doit être un nombre (minimum 1).'),
'required' => true,
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::boolean)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.boolean-switch', [
'id' => $settingModel->key,
'name' => 'value',
'label' => __('Activer ce paramètre ?'),
'model' => $settingModel ?? null,
'value' => ($settingModel->value === "true") ? 1 : 0,
'helper' => __('Une fois coché, ce paramètre sera activé.')
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::picture)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@php
if($settingModel->key === "SquaredLogo") {
$dimWidth = 187;
$dimHeight = 187;
} elseif ($settingModel->key === "RectangleLogo") {
$dimWidth = 187;
$dimHeight = 100;
} elseif ($settingModel->key === "BackgroundImage") {
$dimWidth = 1920;
$dimHeight = 1200;
} elseif ($settingModel->key === "HomeButtonImage") {
$dimWidth = 100;
$dimHeight = 100;
}
$data = [
'id' => 'setting' . $settingModel->key,
'name' => 'value',
'helper' => __('L\'image qui va servir de vignette au produit, doit être de :widthpx (largeur) par :heightpx (hauteur)',
[
'width' => $dimWidth,
'height' => $dimHeight
]),
'width' => $dimWidth,
'height' => $dimHeight,
'value' => $settingModel->value ?? '',
];
@endphp
@include('modules.input-error', ['inputName' => 'value'])
<div class="image-input" data-json='@json($data)'></div>
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::color)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
@include('bo.partials.inputs.color-picker', [
'id' => $settingModel->key,
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.varchar', [
'id' => 'setting' . $settingModel->key,
'label' => __('Texte du :model', ['model' => Str::singular(__('models.classes.settings'))]),
'hasWordCounter' => true,
'name' => 'value',
'label' => __('Couleur du paramètre'),
'title' => __('Choisissez la couleur du paramètre'),
'model' => $settingModel,
'rgbaMode' => false,
'helper' => __('Doit être une couleur sous le format hexadécimal.'),
'nullable' => false,
'disabled' => false
'required' => true,
'model' => $settingModel ?? null,
'helper' => __('Doit posséder 3 caractères minimum, 255 maximum.'),
'placeholder' => "Un beau texte"
])
</div>
</div>
</div>
</fieldset>
</fieldset>
</div>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::directory)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
@include('bo.partials.inputs.bigint-foreign-id', [
@case(\App\Enums\SettingTypesEnum::json)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.text', [
'id' => 'setting' . $settingModel->key,
'label' => __('Texte du :model', ['model' => Str::singular(__('models.classes.settings'))]),
'hasWordCounter' => true,
'name' => 'value',
'required' => true,
'model' => $settingModel ?? null,
'helper' => __('Doit posséder 3 caractères minimum, 255 maximum.'),
'placeholder' => "Un beau texte"
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::numeric)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.int-number', [
'id' => $settingModel->key,
'name' => 'value',
'label' => __('Model à associer'),
'model' => $settingModel,
'associatedModels' => $directories,
'foreignLabel' => 'name',
'helper' => __('Doit être une couleur sous le format hexadécimal.'),
'label' => __('Nombre du :model', ['model' => Str::singular(__('models.classes.settings'))]),
'model' => $settingModel ?? null,
'min' => 1,
'helper' => __('Doit être un nombre (minimum 1).'),
'required' => true,
])
</div>
</div>
</div>
</fieldset>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::boolean)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@include('bo.partials.inputs.boolean-switch', [
'id' => $settingModel->key,
'name' => 'value',
'label' => __('Activer ce paramètre ?'),
'model' => $settingModel ?? null,
'value' => ($settingModel->value === "true") ? 1 : 0,
'helper' => __('Une fois coché, ce paramètre sera activé.')
])
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::picture)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12">
@php
if($settingModel->key === "SquaredLogo") {
$dimWidth = 187;
$dimHeight = 187;
} elseif ($settingModel->key === "RectangleLogo") {
$dimWidth = 187;
$dimHeight = 100;
} elseif ($settingModel->key === "BackgroundImage") {
$dimWidth = 1920;
$dimHeight = 1200;
} elseif ($settingModel->key === "HomeButtonImage") {
$dimWidth = 100;
$dimHeight = 100;
}
$data = [
'id' => 'setting' . $settingModel->key,
'name' => 'value',
'helper' => __('L\'image qui va servir de vignette au produit, doit être de :widthpx (largeur) par :heightpx (hauteur)',
[
'width' => $dimWidth,
'height' => $dimHeight
]),
'width' => $dimWidth,
'height' => $dimHeight,
'value' => $settingModel->value ?? '',
];
@endphp
@include('modules.input-error', ['inputName' => 'value'])
<div class="image-input" data-json='@json($data)'></div>
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::color)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
@include('bo.partials.inputs.color-picker', [
'id' => $settingModel->key,
'name' => 'value',
'label' => __('Couleur du paramètre'),
'title' => __('Choisissez la couleur du paramètre'),
'model' => $settingModel,
'rgbaMode' => false,
'helper' => __('Doit être une couleur sous le format hexadécimal.'),
'nullable' => false,
'disabled' => false
])
</div>
</div>
</div>
</fieldset>
</div>
</div>
@break
@case(\App\Enums\SettingTypesEnum::directory)
<div class="row">
<div class="col">
<fieldset class="border bg-white p-3 mb-3">
<legend>{{ $settingModel->key }}</legend>
<div class="row">
<div class="col-12 col-md-6 mb-3">
<div class="form-group">
@include('bo.partials.inputs.bigint-foreign-id', [
'id' => $settingModel->key,
'name' => 'value',
'label' => __('Model à associer'),
'model' => $settingModel,
'associatedModels' => $directories,
'foreignLabel' => 'name',
'helper' => __('Doit être une couleur sous le format hexadécimal.'),
'required' => true,
])
</div>
</div>
</div>
</fieldset>
</div>
</div>
</div>
@break
@endswitch

View file

@ -6,99 +6,98 @@
$routeName = request()->route()->getName();
$noOrder = Session::get("$routeName.sort_col") !== 'order' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way"));
$noOrder = Session::get("$routeName.sort_col") !== '' and (Session::has("$routeName.sort_col") or Session::has("$routeName.sort_way"));
$cols = ['key' => __('Clé'), 'value' => __('Valeur')];
@endphp
@include('bo.modules.table-col-sorter', [
'cols' => $cols,
'cols' => ['key' => __('Clé'), 'value' => __('Valeur')],
'mobileHide' => [],
])
</thead>
<tbody>
@if ($settings->count())
@foreach ($settings as $settingModel)
@if (
Auth::user()->role === 1 ||
$settingModel->key === "Button1" ||
$settingModel->key === "Button2" ||
$settingModel->key === "Button3" ||
$settingModel->key === "ShowIsActive"
)
<tr>
<td class="align-middle">
<span>{{ $settingModel->key }}</span>
</td>
<td class="align-middle">
@switch($settingModel->type)
@case(\App\Enums\SettingTypesEnum::string)
<p class="m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::json)
<p class="text-ellipsis m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::numeric)
<p class="m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::boolean)
<p class="m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::picture)
<img class="preview-image-index" src="{{ asset($settingModel->value) }}" alt="" title="">
@break
@case(\App\Enums\SettingTypesEnum::color)
@include('bo.partials.inputs.color-picker', [
'id' => 'settingColor',
'name' => 'value',
'label' => __('Couleur du paramètre'),
'title' => __('Choisissez la couleur du paramètre'),
'model' => $settingModel,
'rgbaMode' => true,
'nullable' => false,
'simple' => true,
'disabled' => true
])
@break
@case(\App\Enums\SettingTypesEnum::directory)
@if ($settingModel->value != null)
<a href="{{ route('bo.directories.edit', ['directory' => $settingModel->value]) }}">
<button class="btn btn-sm btn-outline-dark"
title="{{ __('Accéder au dossier associé') }}"
data-bs-toggle="tooltip">
@foreach ($directories as $directory)
@if ($directory->id == $settingModel->value)
{{ $directory->name }}
@endif
@endforeach
</button>
</a>
@else
<p class="text-muted m-0">{{ __('Aucun dossier associé') }}</p>
@foreach ($settings as $settingModel)
@if (
Auth::user()->role === 1 ||
$settingModel->key === "Button1" ||
$settingModel->key === "Button2" ||
$settingModel->key === "Button3" ||
$settingModel->key === "ShowIsActive"
)
<tr>
<td class="align-middle">
<span>{{ $settingModel->key }}</span>
</td>
<td class="align-middle">
@switch($settingModel->type)
@case(\App\Enums\SettingTypesEnum::string)
<p class="m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::json)
<p class="text-ellipsis m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::numeric)
<p class="m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::boolean)
<p class="m-0">{{ $settingModel->value }}</p>
@break
@case(\App\Enums\SettingTypesEnum::picture)
<img class="preview-image-index" src="{{ asset($settingModel->value) }}" alt="" title="">
@break
@case(\App\Enums\SettingTypesEnum::color)
@include('bo.partials.inputs.color-picker', [
'id' => 'settingColor',
'name' => 'value',
'label' => __('Couleur du paramètre'),
'title' => __('Choisissez la couleur du paramètre'),
'model' => $settingModel,
'rgbaMode' => true,
'nullable' => false,
'simple' => true,
'disabled' => true
])
@break
@case(\App\Enums\SettingTypesEnum::directory)
@if ($settingModel->value != null)
<a href="{{ route('bo.directories.edit', ['directory' => $settingModel->value]) }}">
<button class="btn btn-sm btn-outline-dark"
title="{{ __('Accéder au dossier associé') }}"
data-bs-toggle="tooltip">
@foreach ($directories as $directory)
@if ($directory->id == $settingModel->value)
{{ $directory->name }}
@endif
@endforeach
</button>
</a>
@else
<p class="text-muted m-0">{{ __('Aucun dossier associé') }}</p>
@endif
@break
@endswitch
</td>
<td class="align-middle">
<div class="btn-group" role="group">
<a id="formSubmitClone"
href="{{ route('bo.settings.edit', $settingModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier le :model', ['model' => Str::singular(__('models.classes.settings'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
</div>
</td>
</tr>
@endif
@break
@endswitch
</td>
<td class="align-middle">
<div class="btn-group" role="group">
<a id="formSubmitClone"
href="{{ route('bo.settings.edit', $settingModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier le :model', ['model' => Str::singular(__('models.classes.settings'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
</div>
</td>
</tr>
@endif
@endforeach
@endforeach
@else
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.settings')]) }}
</span>
</td>
</tr>
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.settings')]) }}
</span>
</td>
</tr>
@endif
</tbody>
</table>

View file

@ -6,22 +6,22 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.settings') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.settings') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col">
@include('bo.pages.settings.index-list')
</div>
</div>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="col">
@include('bo.pages.settings.index-list')
</div>
</div>
</div>
</div>
@endsection

View file

@ -6,48 +6,48 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.tags.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.tags')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.tags')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('création')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
</div>
</div>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.tags.store') }}" method="POST">
@csrf
@include('bo.pages.tags.form')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.tags.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.tags')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.tags')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('création')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
<i class="fa-solid fa-floppy-disk"></i>
</button>
</div>
</div>
</form>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.tags.store') }}" method="POST">
@csrf
@include('bo.pages.tags.form')
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View file

@ -6,60 +6,60 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.tags.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.tags')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.tags')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<form action="{{ route('bo.tags.destroy', $tagModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="btn btn-danger"
title="{{ __('Supprimer l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</div>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.tags.update', $tagModel->id) }}" method="POST">
@csrf
@method('PUT')
@include('bo.pages.tags.form', ['model' => $tagModel])
<div class="card">
<div class="card-header">
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
<div class="col">
<h1 class="text-center text-md-start h2">
<a href="{{ route('bo.tags.index') }}"
class="btn btn-primary text-decoration-none m-0"
data-bs="tooltip"
data-bs-placement="top"
title="{{ __('Retourner sur la liste des :model', ['model' => __('models.classes.tags')]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-arrow-left"></i>
</a>
<span class="fw-bold">{{ Str::singular(__('models.classes.tags')) }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('édition')) }}</small>
</h1>
</div>
<div class="col-12 col-md-4 d-flex justify-content-center justify-content-md-end align-items-center">
<form action="{{ route('bo.tags.destroy', $tagModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<button id="formSubmitClone"
class="btn btn-primary pull-end"
title="{{ __('Sauvegarder l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-floppy-disk"></i>
</button>
<button class="btn btn-danger"
title="{{ __('Supprimer l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</div>
</form>
</div>
<div class="card-body bg-light">
<form action="{{ route('bo.tags.update', $tagModel->id) }}" method="POST">
@csrf
@method('PUT')
@include('bo.pages.tags.form', ['model' => $tagModel])
<div class="row">
<div class="col text-center">
<button id="formSubmit"
type="submit"
class="btn btn-primary"
title="{{ __('Sauvegarder l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
{{ __('Sauvegarder') }}
</button>
</div>
</div>
</form>
</div>
</div>
</div>
@endsection

View file

@ -8,52 +8,52 @@
</thead>
<tbody>
@if ($tags->count())
@foreach ($tags as $tagModel)
<tr>
<td class="align-middle">
<span>{{ $tagModel->name }}</span>
</td>
@php $routeName = request()->route()->getName(); @endphp
@if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order')
@include('bo.modules.change-model-order', [
'routeName' => 'tags',
'models' => $tags,
'model' => $tagModel,
])
@endif
<td>
<div class="btn-group">
<form action="{{ route('bo.tags.destroy', $tagModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a id="formSubmitClone"
href="{{ route('bo.tags.edit', $tagModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
<button class="btn btn-sm btn-danger"
title="{{ __('Supprimer l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
@foreach ($tags as $tagModel)
<tr>
<td class="align-middle">
<span>{{ $tagModel->name }}</span>
</td>
@php $routeName = request()->route()->getName(); @endphp
@if (empty(request()->search) && Session::get("$routeName.sort_col") === 'order')
@include('bo.modules.change-model-order', [
'routeName' => 'tags',
'models' => $tags,
'model' => $tagModel,
])
@endif
<td>
<div class="btn-group">
<form action="{{ route('bo.tags.destroy', $tagModel->id) }}" method="POST" class="d-inline confirmDeleteJS">
@method('DELETE')
@csrf
<div class="btn-group" role="group">
<a id="formSubmitClone"
href="{{ route('bo.tags.edit', $tagModel) }}"
class="btn btn-sm btn-primary"
role="button"
title="{{ __('Modifier l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-pencil"></i>
</a>
<button class="btn btn-sm btn-danger"
title="{{ __('Supprimer l\':model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-trash"></i>
</button>
</div>
</form>
</div>
</form>
</div>
</td>
</tr>
@endforeach
</td>
</tr>
@endforeach
@else
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.tags')]) }}
</span>
</td>
</tr>
<tr>
<td colspan="{{ count($cols) + 1 }}" class="text-center">
<span class="h3">
{{ __('Aucun résultat pour les :models', ['models' => __('models.classes.tags')]) }}
</span>
</td>
</tr>
@endif
</tbody>
</table>

View file

@ -6,34 +6,34 @@
@section('breadcrumb', request()->route()->getName())
@section('content')
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.tags') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex justify-content-end align-items-center">
<div class="ms-1 justify-content-end">
<a href="{{ route('bo.tags.create') }}"
class="btn btn-primary"
title="{{ __('Créer une :model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
<div class="card">
<div class="card-header">
<div class="row">
<div class="col">
<h1 class="col h2">
<span class="fw-bold">{{ __('models.classes.tags') }}</span>&nbsp;<small class="text-muted">{{ Str::ucfirst(__('liste')) }}</small>
</h1>
</div>
<div class="col d-flex justify-content-end align-items-center">
<div class="ms-1 justify-content-end">
<a href="{{ route('bo.tags.create') }}"
class="btn btn-primary"
title="{{ __('Créer une :model', ['model' => Str::singular(__('models.classes.tags'))]) }}"
data-bs-toggle="tooltip">
<i class="fa-solid fa-plus"></i>
</a>
</div>
</div>
</div>
</div>
</div>
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.tags.index-list')
<div class="card-body">
@include('bo.modules.search-bar')
<div class="row mt-3">
<div class="col">
@include('bo.pages.tags.index-list')
</div>
</div>
{{ $tags->withQueryString()->onEachSide(1)->links() }}
</div>
{{ $tags->withQueryString()->onEachSide(1)->links() }}
</div>
</div>
@endsection

View file

@ -1,42 +0,0 @@
@if(!request()->routeIs('login'))
@if ($message = Session::get('success', Session::get('bo.success')))
<div class="alert alert-success alert-dismissible fade show m-0" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($message = Session::get('error', Session::get('bo.error')))
<div class="alert alert-danger alert-dismissible fade show m-0" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($message = Session::get('warning', Session::get('bo.warning')))
<div class="alert alert-warning alert-dismissible fade show m-0" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($message = Session::get('info', Session::get('bo.info')))
<div class="alert alert-info alert-dismissible fade show m-0" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($errors->any())
<div class="alert alert-danger alert-dismissible fade show m-0" role="alert">
@if ($errors->any())
<ul class="list-unstyled m-0">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@endif

View file

@ -0,0 +1,42 @@
@if (!request()->routeIs('login'))
@if ($message = Session::get('success', Session::get('bo.success')))
<div class="alert alert-success alert-dismissible fade show m-0 mb-3" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($message = Session::get('error', Session::get('bo.error')))
<div class="alert alert-danger alert-dismissible fade show m-0 mb-3" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($message = Session::get('warning', Session::get('bo.warning')))
<div class="alert alert-warning alert-dismissible fade show m-0 mb-3" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($message = Session::get('info', Session::get('bo.info')))
<div class="alert alert-info alert-dismissible fade show m-0 mb-3" role="alert">
<strong>{!! nl2br(e($message)) !!}</strong>
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@if ($errors->any())
<div class="alert alert-danger alert-dismissible fade show m-0 mb-3" role="alert">
@if ($errors->any())
<ul class="list-unstyled m-0">
@foreach ($errors->all() as $error)
<li>{{ $error }}</li>
@endforeach
</ul>
@endif
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="{{ __('Fermer') }}"></button>
</div>
@endif
@endif

View file

@ -1,8 +1,8 @@
@if($errors->has($inputName))
<div class="col-12">
<small class="text-danger">{{ implode(',', $errors->get($inputName)) }}</small>
</div>
<div class="col-12">
<small class="text-danger">{{ implode(',', $errors->get($inputName)) }}</small>
</div>
@endif
@if(isset($helper))
<small @if(isset($helperId)) id="{{ $helperId }}" @endif class="form-text text-muted">{{ $helper }}</small>
<small @if(isset($helperId)) id="{{ $helperId }}" @endif class="form-text text-muted">{{ $helper }}</small>
@endif

View file

@ -14,12 +14,12 @@ use Illuminate\Support\Facades\Route;
Route::prefix('bo')->name('bo.')->middleware(['admin-secure'])->group(function () {
Route::namespace('\App\Http\Controllers\Bo')->middleware(['throttle:credentials'])->group(function () {
Auth::routes([
'confirm' => false,
'login' => true,
'logout' => true,
'confirm' => false,
'login' => true,
'logout' => true,
'register' => false,
'reset' => false,
'verify' => false
'reset' => false,
'verify' => false
]);
});
@ -31,9 +31,10 @@ Route::prefix('bo')->name('bo.')->middleware(['admin-secure'])->group(function (
// * APP_USERS
Route::resource('app-users', AppUserController::class)->except('show');
Route::post('/app-users/{appuser}/change-order', [AppUserController::class, 'changeOrder'])
->name('app-users.change-order');
Route::post('/app-users/import', [AppUserController::class, 'import'])->name('app-users.import');
Route::patch('/appUsers/change-order/{appUser}/{direction}', [AppUserController::class, 'changeOrder'])
->where('direction', 'up|down')
->name('appUsers.change-order');
// * DIRECTORIES
Route::resource('directories', DirectoriesController::class)->except('show');
@ -44,11 +45,12 @@ Route::prefix('bo')->name('bo.')->middleware(['admin-secure'])->group(function (
// * DOCUMENTS
Route::resource('documents', DocumentController::class)->except('show');
Route::post('/documents/{document}/change-order', [DocumentController::class, 'changeOrder'])
->name('documents.change-order');
Route::post('/documents/{document}/change-published', [DocumentController::class, 'changePublished'])
->name('documents.change-published');
Route::post('/documents/upload', [DocumentController::class, 'upload'])->name('documents.upload');
Route::patch('/documents/change-order/{document}/{direction}', [DocumentController::class, 'changeOrder'])
->where('direction', 'up|down')
->name('documents.change-order');
// * TAGS
Route::resource('tags', TagController::class)->except('show');