src/Bidcoz/Bundle/UserBundle/EventListener/UserRegistrationListener.php line 46

Open in your IDE?
  1. <?php
  2. namespace Bidcoz\Bundle\UserBundle\EventListener;
  3. use Bidcoz\Bundle\CoreBundle\Entity\Config;
  4. use Bidcoz\Bundle\CoreBundle\Services\MailchimpManager;
  5. use Bidcoz\Bundle\UserBundle\PhoneNumberAssociationManager;
  6. use Doctrine\Persistence\ObjectManager;
  7. use FOS\UserBundle\Event\FilterUserResponseEvent;
  8. use FOS\UserBundle\Event\FormEvent;
  9. use FOS\UserBundle\Event\UserEvent;
  10. use FOS\UserBundle\FOSUserEvents;
  11. use RS\DiExtraBundle\Annotation as DI;
  12. use Symfony\Component\Security\Core\Security;
  13. /**
  14.  * @DI\Service
  15.  */
  16. class UserRegistrationListener
  17. {
  18.     public const TEST_DOMAIN_REGEX '/test\.com$/';
  19.     private $em;
  20.     private $security;
  21.     private $config;
  22.     private $phoneNumberAssociationManager;
  23.     /**
  24.      * @DI\InjectParams({
  25.      *      "em" = @DI\Inject("doctrine.orm.default_entity_manager"),
  26.      *      "phoneNumberAssociationManager" = @DI\Inject("phone_number_association_manager"),
  27.      *      "security" = @DI\Inject("security.helper")
  28.      *     * })
  29.      */
  30.     public function __construct(ObjectManager $emPhoneNumberAssociationManager $phoneNumberAssociationManagerSecurity $securityMailchimpManager $mailchimpManager)
  31.     {
  32.         $this->em                            $em;
  33.         $this->security                      $security;
  34.         $this->phoneNumberAssociationManager $phoneNumberAssociationManager;
  35.         $this->mailchimpManager              $mailchimpManager;
  36.     }
  37.     /**
  38.      * @DI\Observe(FOSUserEvents::REGISTRATION_INITIALIZE)
  39.      */
  40.     public function onRegistrationInit(UserEvent $event)
  41.     {
  42.         $user $this->security->getUser();
  43.         if (!$user) {
  44.             $user $event->getUser();
  45.             $user->setUsername(uniqid(''true));
  46.             $user->setUserTerms($this->getCurrentTerms());
  47.         }
  48.     }
  49.     /**
  50.      * @DI\Observe(FOSUserEvents::REGISTRATION_COMPLETED)
  51.      */
  52.     public function onRegistrationComplete(FilterUserResponseEvent $event)
  53.     {
  54.         $user  $event->getUser();
  55.         $user->setLoggedIn();
  56.         $email $user->getEmailCanonical();
  57.         if (=== preg_match(self::TEST_DOMAIN_REGEX$email)) {
  58.             $user->setTest(true);
  59.         }
  60.     }
  61.     /**
  62.      * @DI\Observe(FOSUserEvents::REGISTRATION_SUCCESS)
  63.      */
  64.     public function onRegistrationSuccess(FormEvent $event)
  65.     {
  66.         $user $event->getForm()->getData();
  67.         $this->phoneNumberAssociationManager->associateNumbers($user);
  68.     }
  69.     protected function getCurrentTerms()
  70.     {
  71.         return $this->getCurrentConfig()->getUserTerms();
  72.     }
  73.     private function getCurrentConfig()
  74.     {
  75.         if (!$this->config) {
  76.             $this->config $this->em->getRepository(Config::class)->findActiveConfig();
  77.         }
  78.         return $this->config;
  79.     }
  80. }