ldc-agis/app/Http/Controllers/Fo/NewsController.php

70 lines
2.1 KiB
PHP
Raw Normal View History

2023-12-19 15:09:12 +00:00
<?php
namespace App\Http\Controllers\Fo;
use App\Enums\StaticPageType;
use App\Http\Controllers\Controller;
use App\Lib\Helpers\CollectionHelper;
use App\Lib\Helpers\ToolboxHelper;
use App\Models\News;
use App\Models\StaticPage;
use Illuminate\Contracts\Database\Query\Builder;
class NewsController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Contracts\View\View
*/
public function index(): \Illuminate\Contracts\View\View
{
/** @var \App\Models\StaticPage $staticPageModel */
$staticPageModel = StaticPage::query()->where('type', StaticPageType::news)->firstOrFail();
/** @var \App\Models\News $newsModels */
$newsModels = News::query()->where('published', true)->orderBy('publish_at', 'desc')->paginate(12);
return view('fo.pages.news.index', \compact('staticPageModel', 'newsModels'));
}
/**
* Display a news articles
*
* @param string $slug
* @return \Illuminate\Contracts\View\View
*/
public function show(string $slug): \Illuminate\Contracts\View\View
{
/** @var \App\Models\News $newsModel */
$newsModel = News::query()
->where('published', true)
->where('slug', $slug)
->firstOrFail();
return view('fo.pages.news.show', \compact('newsModel'));
}
/**
* Get filtered news.
*
* @return \Illuminate\Http\JsonResponse
*/
public function newsFiltered(): \Illuminate\Http\JsonResponse
{
$categoryId = ToolboxHelper::getValidatedEnum(
0,
'category',
'\App\Enums\News\CategoryEnum',
);
$newsModels = News::query()
->where('published', true)
->when($categoryId != 0, function (Builder $query) use ($categoryId) {
$query->where('category', $categoryId);
})
->orderBy('publish_at', 'desc')
->get();
$newsModels = CollectionHelper::paginateManually($newsModels, 12, request()->page);
return response()->json($newsModels);
}
}