From ec031ec3ecbb1bb854343f6504ad6047b6b9c267 Mon Sep 17 00:00:00 2001 From: Alexis Gousseau Date: Tue, 20 May 2025 14:34:57 +0200 Subject: [PATCH] fix: :bug: makes functional change order method on models who own order field --- app/Http/Controllers/Bo/AppUserController.php | 69 +++- app/Http/Controllers/Bo/ContactController.php | 6 +- .../Controllers/Bo/DocumentController.php | 2 +- .../Controllers/Bo/FormularyController.php | 2 +- app/Http/Controllers/Bo/TagController.php | 2 +- app/Policies/AppUserPolicy.php | 21 ++ app/Policies/DocumentPolicy.php | 21 ++ .../2025_05_20_140312_alter_order_table.php | 42 +++ resources/sass/bo/base/_common.scss | 4 + resources/sass/bo/pages/.gitkeep | 0 resources/sass/bo/partials/.gitkeep | 0 resources/views/bo/layout.blade.php | 28 +- resources/views/bo/layouts/footer.blade.php | 10 + resources/views/bo/layouts/header.blade.php | 2 +- resources/views/bo/layouts/nav-menu.blade.php | 2 +- .../bo/pages/app-users/index-list.blade.php | 129 +++---- .../views/bo/pages/app-users/index.blade.php | 76 ++-- .../bo/pages/contacts/index-list.blade.php | 9 +- .../views/bo/pages/contacts/index.blade.php | 3 +- .../views/bo/pages/contacts/show.blade.php | 3 +- .../views/bo/pages/directories/edit.blade.php | 104 +++--- .../bo/pages/directories/index.blade.php | 86 ++--- .../views/bo/pages/documents/edit.blade.php | 120 +++---- .../bo/pages/documents/index-list.blade.php | 198 +++++------ .../views/bo/pages/documents/index.blade.php | 48 +-- .../bo/pages/formularies/create.blade.php | 74 ++-- .../views/bo/pages/formularies/edit.blade.php | 6 +- .../bo/pages/formularies/index-list.blade.php | 28 +- .../bo/pages/formularies/index.blade.php | 46 +-- .../views/bo/pages/settings/edit.blade.php | 84 ++--- .../views/bo/pages/settings/form.blade.php | 334 +++++++++--------- .../bo/pages/settings/index-list.blade.php | 167 +++++---- .../views/bo/pages/settings/index.blade.php | 30 +- .../views/bo/pages/tags/create.blade.php | 74 ++-- resources/views/bo/pages/tags/edit.blade.php | 104 +++--- .../views/bo/pages/tags/index-list.blade.php | 88 ++--- resources/views/bo/pages/tags/index.blade.php | 48 +-- .../views/modules/flash-message.blade.php | 42 --- .../views/modules/flash-messages.blade.php | 42 +++ resources/views/modules/input-error.blade.php | 8 +- routes/web-bo.php | 20 +- 41 files changed, 1150 insertions(+), 1032 deletions(-) create mode 100644 app/Policies/AppUserPolicy.php create mode 100644 app/Policies/DocumentPolicy.php create mode 100644 database/migrations/2025_05_20_140312_alter_order_table.php delete mode 100644 resources/sass/bo/pages/.gitkeep delete mode 100644 resources/sass/bo/partials/.gitkeep create mode 100644 resources/views/bo/layouts/footer.blade.php delete mode 100644 resources/views/modules/flash-message.blade.php create mode 100644 resources/views/modules/flash-messages.blade.php diff --git a/app/Http/Controllers/Bo/AppUserController.php b/app/Http/Controllers/Bo/AppUserController.php index d898648..7ab7241 100644 --- a/app/Http/Controllers/Bo/AppUserController.php +++ b/app/Http/Controllers/Bo/AppUserController.php @@ -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(); + }); + } } diff --git a/app/Http/Controllers/Bo/ContactController.php b/app/Http/Controllers/Bo/ContactController.php index bf9cc6b..4ab4511 100644 --- a/app/Http/Controllers/Bo/ContactController.php +++ b/app/Http/Controllers/Bo/ContactController.php @@ -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); diff --git a/app/Http/Controllers/Bo/DocumentController.php b/app/Http/Controllers/Bo/DocumentController.php index e663126..1a9ce77 100644 --- a/app/Http/Controllers/Bo/DocumentController.php +++ b/app/Http/Controllers/Bo/DocumentController.php @@ -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) { diff --git a/app/Http/Controllers/Bo/FormularyController.php b/app/Http/Controllers/Bo/FormularyController.php index 6d8fc44..dc9f748 100644 --- a/app/Http/Controllers/Bo/FormularyController.php +++ b/app/Http/Controllers/Bo/FormularyController.php @@ -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); diff --git a/app/Http/Controllers/Bo/TagController.php b/app/Http/Controllers/Bo/TagController.php index 83c4582..ed50871 100644 --- a/app/Http/Controllers/Bo/TagController.php +++ b/app/Http/Controllers/Bo/TagController.php @@ -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); diff --git a/app/Policies/AppUserPolicy.php b/app/Policies/AppUserPolicy.php new file mode 100644 index 0000000..49e4d24 --- /dev/null +++ b/app/Policies/AppUserPolicy.php @@ -0,0 +1,21 @@ +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(); + }); + } +}; diff --git a/resources/sass/bo/base/_common.scss b/resources/sass/bo/base/_common.scss index c4723a9..d1e69ee 100644 --- a/resources/sass/bo/base/_common.scss +++ b/resources/sass/bo/base/_common.scss @@ -57,3 +57,7 @@ .table-col-sorter { height: 3rem; } + +main { + min-height: calc(100vh - 56px - 40px); +} diff --git a/resources/sass/bo/pages/.gitkeep b/resources/sass/bo/pages/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/resources/sass/bo/partials/.gitkeep b/resources/sass/bo/partials/.gitkeep deleted file mode 100644 index e69de29..0000000 diff --git a/resources/views/bo/layout.blade.php b/resources/views/bo/layout.blade.php index a8aff34..58e8b73 100644 --- a/resources/views/bo/layout.blade.php +++ b/resources/views/bo/layout.blade.php @@ -7,24 +7,18 @@ @include('bo.layouts.header') -
-
-
- @include('modules.flash-message') -
-
-
-
- @include('modules.breadcrumb.breadcrumb-body') -
-
-
-
- @yield('content') -
-
+ +
+ {{-- Show a message when an action is performed --}} + @include('modules.flash-messages') + {{-- Main content --}} + @yield('content')
- @stack('scriptsConstants') + + + @include('bo.layouts.footer') + + @include('modules.script-constants') @vite(['resources/ts/bo/bo.ts']) @stack('scripts') diff --git a/resources/views/bo/layouts/footer.blade.php b/resources/views/bo/layouts/footer.blade.php new file mode 100644 index 0000000..c32877c --- /dev/null +++ b/resources/views/bo/layouts/footer.blade.php @@ -0,0 +1,10 @@ +
+
+ @if (isset($cpsr_name) && isset($cpsr_version)) + {{ $cpsr_name }} - {{ $cpsr_version }} + - + @endif + {{ __('UWIL') }} + © {{ date('Y') }} +
+
diff --git a/resources/views/bo/layouts/header.blade.php b/resources/views/bo/layouts/header.blade.php index a0516fd..da26d92 100644 --- a/resources/views/bo/layouts/header.blade.php +++ b/resources/views/bo/layouts/header.blade.php @@ -1,4 +1,4 @@ -