59 lines
1.9 KiB
PHP
59 lines
1.9 KiB
PHP
<?php
|
|
declare(strict_types=1);
|
|
|
|
namespace MageSail\Magesail\Plugin\App\Request;
|
|
|
|
use Magento\Framework\App\Request\Http;
|
|
use Magento\Store\Model\StoreManager;
|
|
|
|
/**
|
|
* When request has X-MageSail-Store-Code header or magesail_store query param (from tunnel proxy),
|
|
* make getServerValue return it for MAGE_RUN_CODE and 'store' for MAGE_RUN_TYPE so Magento serves that store.
|
|
*/
|
|
class StoreFromMageSailHeaderPlugin
|
|
{
|
|
private const HEADER_STORE_CODE = 'X-MageSail-Store-Code';
|
|
private const QUERY_PARAM_STORE = 'magesail_store';
|
|
|
|
/**
|
|
* Around getServerValue: if MageSail store header is set, return it for MAGE_RUN_CODE / MAGE_RUN_TYPE.
|
|
*
|
|
* @param Http $subject
|
|
* @param callable $proceed
|
|
* @param string|null $name
|
|
* @param mixed $default
|
|
* @return mixed
|
|
*/
|
|
public function aroundGetServerValue(Http $subject, callable $proceed, $name = null, $default = null)
|
|
{
|
|
$storeCode = $this->getStoreCodeFromRequest($subject);
|
|
if ($storeCode === null) {
|
|
return $proceed($name, $default);
|
|
}
|
|
if ($name === StoreManager::PARAM_RUN_CODE) {
|
|
return $storeCode;
|
|
}
|
|
if ($name === StoreManager::PARAM_RUN_TYPE) {
|
|
return 'store';
|
|
}
|
|
return $proceed($name, $default);
|
|
}
|
|
|
|
private function getStoreCodeFromRequest(Http $request): ?string
|
|
{
|
|
$value = $request->getParam(self::QUERY_PARAM_STORE);
|
|
if ($value !== null && trim((string) $value) !== '') {
|
|
return trim((string) $value);
|
|
}
|
|
$value = $request->getHeader(self::HEADER_STORE_CODE);
|
|
if ($value !== false && $value !== null && trim((string) $value) !== '') {
|
|
return trim((string) $value);
|
|
}
|
|
$value = $request->getServer('HTTP_X_MAGESAIL_STORE_CODE');
|
|
if ($value !== null && $value !== '' && trim((string) $value) !== '') {
|
|
return trim((string) $value);
|
|
}
|
|
return null;
|
|
}
|
|
}
|