custom/plugins/MaxiaTaxSwitch6/src/Storefront/Controller/TaxSwitchController.php line 49

Open in your IDE?
  1. <?php
  2. namespace Maxia\MaxiaTaxSwitch6\Storefront\Controller;
  3. use Maxia\MaxiaTaxSwitch6\Storefront\Service\TaxSwitchService;
  4. use Shopware\Core\Framework\Routing\Annotation\RouteScope;
  5. use Shopware\Core\Framework\Struct\ArrayEntity;
  6. use Shopware\Core\PlatformRequest;
  7. use Shopware\Core\System\SalesChannel\SalesChannelContext;
  8. use Shopware\Storefront\Controller\StorefrontController;
  9. use Shopware\Storefront\Framework\Routing\Annotation\NoStore;
  10. use Symfony\Component\HttpFoundation\JsonResponse;
  11. use Symfony\Component\HttpFoundation\Request;
  12. use Symfony\Component\HttpFoundation\Response;
  13. use Symfony\Component\HttpKernel\Exception\NotFoundHttpException;
  14. use Symfony\Component\Routing\Annotation\Route;
  15. /**
  16.  * @RouteScope(scopes={"storefront"})
  17.  */
  18. class TaxSwitchController extends StorefrontController
  19. {
  20.     /**
  21.      * @var TaxSwitchService
  22.      */
  23.     private $taxSwitchService;
  24.     /**
  25.      * @param TaxSwitchService $taxSwitchService
  26.      */
  27.     public function __construct(TaxSwitchService $taxSwitchService)
  28.     {
  29.         $this->taxSwitchService = $taxSwitchService;
  30.     }
  31.     /**
  32.      * @param Request $request
  33.      *
  34.      * @RouteScope(scopes={"storefront"})
  35.      * @NoStore
  36.      * @Route(
  37.      *     "/maxia-tax-switch",
  38.      *     name="frontend.plugins.maxia-tax-switch.update",
  39.      *     options={"seo"="false"},
  40.      *     methods={"GET", "POST"},
  41.      *     defaults={"XmlHttpRequest"=true, "csrf_protected"=false}
  42.      * )
  43.      * @return \Symfony\Component\HttpFoundation\Response
  44.      */
  45.     public function updateSetting(Request $request)
  46.     {
  47.         /** @var SalesChannelContext $context */
  48.         $context = $request->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT);
  49.         $config = $this->taxSwitchService->getContext($context);
  50.         if (!$config['pluginEnabled']) {
  51.             throw new NotFoundHttpException();
  52.         }
  53.         $isNet = $request->request->get('net', $request->query->get('net'));
  54.         if ($isNet === null) {
  55.             $isNet = $config['preselection'] === 'net';
  56.         }
  57.         $this->taxSwitchService->setDisplayNet($context, (bool)$isNet);
  58.         $returnUrl = $this->getReturnUrl($request);
  59.         if ($request->isXmlHttpRequest()) {
  60.             $response = new JsonResponse(['success' => true, 'returnUrl' => $returnUrl]);
  61.         } else {
  62.             $response = $this->redirect($returnUrl, 301);
  63.         }
  64.         $response->headers->set('X-Robots-Tag', 'noindex,nofollow');
  65.         return $response;
  66.     }
  67.     /**
  68.      * @param Request $request
  69.      *
  70.      * @RouteScope(scopes={"storefront"})
  71.      * @NoStore
  72.      * @Route(
  73.      *     "/maxia-tax-switch/popup",
  74.      *     name="frontend.plugins.maxia-tax-switch.popup",
  75.      *     options={"seo"="false"},
  76.      *     methods={"GET", "POST"},
  77.      *     defaults={"XmlHttpRequest"=true, "csrf_protected"=false}
  78.      * )
  79.      * @return Response
  80.      */
  81.     public function showPopup(Request $request)
  82.     {
  83.         /** @var SalesChannelContext $context */
  84.         $context = $request->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT);
  85.         $config = $this->taxSwitchService->getContext($context);
  86.         if ($config['pluginEnabled']) {
  87.             $context->addExtension('maxiaTaxSwitch', new ArrayEntity($config));
  88.             if (!$config['popupTestMode']) {
  89.                 $hidePopupFlag = $request->getSession()->get('maxia-tax-switch-hide-popup', false);
  90.                 // hide modal if customer is logged in
  91.                 if ($context->getCustomer() !== null) {
  92.                     $hidePopupFlag = true;
  93.                 }
  94.                 $request->getSession()->set('maxia-tax-switch-hide-popup', true);
  95.             } else {
  96.                 $hidePopupFlag = false;
  97.             }
  98.             $response = new JsonResponse([
  99.                 'sessionHideModalFlag' => $hidePopupFlag,
  100.                 'template' => $this->renderView(
  101.                     '@Storefront/storefront/plugins/maxia_tax_switch/modal.html.twig',
  102.                     ['context' => $context]
  103.                 )
  104.             ]);
  105.         } else {
  106.             $response = $this->redirect($request->getBaseUrl(), 301);
  107.         }
  108.         $response->headers->set('X-Robots-Tag', 'noindex,nofollow');
  109.         return $response;
  110.     }
  111.     /**
  112.      * Returns the absolute redirect url based on the 'return' parameter or referer of the request.
  113.      *
  114.      * @param Request $request
  115.      * @return string
  116.      */
  117.     protected function getReturnUrl(Request $request)
  118.     {
  119.         /** @var SalesChannelContext $context */
  120.         $context = $request->get(PlatformRequest::ATTRIBUTE_SALES_CHANNEL_CONTEXT_OBJECT);
  121.         $config = $this->taxSwitchService->getContext($context);
  122.         $returnPath = $request->request->get('return', $request->query->get('return'));
  123.         if (!$returnPath && $request->headers->get('Referer')) {
  124.             $returnPath = $request->headers->get('Referer');
  125.         }
  126.         $url = parse_url($returnPath);
  127.         if (!empty($url['host']) && $url['host'] !== $request->getHttpHost()) {
  128.             $url = $request->request->get('return', $request->query->get('return', '/'));
  129.         }
  130.         $url['host'] = $request->getHttpHost();
  131.         $url['scheme'] = $request->getScheme();
  132.         $port = $request->getPort();
  133.         if ($request->headers->get('hot-reload-mode') === '1') {
  134.             $port = 9998;
  135.         }
  136.         if ($port && !in_array((int)$port, [80, 443])) {
  137.             $url['port'] = $port;
  138.         }
  139.         if (isset($url['query'])) {
  140.             parse_str($url['query'] ?? '', $query);
  141.             if ($query) {
  142.                 if (isset($query[$config['urlParameterName']])) {
  143.                     unset($query[$config['urlParameterName']]);
  144.                 }
  145.                 $url['query'] = http_build_query($query);
  146.             }
  147.         }
  148.         return $this->buildUrl($url);
  149.     }
  150.     /**
  151.      * Build URL string from parse_url result.
  152.      *
  153.      * @param array $url
  154.      * @return bool
  155.      */
  156.     protected function buildUrl(array $url)
  157.     {
  158.         if (!$url) {
  159.             return false;
  160.         }
  161.         $newUrl = '';
  162.         if (isset($url['scheme'])) {
  163.             $newUrl .= $url['scheme'] . '://';
  164.         }
  165.         if (isset($url['user'])) {
  166.             $newUrl .= $url['user'];
  167.             if (isset($url['pass'])) {
  168.                 $newUrl .= ':'.$url['pass'];
  169.             }
  170.             $newUrl .= '@';
  171.         }
  172.         if (isset($url['host'])) {
  173.             $newUrl .= $url['host'];
  174.         }
  175.         if (isset($url['port'])) {
  176.             $newUrl .= ':'.$url['port'];
  177.         }
  178.         if (isset($url['path'])) {
  179.             $newUrl .= $url['path'];
  180.         }
  181.         if (isset($url['query'])) {
  182.             parse_str($url['query'], $params);
  183.             if ($params) {
  184.                 $newUrl .= '?'.http_build_query($params);
  185.             }
  186.         }
  187.         if (isset($url['fragment'])) {
  188.             $newUrl .= '#'.$url['fragment'];
  189.         }
  190.         return $newUrl;
  191.     }
  192. }