src/EventListener/UserEventsSubscriber.php line 58

Open in your IDE?
  1. <?php
  2. namespace App\EventListener;
  3. use App\EntityCompany\EmailTemplate;
  4. use App\Enum\EventTypes\UserEventTypes;
  5. use App\Enum\Location\LocationIdEnum;
  6. use App\Service\DatabaseService;
  7. use App\Service\MailerService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Psr\Log\LoggerInterface;
  10. use Symfony\Component\EventDispatcher\EventSubscriberInterface;
  11. use Symfony\Component\HttpFoundation\RedirectResponse;
  12. use Symfony\Component\Routing\RouterInterface;
  13. class UserEventsSubscriber implements EventSubscriberInterface
  14. {
  15. /** @var EntityManagerInterface */
  16. protected $entityManager;
  17. /** @var LoggerInterface $logger */
  18. protected $logger;
  19. /** @var MailerService $mailerService */
  20. protected $mailerService;
  21. /** @var RouterInterface $router */
  22. protected $router;
  23. /** @var DatabaseService $databaseService */
  24. protected $databaseService;
  25. public function __construct(
  26. LoggerInterface $userSubscriberLogger,
  27. MailerService $mailerService,
  28. RouterInterface $router,
  29. EntityManagerInterface $entityManager,
  30. DatabaseService $databaseService
  31. ) {
  32. $this->logger = $userSubscriberLogger;
  33. $this->mailerService = $mailerService;
  34. $this->router = $router;
  35. $this->entityManager = $entityManager;
  36. $this->databaseService = $databaseService;
  37. }
  38. /**
  39. * @inheritDoc
  40. */
  41. public static function getSubscribedEvents(): array
  42. {
  43. return [
  44. UserEventTypes::USER_CREATED => 'onUserCreated'
  45. ];
  46. }
  47. public function onUserCreated($event): void
  48. {
  49. $userData = null;
  50. $password = '';
  51. //Fetch the current active email template
  52. //If there's more than one active, it'll fetch the most recent
  53. /** @var EmailTemplate */
  54. $htmlTemplate = $this->databaseService
  55. ->getManagerByCompany($event->getCompany())
  56. ->getRepository(EmailTemplate::class)
  57. ->findOneBy(['isActive' => true], ['id' => 'DESC']);
  58. $user = $event->getUser();
  59. if ($request = $event->getRequest()) {
  60. if ($request->request->has('user_company_role_client_new')) {
  61. $userData = $request->request->get('user_company_role_client_new');
  62. } elseif ($request->request->has('user_company_role_admin')) {
  63. $userData = $request->request->get('user_company_role_admin');
  64. }
  65. if ($request->request->has('password')) {
  66. $userData['plainPassword'] = $request->request->get('password');
  67. }
  68. if (!empty($event->getUser()->getPlainPassword())){
  69. $userData['plainPassword'] = $event->getUser()->getPlainPassword();
  70. }
  71. if ($userData) {
  72. $password = $userData['plainPassword'];
  73. }
  74. }
  75. $loginUrl = $this->router->generate('app_login');
  76. $templateData = [
  77. 'login_url' => $loginUrl,
  78. 'password' => $password
  79. ];
  80. //If there's no email template for the company, the current hatch default will be applied
  81. if ($htmlTemplate) {
  82. $templateData['content'] = $htmlTemplate->getContent();
  83. }
  84. $this->logger->info('User created: '.$user->getUsername());
  85. //Get Location From Request
  86. $refer = $request->headers->get('referer');
  87. $refer = explode("/",$refer);
  88. if (isset($refer[4])) {
  89. if ($refer[3] == "admin") {
  90. $locationId = LocationIdEnum::LOCATION_ID_ADMINISTRATION_OFFICE;
  91. } elseif ($refer[3] == "company") {
  92. $companyId = $refer[4];
  93. } else {
  94. $locationId = is_numeric($refer[4]) ? $refer[4] : 1;
  95. }
  96. } else {
  97. $activeLocations = $user->getActiveLocations();
  98. $locationId = $activeLocations->isEmpty() ? 1 : $activeLocations->first()->getId();
  99. }
  100. $this->mailerService
  101. ->setSubject('Kipu Compliance: New User Created')
  102. ->setTo($user->getEmail(), $user->getUsername())
  103. ->setContext($templateData)
  104. ->setHtmlTemplate('emails/signup.html.twig')
  105. ->setLocationId($locationId ?? null)
  106. ->setCompanyId($companyId ?? null)
  107. ->setEmailRecipient($user)
  108. ->send();
  109. }
  110. public function onResetSuccess($event): void
  111. {
  112. $event->setResponse(new RedirectResponse($this->router->generate('app_index')));
  113. }
  114. }