Files
MageSail/Magesail/Plugin/App/Request/StoreFromMageSailHeaderPlugin.php
T

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;
}
}