src/Component/AddOn/EventListener/AddOnListener.php line 22

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\AddOn\EventListener;
  4. use BitBag\OpenMarketplace\Component\AddOn\Entity\AddOnInterface;
  5. use BitBag\OpenMarketplace\Component\AddOn\Provider\ProductProviderInterface;
  6. use BitBag\OpenMarketplace\Component\AddOn\Synchronizer\ProductSynchronizerInterface;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  9. final class AddOnListener
  10. {
  11.     public function __construct(
  12.         private ProductProviderInterface $provider,
  13.         private ProductSynchronizerInterface $synchronizer,
  14.         private EntityManagerInterface $entityManager,
  15.         ) {
  16.     }
  17.     public function synchronizeProduct(ResourceControllerEvent $event): void
  18.     {
  19.         $addOn $event->getSubject();
  20.         if (!$addOn instanceof AddOnInterface) {
  21.             return;
  22.         }
  23.         $product $this->provider->provideProduct($addOn);
  24.         $productVariant $this->provider->provideProductVariant($product$addOn);
  25.         $this->synchronizer->synchronizeTranslations($addOn$product);
  26.         $this->synchronizer->synchronizePricing($addOn$product$productVariant);
  27.         $addOn->setProduct($product);
  28.         $this->entityManager->persist($product);
  29.         $this->entityManager->flush();
  30.     }
  31. }