src/EventSubscribers/Main/UserSubscriber.php line 136

Open in your IDE?
  1. <?php
  2. namespace App\EventSubscribers\Main;
  3. use App\Entity\Main\Cart;
  4. use App\Entity\Main\User;
  5. use App\Events\Main\User\UserAnonymizedEvent;
  6. use App\Events\Main\User\UserCreatedEvent;
  7. use App\Events\Main\User\UserMadeChargebackEvent;
  8. use App\Events\Main\User\UserMadeRefundEvent;
  9. use App\Events\Main\User\UserRegisteredEvent;
  10. use App\Services\CartManager;
  11. use App\Services\EmailManager;
  12. use App\Services\Setup;
  13. use App\Services\ReferralProgramManager;
  14. use App\Services\UserManager;
  15. use App\Services\UserStorage;
  16. use Doctrine\ORM\EntityManagerInterface;
  17. use Doctrine\ORM\NonUniqueResultException;
  18. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  19. use Symfony\Component\HttpKernel\KernelInterface;
  20. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  21. /**
  22.  * Class UserSubscriber
  23.  * @package App\EventSubscribers\Main
  24.  */
  25. class UserSubscriber implements EventSubscriberInterface
  26. {
  27.     const
  28.         REWARD_APPLYING 'reward.applying',
  29.         SECURITY_INTERACTIVE_LOGIN 'security.interactive_login',
  30.         USER_MAKE_REFUND 'user.make.refund',
  31.         USER_MAKE_CHARGEBACK 'user.make.chargeback',
  32.         USER_ANONYMIZED 'user.anonymized',
  33.         USER_CREATED 'user.created'
  34.     ;
  35.     /**
  36.      * @var EntityManagerInterface
  37.      */
  38.     private $entityManager;
  39.     /**
  40.      * @var CartManager
  41.      */
  42.     private $cartFactory;
  43.     private $setup;
  44.     /**
  45.      * @var ReferralProgramManager
  46.      */
  47.     private $referralProgramManager;
  48.     /**
  49.      * @var EmailManager
  50.      */
  51.     private $emailFactory;
  52.     private KernelInterface $kernel;
  53.     private UserStorage $userStorage;
  54.     /**
  55.      * UserSubscriber constructor.
  56.      * @param EntityManagerInterface $entityManager
  57.      * @param CartManager $cartFactory
  58.      * @param ReferralProgramManager $referralProgramManager
  59.      * @param EmailManager $emailFactory
  60.      * @param KernelInterface $kernel
  61.      * @param UserStorage $userStorage
  62.      */
  63.     public function __construct(
  64.         EntityManagerInterface $entityManager,
  65.         CartManager $cartFactory,
  66.         ReferralProgramManager $referralProgramManager,
  67.         EmailManager $emailFactory,
  68.         KernelInterface $kernel,
  69.         UserStorage $userStorage,
  70.         private UserManager $userManager
  71.     ) {
  72.         $this->entityManager $entityManager;
  73.         $this->cartFactory $cartFactory;
  74.         $this->referralProgramManager $referralProgramManager;
  75.         $this->emailFactory $emailFactory;
  76.         $this->kernel $kernel;
  77.         $this->userStorage $userStorage;
  78.     }
  79.     /**
  80.      * @return array
  81.      */
  82.     public static function getSubscribedEvents()
  83.     {
  84.         return array(
  85.             self::SECURITY_INTERACTIVE_LOGIN => "userLoggedIn",
  86.             self::REWARD_APPLYING => "rewardApplying",
  87.             self::USER_MAKE_REFUND => "userMakeRefund",
  88.             self::USER_MAKE_CHARGEBACK => "userMakeChargeBack",
  89.             self::USER_ANONYMIZED => "userAnonymizedEmail",
  90.             self::USER_CREATED => "userCreated",
  91.         );
  92.     }
  93.     /**
  94.      * @param InteractiveLoginEvent $event
  95.      */
  96.     public function userLoggedIn(InteractiveLoginEvent $event)
  97.     {
  98.         $this->setup Setup::createFromEnvironment($this->cartFactory);
  99.         $cart $this->setup->getCart();
  100.         if (!$cart instanceof Cart) {
  101.             return;
  102.         }
  103.         // If we are in a reset password procedure, we assign the user to the cart.
  104.         if (null === $cart->getUser()) {
  105.             $cart->setUser($this->setup->getUser());
  106.             $this->entityManager->flush();
  107.         }
  108.     }
  109.     /**
  110.      * @param UserRegisteredEvent $event
  111.      * @throws NonUniqueResultException
  112.      */
  113.     public function rewardApplying(UserRegisteredEvent $event)
  114.     {
  115.         $tracking $event->getTracking();
  116.         $user $event->getUser();
  117.         $this->referralProgramManager->applyForReward($tracking$user$event->getSite());
  118.     }
  119.     /**
  120.      * @param UserMadeRefundEvent $event
  121.      */
  122.     public function userMakeRefund(UserMadeRefundEvent $event)
  123.     {
  124.         $user $event->getUser();
  125.         // Disable all promo codes for the user who make refund.
  126.         $this->referralProgramManager->disableUserPromoCodes($user);
  127.     }
  128.     /**
  129.      * @param UserMadeChargebackEvent $event
  130.      */
  131.     public function userMakeChargeBack(UserMadeChargebackEvent $event)
  132.     {
  133.         $user $event->getUser();
  134.         // Disable all promo codes for the user who make charge back.
  135.         $this->referralProgramManager->disableUserPromoCodes($user);
  136.     }
  137.     /**
  138.      * @param UserAnonymizedEvent $event
  139.      * @throws \Twig\Error\LoaderError
  140.      * @throws \Twig\Error\RuntimeError
  141.      * @throws \Twig\Error\SyntaxError
  142.      */
  143.     public function userAnonymizedEmail(UserAnonymizedEvent $event)
  144.     {
  145.         $user $event->getUser();
  146.         $this->emailFactory->sendUserAnonymizedEmail($user);
  147.     }
  148.     /**
  149.      * @param UserCreatedEvent $event
  150.      */
  151.     public function userCreated(UserCreatedEvent $event)
  152.     {
  153.         $user $event->getUser();
  154.         $this->userManager->updateUser($user);
  155.         $this->userStorage->setUser($user);
  156.     }
  157. }