<?php
declare(strict_types=1);
namespace WebBundle\Handler\Locale\Rule;
use Symfony\Component\HttpFoundation\Response;
use WebBundle\Handler\Locale\Executor\GetRedirectToUrlExecutorHandler;
use WebBundle\Helper\LocaleHelper;
use WebBundle\Validator\Locale\CountryAvailableLocaleValidator;
use WebBundle\Validator\Locale\LangAvailableLocaleValidator;
/**
* Проверяет: в урле есть полная локаль и она нормальная
* Если недопустимое значение любого параметра локали - обязательный редирект
*/
class CheckValidAndNotEmptyLocaleInUrlRuleHandler extends AbstractRuleHandler
{
public function execute(): ?Response
{
// Если недопустимое значение любого параметра локали - обязательный редирект
// Null - валидное значение локали для здесь
if (!LangAvailableLocaleValidator::valid($this->machineLocaleHandler->getLangToUrl(), true)
|| !CountryAvailableLocaleValidator::valid($this->machineLocaleHandler->getCountryToUrl(), true)
) {
$localeFromUri = LocaleHelper::getLocaleFromUri($this->machineLocaleHandler->getRequest()->getRequestUri());
if (!LangAvailableLocaleValidator::valid($this->machineLocaleHandler->getLangToUrl(), true)) {
$localeFromUri->setLangToUrl('en');
}
// если язык не валиден, то валидная страна не может быть null
// если язык валиден, то страна и так не null
if (!CountryAvailableLocaleValidator::valid($this->machineLocaleHandler->getCountryToUrl())) {
$localeFromUri->setCountryToUrl('us');
}
$urlForRedirect = $this->machineLocaleHandler->getRequest()->getSchemeAndHttpHost() . $localeFromUri->getUrl();
return (new GetRedirectToUrlExecutorHandler($urlForRedirect))->do($this->machineLocaleHandler);
}
$this->nextStep(CheckUserApprovedCookieRuleHandler::getRule($this->machineLocaleHandler));
return parent::execute();
}
}