src/Component/Core/Vendor/EventListener/RegisterListener.php line 66

Open in your IDE?
  1. <?php
  2. /*
  3.  * This file has been created by developers from BitBag.
  4.  * Feel free to contact us once you face any issues or want to start
  5.  * You can find more information about us on https://bitbag.io and write us
  6.  * an email on hello@bitbag.io.
  7.  */
  8. declare(strict_types=1);
  9. namespace BitBag\OpenMarketplace\Component\Core\Vendor\EventListener;
  10. use BitBag\OpenMarketplace\Component\Core\Vendor\Exception\ShopUserNotFoundException;
  11. use BitBag\OpenMarketplace\Component\Customer\Model\CustomerInterface;
  12. use BitBag\OpenMarketplace\Component\Organization\Entity\OrganizationInterface;
  13. use BitBag\OpenMarketplace\Component\Vendor\Entity\BackgroundImageInterface;
  14. use BitBag\OpenMarketplace\Component\Vendor\Entity\LogoImageInterface;
  15. use BitBag\OpenMarketplace\Component\Vendor\Entity\ShopUserInterface;
  16. use BitBag\OpenMarketplace\Component\Vendor\Entity\VendorInterface;
  17. use BitBag\OpenMarketplace\Component\Vendor\Generator\SlugGeneratorInterface;
  18. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  19. use Sylius\Component\Core\Uploader\ImageUploaderInterface;
  20. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  21. use Symfony\Component\Security\Core\Exception\TokenNotFoundException;
  22. final class RegisterListener
  23. {
  24.     public function __construct(
  25.         private SlugGeneratorInterface $vendorSlugGenerator,
  26.         private ImageUploaderInterface $fileUploader,
  27.         private TokenStorageInterface $tokenStorage,
  28.         ) {
  29.     }
  30.     public function uploadLogoImage(ResourceControllerEvent $event): void
  31.     {
  32.         /** @var VendorInterface $vendor */
  33.         $vendor $event->getSubject();
  34.         /** @var LogoImageInterface $vendorImage */
  35.         $vendorImage $vendor->getImage();
  36.         if (null !== $vendorImage) {
  37.             $this->fileUploader->upload($vendorImage);
  38.             $vendorImage->setOwner($vendor);
  39.         }
  40.     }
  41.     public function uploadBackgroundImage(ResourceControllerEvent $event): void
  42.     {
  43.         /** @var VendorInterface $vendor */
  44.         $vendor $event->getSubject();
  45.         /** @var BackgroundImageInterface $vendorBackgroundImage */
  46.         $vendorBackgroundImage $vendor->getBackgroundImage();
  47.         if (null !== $vendorBackgroundImage) {
  48.             $this->fileUploader->upload($vendorBackgroundImage);
  49.             $vendorBackgroundImage->setOwner($vendor);
  50.         }
  51.     }
  52.     public function generateSlug(ResourceControllerEvent $event): void
  53.     {
  54.         /** @var VendorInterface $vendor */
  55.         $vendor $event->getSubject();
  56.         if (null === $vendor->getCompanyName()) {
  57.             throw new \Exception('Company name cannot be empty.');
  58.         }
  59.         $vendor->setSlug($this->vendorSlugGenerator->generateSlug($vendor->getCompanyName()));
  60.     }
  61.     public function connectShopUser(ResourceControllerEvent $event): void
  62.     {
  63.         /** @var VendorInterface $vendor */
  64.         $vendor $event->getSubject();
  65.         $token $this->tokenStorage->getToken();
  66.         if (null === $token) {
  67.             throw new TokenNotFoundException();
  68.         }
  69.         /** @var ShopUserInterface|null $shopUser */
  70.         $shopUser $token->getUser();
  71.         if (null === $shopUser) {
  72.             throw new ShopUserNotFoundException();
  73.         }
  74.         /** @var CustomerInterface $customer */
  75.         $customer $shopUser->getCustomer();
  76.         /** @var OrganizationInterface $organization */
  77.         $organization $customer->getOrganization();
  78.         $organization->setVendor($vendor);
  79.         $vendor->setOrganization($organization);
  80.     }
  81. }