custom/plugins/dkcProductoptions/src/Subscriber/CartPriceSubscriber.php line 25

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Dkc\Productoptions\Subscriber;
  3. use Shopware\Core\Checkout\Cart\Event\BeforeLineItemAddedEvent;
  4. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  5. use Symfony\Component\HttpFoundation\RequestStack;
  6. class CartPriceSubscriber implements EventSubscriberInterface
  7. {
  8.     private RequestStack $requestStack;
  9.     public function __construct(RequestStack $requestStack)
  10.     {
  11.         $this->requestStack = $requestStack;
  12.     }
  13.     public static function getSubscribedEvents(): array
  14.     {
  15.         return [
  16.             BeforeLineItemAddedEvent::class => ['onBeforeLineItemAdded', 9999],
  17.         ];
  18.     }
  19.     public function onBeforeLineItemAdded(BeforeLineItemAddedEvent $event): void
  20.     {
  21.         $lineItem = $event->getLineItem();
  22.         $lineItemId = $lineItem->getId();
  23.         $request = $this->requestStack->getCurrentRequest();
  24.         if (!$request) {
  25.             return;
  26.         }
  27.         $allParams = $request->request->all();
  28.         if (!isset($allParams['lineItems'][$lineItemId]['payload']['dkc_product_options'])) {
  29.             return;
  30.         }
  31.         $options = $allParams['lineItems'][$lineItemId]['payload']['dkc_product_options'];
  32.         $price = $allParams['lineItems'][$lineItemId]['payload']['dkc_product_options_price'] ?? 0;
  33.         $labels = $allParams['lineItems'][$lineItemId]['payload']['dkc_product_options_labels'] ?? null;
  34.         if (is_string($options)) {
  35.             $options = json_decode($options, true);
  36.         }
  37.         if (is_string($labels)) {
  38.             $labels = json_decode($labels, true);
  39.         }
  40.         $lineItem->setPayloadValue('dkc_product_options', $options);
  41.         $lineItem->setPayloadValue('dkc_product_options_price', (float) $price);
  42.         if ($labels) {
  43.             $lineItem->setPayloadValue('dkc_product_options_labels', $labels);
  44.         }
  45.     }
  46. }