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($optionstrue);
  36.         }
  37.         if (is_string($labels)) {
  38.             $labels json_decode($labelstrue);
  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. }