ldc-legaulois/app/Http/Controllers/BreedingPageController.php
2022-07-13 10:06:50 +00:00

107 lines
3.6 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Enums\BreedingPageType;
use App\Enums\GeneralConfigType;
use App\Enums\InputType;
use App\Models\BreedingPage;
use App\Models\GeneralConfig;
use Illuminate\Support\Facades\View;
class BreedingPageController extends Controller
{
/**
* BreedingPageController
*/
public function __construct()
{
$this->middleware(function ($request, $next) {
View::share('generalConfig', GeneralConfig::getCachedConfig(
GeneralConfigType::breedingPage()
));
return $next($request);
});
}
/**
* Show Breeding Page index
*
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function index()
{
return view('front.breeding-page.index');
}
/**
* Show Breeding Pages within a type
*
* @param BreedingPageType $pageType
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
*/
public function list(BreedingPageType $pageType)
{
$pages = BreedingPage::where('type', $pageType)->whereStatus(true)->get();
$bannerUrl = $this->getBannerUrlFromGeneralConfig($pageType);
$headerText = $this->getTextHeaderFromGeneralConfig($pageType);
return view('front.breeding-page.list', compact('pages', 'pageType', 'bannerUrl', 'headerText'));
}
/**
* Show specific breeder page
*
* @param BreedingPageType $pageType
* @param BreedingPage $page
* @return \Illuminate\Contracts\View\View|\Illuminate\Contracts\View\Factory
* @phpcs:disable Generic.CodeAnalysis.UnusedFunctionParameter.FoundInExtendedClassAfterLastUsed
*/
public function show(BreedingPageType $pageType, BreedingPage $page)
{
$bannerUrl = $this->getBannerUrlFromGeneralConfig($pageType);
$headerText = $this->getTextHeaderFromGeneralConfig($pageType);
return view('front.breeding-page.show', compact('page', 'pageType', 'bannerUrl', 'headerText'));
}
/**
* Get banner url from general config
*
* @param BreedingPageType $pageType
* @return string
*/
private function getBannerUrlFromGeneralConfig(BreedingPageType $pageType): string
{
$generalConfig = GeneralConfig::getCachedConfig(GeneralConfigType::breedingPage());
/** @var string */
$key = \strval(collect($generalConfig->data)->filter(function (array $input) use ($pageType) {
return $input['inputType']['value'] === InputType::string()->value and
isset($input['type']) and
$input['type']['value'] === $pageType->value;
})->keys()->first());
/** @var string banner url or empty */
return collect($generalConfig->data)->get(str_replace('_text', '_img2', $key))['value'] ?? '';
}
/**
* Get text header from general config
*
* @param BreedingPageType $pageType
* @return string
*/
private function getTextHeaderFromGeneralConfig(BreedingPageType $pageType): string
{
$generalConfig = GeneralConfig::getCachedConfig(GeneralConfigType::breedingPage());
/** @var string */
$key = \strval(collect($generalConfig->data)->filter(function (array $input) use ($pageType) {
return $input['inputType']['value'] === InputType::string()->value and
isset($input['type']) and
$input['type']['value'] === $pageType->value;
})->keys()->first());
/** @var string banner url or empty */
return collect($generalConfig->data)->get(str_replace('_text', '_img2', $key))['text'] ?? '';
}
}