*/ namespace Lc\CaracoleBundle\Resolver; use Doctrine\ORM\EntityManagerInterface; use Lc\CaracoleBundle\Model\Merchant\MerchantInterface; use Lc\CaracoleBundle\Model\User\UserMerchantInterface; use Lc\CaracoleBundle\Repository\Merchant\MerchantRepository; use Lc\SovBundle\Model\User\UserInterface; use Lc\SovBundle\Resolver\UrlResolver; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\Security\Core\Security; class MerchantResolver { protected $requestStack; protected $em; protected $urlResolver; protected $security; protected $currentMerchant; public function __construct( EntityManagerInterface $entityManager, RequestStack $requestStack, UrlResolver $urlResolver, Security $security ) { $this->requestStack = $requestStack; $this->em = $entityManager; $this->urlResolver = $urlResolver; $this->security = $security; } public function getCurrent(): MerchantInterface { if ($this->currentMerchant) { return $this->currentMerchant; } $this->currentMerchant = false; $request = $this->requestStack->getCurrentRequest(); $merchantRepository = $this->em->getRepository(MerchantInterface::class); $merchants = $merchantRepository->findAll(); if ($request) { if ($this->urlResolver->isServerLocalhost()) { foreach ($merchants as $merchant) { if ($merchant->getId() == $_ENV['CURRENT_MERCHANT_LOCAL']) { $this->currentMerchant = $merchant; } } } // distant else { foreach ($merchants as $merchant) { $url = $merchant->getMerchantConfig('url'); if ($url && strlen($url) && strpos($url, $_SERVER['HTTP_HOST']) !== false) { $this->currentMerchant = $merchant; } } } } else { /*if ($_ENV['CURRENT_MERCHANT_COMMAND']) { foreach ($merchants as $merchant) { if ($merchant->getId() == $_ENV['CURRENT_MERCHANT_COMMAND']) { $currentMerchant = $merchant; } } }*/ } if ($this->currentMerchant instanceof MerchantInterface) { return $this->currentMerchant; } else { throw new \ErrorException('Aucun merchant courant'); } } public function getUserMerchant( UserInterface $user = null, MerchantInterface $merchant = null ): ?UserMerchantInterface { $userMerchantRepository = $this->em->getRepository(UserMerchantInterface::class); if ($user === null) { $user = $this->security->getUser(); } if ($merchant === null) { $merchant = $this->getCurrent(); } return $userMerchantRepository->findOneBy( [ 'user' => $user, 'merchant' => $merchant, ] ); } }