custom/plugins/MeteorPromotionGift/src/Subscribers/RemovePromoWrapperFromOrder.php line 13

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace Meteor\PromotionGift\Subscribers;
  4. use Meteor\PromotionGift\Core\Checkout\Promotion\Cart\GiftProcessor;
  5. use Shopware\Core\Checkout\Cart\Order\CartConvertedEvent;
  6. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  7. final class RemovePromoWrapperFromOrder implements EventSubscriberInterface
  8. {
  9.     public function __invoke(CartConvertedEvent $event): void
  10.     {
  11.         $convertedCart $event->getConvertedCart();
  12.         if (!array_key_exists('lineItems'$convertedCart)) {
  13.             return;
  14.         }
  15.         $convertedCart['lineItems'] = $this->removePromotionGiftWrappersFromLineItems(
  16.             $convertedCart['lineItems']
  17.         );
  18.         $convertedCart['lineItems'] = $this->removeParentReferenceFromGiftProductLineItems(
  19.             $convertedCart['lineItems']
  20.         );
  21.         $event->setConvertedCart($convertedCart);
  22.     }
  23.     public static function getSubscribedEvents(): array
  24.     {
  25.         return [
  26.             CartConvertedEvent::class => '__invoke',
  27.         ];
  28.     }
  29.     private function removePromotionGiftWrappersFromLineItems(array $lineItems): array
  30.     {
  31.         return array_filter($lineItems, function (array $lineItem) {
  32.             $lineItemType $lineItem['payload']['line_item_type'] ?? null;
  33.             if (null === $lineItemType) {
  34.                 return true;
  35.             }
  36.             return GiftProcessor::PROMOTION_GIFT_WRAPPER_TYPE !== $lineItemType;
  37.         });
  38.     }
  39.     private function removeParentReferenceFromGiftProductLineItems(array $lineItems): array
  40.     {
  41.         return array_map(function (array $lineItem) {
  42.             $lineItemType $lineItem['payload']['line_item_type'] ?? null;
  43.             if (null === $lineItemType) {
  44.                 return $lineItem;
  45.             }
  46.             if (GiftProcessor::PROMOTION_GIFT_PRODUCT_TYPE !== $lineItemType) {
  47.                 return $lineItem;
  48.             }
  49.             $lineItem['parentId'] = null;
  50.             return $lineItem;
  51.         }, $lineItems);
  52.     }
  53. }