ldc-legaulois/app/Http/Controllers/Bo/ActuController.php
2022-02-02 11:07:57 +01:00

137 lines
4 KiB
PHP

<?php
namespace App\Http\Controllers\Bo;
use App\Http\Controllers\Controller;
use App\Http\Requests\StoreActuRequest;
use App\Http\Requests\StoreActusHighlights;
use App\Http\Requests\UpdateActuRequest;
use App\Models\Actu;
use App\Models\Tag;
use App\Traits\UpdateModelStatus;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\File;
class ActuController extends Controller
{
use UpdateModelStatus;
public function index(Request $request)
{
$actus = Actu::query();
if ($request->search) {
$actus = $this->searchQuery(
$actus,
$request->search,
'title',
'header',
'content',
'status'
);
}
$searchFields = trans('Titre, Entête, Contenu');
$actus = $this->sortQuery($actus, ['tags']);
$actus = $actus->paginate();
return view('bo.actus.index', array_merge(
\compact('actus', 'searchFields'),
['ignore' => ['tags']]
));
}
public function create(Actu $actu)
{
$tags = Tag::all();
return view('bo.actus.create', ['actu' => $actu, 'tags' => $tags]);
}
public function store(StoreActuRequest $request)
{
$actu = new Actu($request->validated());
$this->storeUploadedImage($request, $actu, 'picture');
$actu->saveOrFail();
if ($request->tags) {
$actu->tags()->sync($request->tags);
} else {
$actu->tags()->sync(Tag::whereDefault(true)->pluck('id')->all());
}
$actu->saveOrFail();
return redirect()->route('bo.actus.edit', $actu)
->with('success', 'Actu enregistrée');
}
public function edit(Actu $actu)
{
$tags = Tag::all();
return view('bo.actus.edit', ['actu' => $actu, 'tags' => $tags]);
}
public function update(UpdateActuRequest $request, Actu $actu)
{
$actu->fill($request->validated());
if ($request->tags) {
$actu->tags()->sync($request->tags);
} else {
$actu->tags()->sync(Tag::whereDefault(true)->pluck('id')->all());
}
$this->storeUploadedImage($request, $actu, 'picture');
$actu->saveOrFail();
return redirect()->route('bo.actus.edit', $actu)
->with('success', 'Actu enregistrée');
}
public function destroy(Actu $actu)
{
if (File::exists($actu->picture)) {
File::delete($actu->picture);
}
if (!$actu->delete()) {
return redirect()->route('bo.actus.edit', $actu)
->with('error', 'Le contenu n\'a pas pu être supprimé');
}
return redirect()->route('bo.actus.index')
->with('warning', 'Le contenu a bien été supprimé');
}
public function highlights()
{
$actus = Actu::where('status', true)->get();
return view('bo.actus.highlights', compact('actus'));
}
public function storeHighlights(StoreActusHighlights $request)
{
$actus = $request->actus;
if ($actus !== null) {
$oldHighlights = Actu::select('id')->where('front', 1)->get();
foreach ($actus as $actu) {
if (!$oldHighlights->contains($actu)) {
$r = Actu::findOrFail($actu);
$r->front = true;
$r->save();
}
}
foreach ($oldHighlights as $oldHighlight) {
if (!in_array($oldHighlight->id, $actus)) {
$oldHighlight->front = false;
$oldHighlight->save();
}
}
} else {
// ! Dont do mass update as it wont trigger model events
$actus = Actu::where('front', true)->get();
foreach ($actus as $actu) {
$actu->front = false;
$actu->save();
}
}
return redirect()->route('bo.actus.highlights')->with('success', 'Enregistré !');
}
}