custom/static-plugins/WexoGreenAlternatives/src/Subscriber/WexoGreenAlternativesCartSubscriber.php line 33

Open in your IDE?
  1. <?php declare(strict_types=1);
  2. namespace Wexo\GreenAlternatives\Subscriber;
  3. use Shopware\Core\Checkout\Cart\LineItem\LineItem;
  4. use Shopware\Core\Framework\DataAbstractionLayer\EntityRepository;
  5. use Shopware\Core\Framework\Struct\ArrayStruct;
  6. use Shopware\Storefront\Page\Checkout\Cart\CheckoutCartPageLoadedEvent;
  7. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  8. use Wexo\GreenAlternatives\Service\GreenAlternativeService;
  9. class WexoGreenAlternativesCartSubscriber implements EventSubscriberInterface
  10. {
  11.     private GreenAlternativeService $alternativeService;
  12.     private EntityRepository $greenAlternativeRepository;
  13.     public function __construct(
  14.         GreenAlternativeService   $alternativeService,
  15.         EntityRepository $greenAlternativeRepository
  16.     ) {
  17.         $this->alternativeService $alternativeService;
  18.         $this->greenAlternativeRepository $greenAlternativeRepository;
  19.     }
  20.     public static function getSubscribedEvents(): array
  21.     {
  22.         return [
  23.             CheckoutCartPageLoadedEvent::class => 'onCheckoutCartPageLoaded'
  24.         ];
  25.     }
  26.     public function onCheckoutCartPageLoaded(CheckoutCartPageLoadedEvent $event)
  27.     {
  28.         $lineItems $event->getPage()->getCart()->getLineItems();
  29.         $greenAlternatives $lineItems->filter(
  30.         /* Filter out any non products, such as custom products and promotions */
  31.             fn($item) => $item->getType() === LineItem::PRODUCT_LINE_ITEM_TYPE
  32.         )->map(fn($lineItem) => [
  33.             'current' => $lineItem,
  34.             'alternative' => $this->alternativeService->getGreenAlternativeByPriority(
  35.                 $lineItem->getId(),
  36.                 $event->getSalesChannelContext()->getContext()
  37.             )
  38.             ?? null
  39.         ]);
  40.         foreach ($greenAlternatives as $greenAlternative) {
  41.             if ($greenAlternative['alternative']) {
  42.                 $lineItems->addExtension('wexoGreenAlternative', new ArrayStruct(['alternativesAvailable' => true]));
  43.                 break;
  44.             }
  45.         }
  46.     }
  47. }