ldc-nature-and-respect/app/Http/Controllers/Fo/NewsController.php
Jérémy Munsch c1369ea508
Implements #18 News.index
- Add toastify css to front
- Bump kwaadpepper/image-resizer with fit option
- Enhance news picture size to 770x770
2023-06-09 11:00:40 +02:00

92 lines
3.1 KiB
PHP

<?php
namespace App\Http\Controllers\Fo;
use App\Http\Controllers\Controller;
use App\Models\News;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Cache;
class NewsController extends Controller
{
/**
* News index
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory|\Illuminate\Http\JsonResponse
*/
public function index(Request $request)
{
if ($request->wantsJson()) {
$currentLocale = app()->currentLocale();
$newsList = News::query()
->where('status', true)
->whereJsonContains('locales', $currentLocale)
->orderBy('order')
->paginate();
return \response()->json(\collect($newsList->items())
->map(fn ($newsModel) => $this->renderNews($newsModel)));
}
return view('fo.pages.news.index');
}
/**
* Product show
*
* @param \App\Models\News $publishedNews
* @return \Illuminate\Contracts\View\View
*/
public function show(News $publishedNews)
{
return view('fo.pages.news.show', ['newsModel' => $publishedNews]);
}
/**
* Render a news for JS usage (ajax)
*
* @param \App\Models\News $newsModel
* @return string Base64 rendered view.
*/
private function renderNews(News $newsModel): string
{
$locale = \app()->currentLocale();
return Cache::remember(
"NewsRendered_{$locale}_{$newsModel->id}_{$newsModel->updated_at}",
60,
function () use ($newsModel) {
$pictures = $this->filterPictures(\collect($newsModel->data))->all();
return \base64_encode(\view(
'fo.pages.news.bloc',
[
'newsModel' => $newsModel,
'pictures' => $pictures
]
)->render());
}
);
}
/**
* Filter pictures
*
* @param \Illuminate\Support\Collection $inputs
* @return \Illuminate\Support\Collection
*/
private function filterPictures(Collection $inputs): Collection
{
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
return $inputs->filter(fn ($value, $key) => \preg_match('/bloc[0-9]+/u', $key) !== false)
// phpcs:ignore Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassBeforeLastUsed
->groupBy(fn ($value, $key) => \collect(\explode('_', $key))->take(2)->implode('_'))
->filter(fn (Collection $blocks) => \collect($blocks->first())->get('value'))
->map(function (Collection $blocks) {
$pictureBlock = (object)$blocks->last();
return (object)[
'value' => $pictureBlock->value,
'title' => $pictureBlock->title,
'alt' => $pictureBlock->alt
];
});
}
}