91 lines
2.9 KiB
PHP
91 lines
2.9 KiB
PHP
<?php
|
|
|
|
namespace Esun3d\LanguageUrlStoreResolver\Controller\Switch;
|
|
|
|
use Esun3d\LanguageUrlStoreResolver\Model\LanguageResolver;
|
|
use Esun3d\LanguageUrlStoreResolver\Model\StoreCodeMapper;
|
|
use Esun3d\LanguageUrlStoreResolver\Observer\AddHttpContextObserver;
|
|
use Magento\Framework\App\Action\Action;
|
|
use Magento\Framework\App\Action\Context;
|
|
use Magento\Framework\App\Http\Context as HttpContext;
|
|
use Magento\Framework\App\ObjectManager;
|
|
use Magento\Framework\App\RequestInterface;
|
|
use Magento\Framework\Controller\Result\JsonFactory;
|
|
use Magento\Store\Model\StoreManagerInterface;
|
|
use Psr\Log\LoggerInterface;
|
|
|
|
class Index extends Action
|
|
{
|
|
|
|
public function __construct(
|
|
Context $context,
|
|
protected JsonFactory $resultJsonFactory,
|
|
protected RequestInterface $request,
|
|
protected HttpContext $httpContext,
|
|
protected StoreManagerInterface $storeManager,
|
|
protected StoreCodeMapper $storeCodeMapper,
|
|
protected LanguageResolver $languageResolver
|
|
){
|
|
parent::__construct($context);
|
|
}
|
|
|
|
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 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) ?: '';
|
|
}
|
|
|
|
public function execute()
|
|
{
|
|
$country = $this->getRequest()->getParam('country');
|
|
$language = $this->getRequest()->getParam('language');
|
|
|
|
$success = false;
|
|
if (!empty($country) && !empty($language)) {
|
|
$market = strtolower($language).'_'.strtoupper($country);
|
|
$storeCode = $this->resolveStoreCode();
|
|
$logger = ObjectManager::getInstance()->get(LoggerInterface::class);
|
|
$logger->info('$market: '.$market);
|
|
$this->httpContext->setValue(
|
|
AddHttpContextObserver::CONTEXT_MARKET,
|
|
$market,
|
|
$this->resolveDefaultStoreCode()
|
|
);
|
|
$this->httpContext->setValue(
|
|
AddHttpContextObserver::CONTEXT_STORE_CODE,
|
|
$storeCode,
|
|
$this->resolveDefaultStoreCode()
|
|
);
|
|
$success = true;
|
|
}
|
|
|
|
|
|
return $this->resultJsonFactory->create()
|
|
->setData([
|
|
'success'=>$success,
|
|
'country'=>$country,
|
|
'language'=>$language
|
|
]);
|
|
}
|
|
}
|