src/EventSubscriber/OrderSummary/CartActionSubscriber.php line 100

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscriber\OrderSummary;
  3. use App\Ecommerce\Model\Order;
  4. use App\Model\Customer;
  5. use Exception;
  6. use Factory\CartBundle\Classes\CartEvents;
  7. use Factory\CartBundle\Classes\DataMapper\CartDataMapper;
  8. use Symfony\Component\HttpFoundation\JsonResponse;
  9. use Factory\CartBundle\Event\CartEvent;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Factory\CartBundle\Repository\CartRepository;
  12. use Pimcore\Bundle\EcommerceFrameworkBundle\EnvironmentInterface;
  13. use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;
  14. use Symfony\Component\HttpFoundation\RequestStack;
  15. use Symfony\Component\Security\Core\Security;
  16. use Symfony\Component\HttpFoundation\Request;
  17. use App\Ecommerce\PriceSystem\PriceSystemRule\Processor as PriceSystemRuleProcessor;
  18. use App\Repository\OrderRepository;
  19. use Pimcore\Model\DataObject\PriceSystemRule;
  20. class CartActionSubscriber implements EventSubscriberInterface
  21. {
  22.     /**
  23.      * @var Security
  24.      */
  25.     protected $security;
  26.     /**
  27.      * @var RequestStack
  28.      */
  29.     protected $requestStack;
  30.     /**
  31.      * @var CartRepository
  32.      */
  33.     protected $cartRepository;
  34.     /**
  35.      * @var EnvironmentInterface
  36.      */
  37.     protected $environment;
  38.     /**
  39.      * @var OrderRepository
  40.      */
  41.     protected $orderRepository;
  42.     public static function getSubscribedEvents()
  43.     {
  44.         return [
  45.             CartEvents::CART_BEFORE_FETCH => [
  46.                 ['fetchOrder'10]
  47.             ]
  48.         ];
  49.     }
  50.     public function __construct(
  51.         Security $security,
  52.         RequestStack $requestStack,
  53.         CartRepository $cartRepository,
  54.         OrderRepository $orderRepository,
  55.         EnvironmentInterface $environment
  56.     ) {
  57.         $this->security $security;
  58.         $this->requestStack $requestStack;
  59.         $this->cartRepository $cartRepository;
  60.         $this->environment $environment;
  61.         $this->orderRepository $orderRepository;
  62.     }
  63.     protected function getRequest(): Request
  64.     {
  65.         return $this->requestStack->getMasterRequest();
  66.     }
  67.     protected function getOrderFromReferer()
  68.     {
  69.         if ($this->getRequest()->headers->get('X-ecommerce-store-name') != 'orderSummary') {
  70.             return null;
  71.         }
  72.         $httpReferer $this->getRequest()->server->get('HTTP_REFERER');
  73.         if (preg_match('/\/(order\-quote|checkout|quote)\/(\w+)\/(success(-(sent|save))?|thankyou|fail)/'$httpReferer$matches)) {
  74.             $path base64_decode(hex2bin($matches[2]));
  75.             return Order::getByPath($path);
  76.         }
  77.         if (preg_match('/\/account\/(orders|quotes)\/(\d+)\/preview/'$httpReferer$matches)) {
  78.             return Order::getById($matches[2]);
  79.         }
  80.         return null;
  81.     }
  82.     public function fetchOrder(CartEvent $event)
  83.     {
  84.         if (!$order $this->getOrderFromReferer()) {
  85.             return;
  86.         }
  87.         $event->stopPropagation();
  88.         $event->setResponse(new JsonResponse([
  89.             'data' => (new CartDataMapper($order))->all($this->getRequest())
  90.         ]));
  91.     }
  92. }