src/EventSubscriber/UserStatusWorkflowSubscriber.php line 319

Open in your IDE?
  1. <?php
  2.     namespace App\EventSubscriber;
  3.     use App\Entity\User;
  4.     use App\Factory\Platform\MailerFactory;
  5.     use App\Services\Common\Email\MailTypes;
  6.     use App\Services\Common\MailerService;
  7.     use DateTime;
  8.     use Doctrine\ORM\EntityManagerInterface;
  9.     use Exception;
  10.     use ReflectionException;
  11.     use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  12.     use Symfony\Component\Workflow\Event\Event;
  13.     use Symfony\Contracts\HttpClient\Exception\ClientExceptionInterface;
  14.     use Symfony\Contracts\HttpClient\Exception\RedirectionExceptionInterface;
  15.     use Symfony\Contracts\HttpClient\Exception\ServerExceptionInterface;
  16.     use Symfony\Contracts\HttpClient\Exception\TransportExceptionInterface;
  17.     /**
  18.      * Subscriber pour écouter les events sur le workflow des users
  19.      */
  20.     class UserStatusWorkflowSubscriber implements EventSubscriberInterface
  21.     {
  22.         private MailerService          $mailerService;
  23.         private EntityManagerInterface $em;
  24.         public function __construct(
  25.             MailerService $mailerService,
  26.             EntityManagerInterface $em
  27.         ) {
  28.             $this->mailerService $mailerService;
  29.             $this->em            $em;
  30.         }
  31.         /**
  32.          * Quand une demande d'inscription est acceptée par un admin
  33.          *
  34.          * @param   Event  $event
  35.          *
  36.          * @return void
  37.          *
  38.          * @throws ReflectionException
  39.          * @throws ClientExceptionInterface
  40.          * @throws RedirectionExceptionInterface
  41.          * @throws ServerExceptionInterface
  42.          * @throws TransportExceptionInterface
  43.          * @throws Exception
  44.          */
  45.         public function onWorkflowUserStatusAcceptRegister(Event $event): void
  46.         {
  47.             /** @var User $user */
  48.             $user $event->getSubject();
  49.             $this->mailerService->createApiMailRequest(MailTypes::REGISTRATION_VALIDATED)
  50.                                 ->addRecipientToRequest($user)
  51.                                 ->send()
  52.             ;
  53.         }
  54.         /**
  55.          * Quand un user accepte les CGU
  56.          *
  57.          * @param   Event  $event
  58.          *
  59.          * @return void
  60.          */
  61.         public function onWorkflowUserStatusAcceptCgu(Event $event): void
  62.         {
  63.             /** @var User $user */
  64.             $user $event->getSubject();
  65.             $user->setCguAt(new DateTime());
  66.         }
  67.         /**
  68.          * Quand un user refuse les CGU
  69.          *
  70.          * @param   Event  $event
  71.          *
  72.          * @return void
  73.          * @throws Exception|TransportExceptionInterface
  74.          */
  75.         public function onWorkflowUserStatusRejectCgu(Event $event): void
  76.         {
  77.             /** @var User $user */
  78.             $user $event->getSubject();
  79.             $user->setCguAt(NULL);
  80.             // Pour les installateurs DAIKIN, le mail n'est présent que dans la config de Daikin
  81.             $this->mailerService->createApiMailRequest(MailTypes::USER_REJECT_CGU);
  82.             $commercial $user->getCommercial();
  83.             if ($commercial !== NULL) {
  84.                 $this->mailerService->addRecipientToRequest($commercialMailerFactory::buildRejectCGU($user));
  85.                 $agencyManager $commercial->getParents();
  86.                 if (count($agencyManager) > 0) {
  87.                     $this->mailerService->addRecipientToRequest($agencyManager], MailerFactory::buildRejectCGU($user));
  88.                 }
  89.             }
  90.             $admins $this->em->getRepository(User::class)->findUsersByJob('ADMIN_1');
  91.             foreach ($admins as $admin) {
  92.                 $this->mailerService->addRecipientToRequest($adminMailerFactory::buildRejectCGU($user));
  93.             }
  94.             $this->mailerService->send();
  95.             // FIN
  96.         }
  97.         /**
  98.          * Quand les CGU sont renvoyées
  99.          *
  100.          * @param   Event  $event
  101.          *
  102.          * @return void
  103.          *
  104.          * @throws Exception|TransportExceptionInterface
  105.          */
  106.         public function onWorkflowUserStatusResendCgu(Event $event): void
  107.         {
  108.             /** @var User $user */
  109.             $user $event->getSubject();
  110.             $token md5(uniqid(''TRUE));
  111.             $user->setCguAt(NULL)
  112.                  ->setPassword($token)
  113.                  ->setWelcomeEmail(new DateTime())
  114.             ;
  115.             if (isset($event->getContext()[ 'async_mail' ]) && $event->getContext()[ 'async_mail' ] === TRUE) {
  116.                 $this->mailerService->addRecipientToRequest($userMailerFactory::buildAcceptCguFirst($user->getPassword()));
  117.             } else {
  118.                 $this->mailerService->createApiMailRequest(MailTypes::ACCEPT_CGU_FIRST)
  119.                                     ->addRecipientToRequest($userMailerFactory::buildAcceptCguFirst($user->getPassword()))
  120.                                     ->send()
  121.                 ;
  122.             }
  123.         }
  124.         /**
  125.          * Quand un user se désinscrit
  126.          *
  127.          * @param   Event  $event
  128.          *
  129.          * @return void
  130.          * @throws Exception|TransportExceptionInterface
  131.          */
  132.         public function onWorkflowUserStatusUnsubscribe(Event $event): void
  133.         {
  134.             /** @var User $user */
  135.             $user $event->getSubject();
  136.             $user->setUnsubscribedAt(new DateTime());
  137.             // Pour les installateurs DAIKIN, le mail n'est présent que dans la config de Daikin
  138.             $this->mailerService->createApiMailRequest(MailTypes::USER_UNSUBSCRIBE);
  139.             $commercial $user->getCommercial();
  140.             if ($commercial !== NULL) {
  141.                 $this->mailerService->addRecipientToRequest($commercialMailerFactory::buildUnsubscribe($user));
  142.                 $agencyManager $commercial->getParents();
  143.                 if (count($agencyManager) > 0) {
  144.                     $this->mailerService->addRecipientToRequest($agencyManager], MailerFactory::buildUnsubscribe($user));
  145.                 }
  146.             }
  147.             $admins $this->em->getRepository(User::class)->findUsersByJob('ADMIN_1');
  148.             foreach ($admins as $admin) {
  149.                 $this->mailerService->addRecipientToRequest($adminMailerFactory::buildUnsubscribe($user));
  150.             }
  151.             $this->mailerService->send();
  152.             // FIN
  153.         }
  154.         /**
  155.          * Quand un user est désactivé
  156.          *
  157.          * @param   Event  $event
  158.          *
  159.          * @return void
  160.          */
  161.         public function onWorkflowUserStatusDisable(Event $event): void
  162.         {
  163.             /** @var User $user */
  164.             $user $event->getSubject();
  165.             $user->setDisabledAt(new DateTime());
  166.         }
  167.         /**
  168.          * Quand un user est réactivé
  169.          *
  170.          * @param   Event  $event
  171.          *
  172.          * @return void
  173.          */
  174.         public function onWorkflowUserStatusEnable(Event $event): void
  175.         {
  176.             /** @var User $user */
  177.             $user $event->getSubject();
  178.             $user->setDisabledAt(NULL);
  179.         }
  180.         /**
  181.          * Quand un réinscrit par un admin
  182.          *
  183.          * @param   Event  $event
  184.          *
  185.          * @return void
  186.          */
  187.         public function onWorkflowUserStatusReRegistration(Event $event): void
  188.         {
  189.             /** @var User $user */
  190.             $user $event->getSubject();
  191.             $user->setUnsubscribedAt(NULL)
  192.                  ->setUnsubscribeReason(NULL)
  193.             ;
  194.         }
  195.         /**
  196.          * Quand un user est archivé manuellement
  197.          *
  198.          * @param   Event  $event
  199.          *
  200.          * @return void
  201.          */
  202.         public function onWorkflowUserStatusArchiveManual(Event $event): void
  203.         {
  204.             /** @var User $user */
  205.             $user $event->getSubject();
  206.             $user->setArchivedAt(new DateTime())
  207.                  ->setCguAt(NULL)
  208.             ;
  209.             if ($user->getArchiveReason() === NULL) {
  210.                 $user->setArchiveReason('Archivage manuel');
  211.             }
  212.         }
  213.         /**
  214.          * Quand un user est archivé automatiquement
  215.          *
  216.          * @param   Event  $event
  217.          *
  218.          * @return void
  219.          */
  220.         public function onWorkflowUserStatusArchiveAuto(Event $event): void
  221.         {
  222.             /** @var User $user */
  223.             $user $event->getSubject();
  224.             $user->setArchivedAt(new DateTime())
  225.                  ->setArchiveReason('Archivage automatique')
  226.                  ->setCguAt(NULL)
  227.             ;
  228.         }
  229.         /**
  230.          * Quand on désarchive un user
  231.          *
  232.          * @param   Event  $event
  233.          *
  234.          * @return void
  235.          * @throws Exception|TransportExceptionInterface
  236.          */
  237.         public function onWorkflowUserStatusUnarchive(Event $event): void
  238.         {
  239.             /** @var User $user */
  240.             $user $event->getSubject();
  241.             $user->setArchivedAt(NULL)
  242.                  ->setArchiveReason(NULL)
  243.                  ->setDeletedAt(NULL)
  244.                  ->setCguAt(NULL)
  245.                  ->setUnsubscribedAt(NULL)
  246.                  ->setUnsubscribeReason(NULL)
  247.                  ->setWelcomeEmail(new DateTime())
  248.                  ->setPassword(md5(uniqid(''TRUE)))
  249.             ;
  250.             $this->mailerService->createApiMailRequest(MailTypes::ACCEPT_CGU_FIRST)
  251.                                 ->addRecipientToRequest($userMailerFactory::buildAcceptCguFirst($user->getPassword()))
  252.                                 ->send()
  253.             ;
  254.         }
  255.         /**
  256.          * Quand on soft delete un user
  257.          *
  258.          * @param   Event  $event
  259.          *
  260.          * @return void
  261.          * @throws Exception
  262.          */
  263.         public function onWorkflowUserStatusSoftDelete(Event $event): void
  264.         {
  265.             /** @var User $user */
  266.             $user $event->getSubject();
  267.             $anonymousData substr(md5($user->getEmail()), 030);
  268.             $user->setEmail($anonymousData.'@__deleted__')
  269.                  ->setCivility(NULL)
  270.                  ->setFirstName($anonymousData)
  271.                  ->setLastName($anonymousData)
  272.                  ->setPhone(NULL)
  273.                  ->setMobile(NULL)
  274.                  ->setAddress1(NULL)
  275.                  ->setAddress2(NULL)
  276.                  ->setAddress3(NULL)
  277.                  ->setCity(NULL)
  278.                  ->setPostcode(NULL)
  279.                  ->setCompany(NULL)
  280.                  ->setDistributor(NULL)
  281.                  ->setDistributor2(NULL)
  282.                  ->setSapAccount(NULL)
  283.                  ->setUsername(NULL)
  284.                  ->setUsernameCanonical(NULL)
  285.                  ->setEmailCanonical(NULL)
  286.                  ->setSalt(NULL)
  287.                  ->setLastLogin(NULL)
  288.                  ->setTransactionalEmail(NULL)
  289.                  ->setSocialSecurityNumber(NULL)
  290.                  ->setBirthDate(NULL)
  291.                  ->setBirthCity(NULL)
  292.                  ->setPassword($anonymousData)
  293.                  ->setDeletedAt(new DateTime())
  294.             ;
  295.         }
  296.         public static function getSubscribedEvents(): array
  297.         {
  298.             return [
  299.                 'workflow.user_status.transition.accept_register' => 'onWorkflowUserStatusAcceptRegister',
  300.                 'workflow.user_status.transition.accept_cgu'      => 'onWorkflowUserStatusAcceptCgu',
  301.                 'workflow.user_status.transition.reject_cgu'      => 'onWorkflowUserStatusRejectCgu',
  302.                 'workflow.user_status.transition.resend_cgu'      => 'onWorkflowUserStatusResendCgu',
  303.                 'workflow.user_status.transition.disable'         => 'onWorkflowUserStatusDisable',
  304.                 'workflow.user_status.transition.enable'          => 'onWorkflowUserStatusEnable',
  305.                 'workflow.user_status.transition.unsubscribe'     => 'onWorkflowUserStatusUnsubscribe',
  306.                 'workflow.user_status.transition.re_registration' => 'onWorkflowUserStatusReRegistration',
  307.                 'workflow.user_status.transition.archive_manual'  => 'onWorkflowUserStatusArchiveManual',
  308.                 'workflow.user_status.transition.archive_auto'    => 'onWorkflowUserStatusArchiveAuto',
  309.                 'workflow.user_status.transition.unarchive'       => 'onWorkflowUserStatusUnarchive',
  310.                 'workflow.user_status.transition.soft_delete'     => 'onWorkflowUserStatusSoftDelete',
  311.             ];
  312.         }
  313.     }