init
This commit is contained in:
@@ -0,0 +1,145 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Esun3d\LanguageUrlStoreResolver\Observer;
|
||||
|
||||
use Magento\Framework\App\Http\Context as HttpContext;
|
||||
use Magento\Framework\App\RequestInterface;
|
||||
use Magento\Framework\Event\Observer;
|
||||
use Magento\Framework\Event\ObserverInterface;
|
||||
use Magento\Store\Model\StoreManagerInterface;
|
||||
use Esun3d\LanguageUrlStoreResolver\Model\Config;
|
||||
use Esun3d\LanguageUrlStoreResolver\Model\LanguageResolver;
|
||||
use Esun3d\LanguageUrlStoreResolver\Model\MarketResolver;
|
||||
use Esun3d\LanguageUrlStoreResolver\Model\StoreCodeMapper;
|
||||
use Psr\Log\LoggerInterface;
|
||||
|
||||
class AddHttpContextObserver implements ObserverInterface
|
||||
{
|
||||
public const CONTEXT_MARKET = 'language_url_market';
|
||||
public const CONTEXT_STORE_CODE = 'language_url_store_code';
|
||||
|
||||
/**
|
||||
* @var Config
|
||||
*/
|
||||
private $config;
|
||||
|
||||
/**
|
||||
* @var MarketResolver
|
||||
*/
|
||||
private $marketResolver;
|
||||
|
||||
/**
|
||||
* @var HttpContext
|
||||
*/
|
||||
private $httpContext;
|
||||
|
||||
/**
|
||||
* @var RequestInterface
|
||||
*/
|
||||
private $request;
|
||||
|
||||
/**
|
||||
* @var StoreManagerInterface
|
||||
*/
|
||||
private $storeManager;
|
||||
|
||||
/**
|
||||
* @var StoreCodeMapper
|
||||
*/
|
||||
private $storeCodeMapper;
|
||||
|
||||
/**
|
||||
* @var LanguageResolver
|
||||
*/
|
||||
private $languageResolver;
|
||||
/**
|
||||
* @var LoggerInterface
|
||||
*/
|
||||
private $logger;
|
||||
|
||||
|
||||
public function __construct(
|
||||
Config $config,
|
||||
LoggerInterface $logger,
|
||||
MarketResolver $marketResolver,
|
||||
HttpContext $httpContext,
|
||||
RequestInterface $request,
|
||||
StoreManagerInterface $storeManager,
|
||||
StoreCodeMapper $storeCodeMapper,
|
||||
LanguageResolver $languageResolver
|
||||
) {
|
||||
$this->config = $config;
|
||||
$this->marketResolver = $marketResolver;
|
||||
$this->httpContext = $httpContext;
|
||||
$this->request = $request;
|
||||
$this->storeManager = $storeManager;
|
||||
$this->storeCodeMapper = $storeCodeMapper;
|
||||
$this->languageResolver = $languageResolver;
|
||||
$this->logger = $logger;
|
||||
}
|
||||
|
||||
public function execute(Observer $observer): void
|
||||
{
|
||||
if (!$this->config->isEnabled()) {
|
||||
$this->logger->debug('[LanguageUrlStoreResolver] config not Enabled');
|
||||
return;
|
||||
}
|
||||
|
||||
$market = $this->resolveMarket();
|
||||
$storeCode = $this->resolveStoreCode();
|
||||
|
||||
$this->httpContext->setValue(
|
||||
self::CONTEXT_MARKET,
|
||||
$market,
|
||||
$this->resolveDefaultStoreCode()
|
||||
);
|
||||
$this->httpContext->setValue(
|
||||
self::CONTEXT_STORE_CODE,
|
||||
$storeCode,
|
||||
$this->resolveDefaultStoreCode()
|
||||
);
|
||||
}
|
||||
|
||||
private function resolveStoreCode(): string
|
||||
{
|
||||
try {
|
||||
$storeCode = $this->storeManager->getStore()->getCode();
|
||||
|
||||
return $this->storeCodeMapper->isRealStoreCodeInScope($storeCode)
|
||||
? $storeCode
|
||||
: $this->resolveDefaultStoreCode();
|
||||
} catch (\Throwable $exception) {
|
||||
return $this->resolveDefaultStoreCode();
|
||||
}
|
||||
}
|
||||
|
||||
private function resolveMarket(): string
|
||||
{
|
||||
try {
|
||||
$storeCode = $this->storeManager->getStore()->getCode();
|
||||
$language = $this->storeCodeMapper->languageFromStoreCode($storeCode);
|
||||
|
||||
if ($language !== null) {
|
||||
return $this->marketResolver->resolveForLanguage($this->request, $language) ?: '';
|
||||
}
|
||||
} catch (\Throwable $exception) {
|
||||
return $this->resolveDefaultStoreCode();
|
||||
}
|
||||
|
||||
return $this->marketResolver->resolve($this->request) ?: $this->resolveDefaultStoreCode();
|
||||
}
|
||||
|
||||
private function resolveDefaultStoreCode(): string
|
||||
{
|
||||
$language = $this->request instanceof \Magento\Framework\App\Request\Http
|
||||
? $this->languageResolver->resolveFromPath($this->request->getPathInfo())
|
||||
: null;
|
||||
|
||||
if ($language === null) {
|
||||
return '';
|
||||
}
|
||||
|
||||
return $this->storeCodeMapper->getDefaultStoreCodeForLanguage($language) ?: '';
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user