<?phpnamespace App\EventSubscriber\OrderSummary;use App\Ecommerce\Model\Order;use App\Model\Customer;use Exception;use Factory\CartBundle\Classes\CartEvents;use Factory\CartBundle\Classes\DataMapper\CartDataMapper;use Symfony\Component\HttpFoundation\JsonResponse;use Factory\CartBundle\Event\CartEvent;use Symfony\Component\EventDispatcher\EventSubscriberInterface;use Factory\CartBundle\Repository\CartRepository;use Pimcore\Bundle\EcommerceFrameworkBundle\EnvironmentInterface;use Pimcore\Bundle\EcommerceFrameworkBundle\Factory;use Symfony\Component\HttpFoundation\RequestStack;use Symfony\Component\Security\Core\Security;use Symfony\Component\HttpFoundation\Request;use App\Ecommerce\PriceSystem\PriceSystemRule\Processor as PriceSystemRuleProcessor;use App\Repository\OrderRepository;use Pimcore\Model\DataObject\PriceSystemRule;class CartActionSubscriber implements EventSubscriberInterface{ /** * @var Security */ protected $security; /** * @var RequestStack */ protected $requestStack; /** * @var CartRepository */ protected $cartRepository; /** * @var EnvironmentInterface */ protected $environment; /** * @var OrderRepository */ protected $orderRepository; public static function getSubscribedEvents() { return [ CartEvents::CART_BEFORE_FETCH => [ ['fetchOrder', 10] ] ]; } public function __construct( Security $security, RequestStack $requestStack, CartRepository $cartRepository, OrderRepository $orderRepository, EnvironmentInterface $environment ) { $this->security = $security; $this->requestStack = $requestStack; $this->cartRepository = $cartRepository; $this->environment = $environment; $this->orderRepository = $orderRepository; } protected function getRequest(): Request { return $this->requestStack->getMasterRequest(); } protected function getOrderFromReferer() { if ($this->getRequest()->headers->get('X-ecommerce-store-name') != 'orderSummary') { return null; } $httpReferer = $this->getRequest()->server->get('HTTP_REFERER'); if (preg_match('/\/(order\-quote|checkout|quote)\/(\w+)\/(success(-(sent|save))?|thankyou|fail)/', $httpReferer, $matches)) { $path = base64_decode(hex2bin($matches[2])); return Order::getByPath($path); } if (preg_match('/\/account\/(orders|quotes)\/(\d+)\/preview/', $httpReferer, $matches)) { return Order::getById($matches[2]); } return null; } public function fetchOrder(CartEvent $event) { if (!$order = $this->getOrderFromReferer()) { return; } $event->stopPropagation(); $event->setResponse(new JsonResponse([ 'data' => (new CartDataMapper($order))->all($this->getRequest()) ])); }}