142 lines
4.3 KiB
PHP
142 lines
4.3 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\Traits\UpdateModelStatus;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\File;
|
|
use Illuminate\Support\Str;
|
|
|
|
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, []);
|
|
$actus = $actus->paginate();
|
|
return view('bo.actus.index', \compact('actus', 'searchFields'));
|
|
}
|
|
|
|
public function create(Actu $actu)
|
|
{
|
|
return view('bo.actus.create', ['actu' => $actu]);
|
|
}
|
|
|
|
public function store(StoreActuRequest $request)
|
|
{
|
|
$actu = new Actu($request->validated());
|
|
$this->storeUploadedImage($request, $actu);
|
|
$actu->saveOrFail();
|
|
|
|
return redirect()->route('bo.actus.edit', $actu)
|
|
->with('success', 'Actu enregistrée');
|
|
}
|
|
|
|
public function edit(Actu $actu)
|
|
{
|
|
return view('bo.actus.edit', ['actu' => $actu]);
|
|
}
|
|
|
|
public function update(UpdateActuRequest $request, Actu $actu)
|
|
{
|
|
$actu->fill($request->validated());
|
|
$this->storeUploadedImage($request, $actu);
|
|
$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::all();
|
|
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 = 1;
|
|
$r->save();
|
|
}
|
|
}
|
|
|
|
foreach ($oldHighlights as $oldHighlight) {
|
|
if (!in_array($oldHighlight->id, $actus)) {
|
|
$oldHighlight->front = 0;
|
|
$oldHighlight->save();
|
|
}
|
|
}
|
|
} else {
|
|
Actu::where('front', 1)->update(['front' => 0]);
|
|
}
|
|
|
|
return redirect()->route('bo.actus.highlights')->with('success', 'Enregistré !');
|
|
}
|
|
|
|
private function storeUploadedImage(StoreActuRequest $request, Actu &$actu)
|
|
{
|
|
if ($request->picture) {
|
|
/** @var \Illuminate\Http\UploadedFile $image */
|
|
$image = $request->picture;
|
|
$newPath = $this->prepareMoveFile($image->getClientOriginalName());
|
|
$newPath = str_replace(storage_path('app'), '', $newPath);
|
|
$image->storePubliclyAs(pathinfo($newPath, \PATHINFO_DIRNAME), pathinfo($newPath, \PATHINFO_BASENAME));
|
|
$actu->picture = 'storage' . str_replace('/public', '', $newPath);
|
|
}
|
|
}
|
|
|
|
private function prepareMoveFile(string $filename): string
|
|
{
|
|
$pathFolder = \storage_path('app/public/images/actus');
|
|
if (!File::exists($pathFolder)) {
|
|
File::makeDirectory($pathFolder, 0755, true);
|
|
}
|
|
$filename = sprintf('%s-%s', Str::uuid(), $filename);
|
|
$fullPath = sprintf('%s/%s', $pathFolder, $filename);
|
|
if (File::exists($fullPath)) {
|
|
File::delete($fullPath);
|
|
}
|
|
return $fullPath;
|
|
}
|
|
}
|