diff --git a/app/Http/Controllers/Bo/GammesController.php b/app/Http/Controllers/Bo/GammesController.php index 8616be1d..28f78705 100644 --- a/app/Http/Controllers/Bo/GammesController.php +++ b/app/Http/Controllers/Bo/GammesController.php @@ -3,6 +3,7 @@ namespace App\Http\Controllers\Bo; use App\Http\Controllers\Controller; +use App\Http\Requests\Bo\UpdateChangeOrderRequest; use App\Http\Requests\StoreGammeRequest; use App\Http\Requests\UpdateGammeRequest; use App\Lib\ToolboxHelper; @@ -19,13 +20,13 @@ class GammesController extends Controller public function index(): \Illuminate\Contracts\View\View { $gammes = collect([]); - $dbGammes = Gamme::orderBy('title')->whereNull('parent_gamme_id') + $dbGammes = Gamme::orderBy('order')->whereNull('parent_gamme_id') ->with('childGammes')->get(); /** @var \App\Models\Gamme $gamme */ foreach ($dbGammes as $gamme) { $gammes->push($gamme); - $gamme->childGammes->sortBy('title') + $gamme->childGammes->sortBy('order') ->map(function (Gamme $childGamme) use (&$gammes) { $gammes->push($childGamme); }); @@ -60,6 +61,7 @@ class GammesController extends Controller return DB::transaction(function () use ($request) { $gamme = new Gamme(); $gamme->fill($request->validated()); + $gamme->order = $this->getLastOrder(); if (is_a($request->picture, "SplFileInfo")) { $gamme->picture = ToolboxHelper::storeImage($request->picture, $gamme->getTable()); @@ -134,4 +136,49 @@ class GammesController extends Controller } return back()->with('error', trans(__('Delete_failed'))); } + + /** + * Remove the specified resource from storage. + * + * @param UpdateChangeOrderRequest $request + * @param Gamme $gamme + * @return \Illuminate\Http\RedirectResponse + * @ignore phpcs:disable Generic.Files.LineLength.TooLong + */ + public function changeOrder(UpdateChangeOrderRequest $request, Gamme $gamme): \Illuminate\Http\RedirectResponse + { + if ($request->validated()['action'] === 'up') { + $tmp = Gamme::where('order', '<', $gamme->order) + ->orderBy('order', 'DESC')->first(); + $newOrder = $tmp->order; + $tmp->order = $gamme->order; + $gamme->order = $newOrder; + } elseif ($request->validated()['action'] === 'down') { + $tmp = Gamme::where('order', '>', $gamme->order) + ->orderBy('order', 'ASC')->first(); + $newOrder = $tmp->order; + $tmp->order = $gamme->order; + $gamme->order = $newOrder; + } else { + return redirect()->route('bo.homepage_slides.index'); + } + $tmp->save(); + $gamme->save(); + + return back(); + } + + /** + * Get by order the last element of the list. + * + * @return integer + */ + private function getLastOrder(): int + { + $order = Gamme::select('order')->orderBy('order', 'DESC')->first(); + if ($order === null) { + return 1; + } + return $order->order + 1; + } } diff --git a/app/Http/Controllers/GammesController.php b/app/Http/Controllers/GammesController.php index c76c86ab..09679a7e 100644 --- a/app/Http/Controllers/GammesController.php +++ b/app/Http/Controllers/GammesController.php @@ -16,7 +16,7 @@ class GammesController extends Controller */ public function index(): \Illuminate\Contracts\View\View { - $gammes = Gamme::whereNull('parent_gamme_id')->orderBy('title')->get(); + $gammes = Gamme::whereNull('parent_gamme_id')->orderBy('order')->get(); $gammebanner = BasicBanner::where('slug', 'main_gammebanner')->first(); $gammehook = GammeHook::where('slug', 'gamme_hook')->first(); $sousGammes = Gamme::whereNotNull('parent_gamme_id')->orderBy('parent_gamme_id')->get(); @@ -35,12 +35,12 @@ class GammesController extends Controller $gammes = collect([]); $dbGammes = Gamme::where('id', $gamme->id) ->with('childGammes')->get(); - $parent_gamme = Gamme::whereNull('parent_gamme_id')->orderBy('title')->get(); + $parent_gamme = Gamme::whereNull('parent_gamme_id')->orderBy('order')->get(); /** @var \App\Models\Gamme $dbGamme */ foreach ($dbGammes as $dbGamme) { $gammes->push($dbGamme->id); - $dbGamme->childGammes->sortBy('title') + $dbGamme->childGammes->sortBy('order') ->map(function (Gamme $childGamme) use (&$gammes) { $gammes->push($childGamme->id); }); diff --git a/app/Models/Gamme.php b/app/Models/Gamme.php index 2afbd18f..dd0e143e 100644 --- a/app/Models/Gamme.php +++ b/app/Models/Gamme.php @@ -105,7 +105,7 @@ class Gamme extends Model */ public function childGammes() { - return $this->hasMany(Gamme::class, 'parent_gamme_id'); + return $this->hasMany(Gamme::class, 'parent_gamme_id')->orderBy('order'); } /** diff --git a/database/migrations/2023_06_05_102334_add_order_to_gammes.php b/database/migrations/2023_06_05_102334_add_order_to_gammes.php new file mode 100644 index 00000000..eea2c902 --- /dev/null +++ b/database/migrations/2023_06_05_102334_add_order_to_gammes.php @@ -0,0 +1,39 @@ +integer('order')->after('alt_text_picture3')->default(1); + }); + $i = 1; + foreach (Gamme::all() as $gamme) { + $gamme->order = $i; + $gamme->save(); + $i++; + } + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::table('gammes', function (Blueprint $table) { + $table->dropColumn('order'); + }); + } +} diff --git a/resources/views/back/gammes/index.blade.php b/resources/views/back/gammes/index.blade.php index 135f6143..c247d12d 100644 --- a/resources/views/back/gammes/index.blade.php +++ b/resources/views/back/gammes/index.blade.php @@ -20,6 +20,7 @@ {{ __('Image') }} {{ __('Related_category') }} {{ __('Related_range') }} + {{ __('Order') }} @@ -51,6 +52,28 @@

Pas de gamme parente associée

@endif + + @if ($loop->first) + + ↓ + + @elseif($loop->last) + + ↑ + + @else + + ↑ + + + ↓ + + @endif + {{ __('Edit') }} diff --git a/routes/web-bo.php b/routes/web-bo.php index d41572e8..2c900c23 100644 --- a/routes/web-bo.php +++ b/routes/web-bo.php @@ -249,6 +249,11 @@ Route::prefix('bo') ->withoutMiddleware('htmlsanitize') ->middleware('htmlsanitize:text'); + Route::get( + '/gammes/change-order/{gamme}/{action}', + [GammesController::class, 'changeOrder'] + )->name('gammes.change-order'); + Route::prefix('gammebanners') ->name('gammebanners.') ->group(function () {