ChangesModelOrder trait

This commit is contained in:
Jérémy Munsch 2022-07-12 16:03:37 +02:00
parent 00287eadf2
commit 18ca33e3a7
No known key found for this signature in database
GPG key ID: 18361AF3BFEC0FEC
2 changed files with 41 additions and 42 deletions

View file

@ -4,20 +4,19 @@ namespace App\Http\Controllers\Bo;
use App\Enums\Sliders\SliderType;
use App\Http\Controllers\Controller;
use App\Http\Requests\Bo\ChangeOrderRequest;
use App\Http\Requests\Bo\Sliders\StoreSliderRequest;
use App\Http\Requests\Bo\Sliders\UpdateSliderRequest;
use App\Models\Slider;
use App\Traits\Controllers\UpdateModelStatus;
use Illuminate\Database\Eloquent\ModelNotFoundException;
use App\Traits\Models\ChangesModelOrder;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
use Illuminate\Support\Str;
use Kwaadpepper\Enum\Exceptions\EnumNotRoutableException;
class SliderController extends Controller
{
use ChangesModelOrder;
use UpdateModelStatus;
/**
@ -145,43 +144,4 @@ class SliderController extends Controller
}
return back();
}
/**
* Change Item Order
*
* @param \App\Http\Requests\Bo\ChangeOrderRequest $request
* @param \App\Models\Slider $slider
* @return \Illuminate\Http\RedirectResponse
*/
public function changeOrder(ChangeOrderRequest $request, Slider $slider)
{
try {
DB::transaction(function () use ($request, $slider) {
$tmp = Slider::query();
if ($request->action === 'up') {
// * Push Item upward
$tmp->where('order', '<', $slider->order)
->orderBy('order', 'DESC');
} else {
// * Push Item downward
$tmp->where('order', '>', $slider->order)
->orderBy('order', 'ASC');
}
$tmp->whereType('type', $slider->type);
$tmp = $tmp->firstOrFail();
$newOrder = $tmp->order;
$tmp->order = $slider->order;
$slider->order = $newOrder;
if (!$slider->saveOrFail() or !$tmp->saveOrFail()) {
throw new \ErrorException("Error Processing Request", 1);
}
});
} catch (\ErrorException | ModelNotFoundException $e) {
Session::flash('error', trans('Erreur lors de la modification de l\'ordre :message', [
'message' => $e->getMessage()
]));
} //end try
return redirect()->back();
}
}

View file

@ -0,0 +1,39 @@
<?php
namespace App\Traits\Models;
use App\Http\Requests\Bo\ChangeOrderRequest;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Http\RedirectResponse;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Session;
trait ChangesModelOrder
{
/**
* Change order
*
* @param \App\Traits\Models\ChangeOrderRequest $request
* @param \Illuminate\Database\Eloquent\Model $model
* @return \Illuminate\Http\RedirectResponse
* @throws \RuntimeException Si le nom du parametre de la route ne correspond pas au model utilisé.
*/
public function changeOrder(ChangeOrderRequest $request, Model $model): RedirectResponse
{
return DB::transaction(function () use ($request, $model) {
/** @var \Illuminate\Database\Eloquent\Model|null */
$tmp = (\get_class($model))::where('order', $request->direction ? '<' : '>', $model->order)
->orderBy('order', $request->direction ? 'DESC' : 'ASC')->first();
if (!$tmp) {
return back()->with('error', trans('L\'ordre n\'a pas pu être modifié'));
}
$newOrder = $tmp->order;
$tmp->order = $model->order;
$model->order = $newOrder;
$tmp->saveOrFail();
$model->saveOrFail();
Session::flash('success', trans('L\'ordre à été modifié'));
return back();
});
}
}