src/Component/Organization/EventListener/SimpleRegistrationEventListener.php line 29

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace BitBag\OpenMarketplace\Component\Organization\EventListener;
  4. use BitBag\OpenMarketplace\Component\Core\Shop\Checker\ReCaptchaCheckerInterface;
  5. use BitBag\OpenMarketplace\Component\Customer\Model\CustomerInterface;
  6. use BitBag\OpenMarketplace\Component\Inquiry\Entity\InquiryInterface;
  7. use BitBag\OpenMarketplace\Component\Inquiry\Entity\MessageInterface as InquiryMessageInterface;
  8. use BitBag\OpenMarketplace\Component\Organization\Email\OrganizationEmailManagerInterface;
  9. use BitBag\OpenMarketplace\Component\Organization\Entity\OrganizationInterface;
  10. use BitBag\OpenMarketplace\Component\Organization\Manager\RegistrationConflictManager;
  11. use BitBag\OpenMarketplace\Component\RFQ\Entity\MessageInterface as RFQMessageInterface;
  12. use BitBag\OpenMarketplace\Component\RFQ\Entity\RFQInterface;
  13. use BitBag\OpenMarketplace\Component\Vendor\Repository\CustomerRepositoryInterface;
  14. use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
  15. final class SimpleRegistrationEventListener
  16. {
  17.     public function __construct(
  18.         private CustomerRepositoryInterface $customerRepository,
  19.         private OrganizationEmailManagerInterface $emailManager,
  20.         private RegistrationConflictManager $registrationConflictManager,
  21.         private ReCaptchaCheckerInterface $reCaptchaChecker
  22.     ) {
  23.     }
  24.     public function __invoke(ResourceControllerEvent $event): void
  25.     {
  26.         $object $event->getSubject();
  27.         if (!$object instanceof InquiryInterface && !$object instanceof RFQInterface) {
  28.             return;
  29.         }
  30.         if (!$this->reCaptchaChecker->checkIsValid($object->getRecaptcha())) {
  31.             $event->stop('open_marketplace.recaptcha.invalid''error');
  32.             return;
  33.         }
  34.         $customer $object->getCustomer();
  35.         if (!$customer instanceof CustomerInterface) {
  36.             return;
  37.         }
  38.         $this->registrationConflictManager->manage($event);
  39.         if ($event->isPropagationStopped()) {
  40.             return;
  41.         }
  42.         $this->assignToOrganization($customer$objecttrue);
  43.         $this->customerRepository->add($customer);
  44.         $this->emailManager->sendActivationEmail($customer$object);
  45.     }
  46.     private function assignToOrganization(
  47.         CustomerInterface $customer,
  48.         InquiryInterface|RFQInterface $object,
  49.         bool $assignEmail false
  50.     ): void {
  51.         $organization $customer->getOrganization();
  52.         if (!$organization instanceof OrganizationInterface) {
  53.             return;
  54.         }
  55.         $object->setBuyer($organization);
  56.         if (true === $assignEmail) {
  57.             $organization->setEmail($customer->getEmail() ?? '');
  58.         }
  59.         /** @var RFQMessageInterface|InquiryMessageInterface $message */
  60.         foreach ($object->getMessages() as $message) {
  61.             $message->setCustomer($customer);
  62.         }
  63.     }
  64. }