src/Service/AccountService.php line 17

Open in your IDE?
  1. <?php
  2. namespace App\Service;
  3. use App\Entity\Email;
  4. use App\Entity\Entreprise;
  5. use App\Entity\Parametrage;
  6. use App\Entity\Utilisateur;
  7. use App\Repository\EmailModeleRepository;
  8. use App\Repository\UtilisateurRepository;
  9. use Doctrine\ORM\EntityManagerInterface;
  10. class AccountService
  11. {
  12. public function __construct(EntityManagerInterface $manager, AppParametersService $appParametersService,UtilisateurRepository $utilisateurRepository,EmailModeleRepository $emailModeleRepository)
  13. {
  14. $this->appParametersService = $appParametersService;
  15. $this->utilisateurRepository = $utilisateurRepository;
  16. $this->emailModeleRepository = $emailModeleRepository;
  17. $this->manager = $manager;
  18. }
  19. public function reinitialisePassword(Utilisateur $user){
  20. $paramUrl = $this->appParametersService->getAppLocalParameter('APPLICATION_URL');
  21. $token=uniqid('', true);
  22. $user->setToken($token);
  23. $url=$paramUrl.'#/resetpassword/'.$user->getEmail().'/'.$token;
  24. //PASSWORD_DEFINITION
  25. $emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'PASSWORD_DEFINITION'));
  26. $titre=$emailModele->getObjet();
  27. $content=$emailModele->getCorps();
  28. //remplacer les variables
  29. $vars=array(
  30. 'prenom' => $user->getPrenom(),
  31. 'nom' => $user->getNom(),
  32. 'url'=> $url
  33. );
  34. while($i = current($vars)) {
  35. $content = str_replace('{{'.key($vars).'}}', $i, $content);
  36. next($vars);
  37. }
  38. //Envoyer l'email d'activation de compte
  39. $email=new Email();
  40. $email->setObjet($titre);
  41. $email->setCorps($content);
  42. $email->setDestinataire($user->getEmail());
  43. $this->manager->persist($user);
  44. $this->manager->persist($email);
  45. return true;
  46. }
  47. public function avertirFirstAccountEntreprise(Entreprise $entreprise, Utilisateur $user){
  48. $paramUrl = $this->appParametersService->getAppLocalParameter('APPLICATION_URL');
  49. //trouver le premier compte de l'entreprise
  50. $sql="select id from commun.utilisateur where actif=true and entreprise_id=:uuidEntreprise order by inscription asc";
  51. $conn = $this->manager->getConnection();
  52. $stmt = $conn->prepare($sql);
  53. $resultSet = $stmt->executeQuery(['uuidEntreprise' => $entreprise->getId()]);
  54. $resultFirstUser=$resultSet->fetchAllAssociative();
  55. //lire l'utilisateur
  56. if(count($resultFirstUser)>0){
  57. $firstUser=$this->utilisateurRepository->findOneBy(array("id" => $resultFirstUser[0]['id'], "actif" => true));
  58. $token=uniqid('', true);
  59. $user->setToken($token);
  60. $url=$paramUrl.'#/activeaccount/'.$user->getEmail().'/'.$token;
  61. //ACTIVE_ACCOUNT
  62. $emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'ACTIVE_ACCOUNT'));
  63. $titre=$emailModele->getObjet();
  64. $content=$emailModele->getCorps();
  65. //remplacer les variables
  66. $vars=array(
  67. 'prenom' => $firstUser->getPrenom(),
  68. 'nom' => $firstUser->getNom(),
  69. 'nomEntreprise' => $entreprise->getNom(),
  70. 'siretEntreprise' => $entreprise->getSiret(),
  71. 'prenomUtilisateur' => $user->getPrenom(),
  72. 'nomUtilisateur' => $user->getNom(),
  73. 'emailUtilisateur' => $user->getEmail(),
  74. 'url'=> $url
  75. );
  76. while($i = current($vars)) {
  77. $content = str_replace('{{'.key($vars).'}}', $i, $content);
  78. next($vars);
  79. }
  80. //Envoyer l'email d'activation de compte
  81. $email=new Email();
  82. $email->setObjet($titre);
  83. $email->setCorps($content);
  84. $email->setDestinataire($firstUser->getEmail());
  85. $this->manager->persist($user);
  86. $this->manager->persist($email);
  87. $this->avertirNewAccountEntreprise($user);
  88. }else{
  89. $this->reinitialisePassword($user);
  90. }
  91. }
  92. public function avertirNewAccountEntreprise(Utilisateur $user){
  93. //ATTENTE_VALIDATION
  94. $emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'ATTENTE_VALIDATION'));
  95. $titre=$emailModele->getObjet();
  96. $content=$emailModele->getCorps();
  97. //remplacer les variables
  98. $vars=array(
  99. 'prenom' => $user->getPrenom(),
  100. 'nom' => $user->getNom()
  101. );
  102. while($i = current($vars)) {
  103. $content = str_replace('{{'.key($vars).'}}', $i, $content);
  104. next($vars);
  105. }
  106. $email=new Email();
  107. $email->setObjet($titre);
  108. $email->setCorps($content);
  109. $email->setDestinataire($user->getEmail());
  110. $this->manager->persist($email);
  111. }
  112. public function avertirUnactiveAccount(Utilisateur $user, $motif = ''){
  113. //ATTENTE_VALIDATION
  114. $emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'UNACTIVE_ACCOUNT'));
  115. $titre=$emailModele->getObjet();
  116. $content=$emailModele->getCorps();
  117. //remplacer les variables
  118. $vars=array(
  119. 'entreprise' => $user->getEntreprise()->getNom().' ('.$user->getEntreprise()->getSiret().')',
  120. 'prenom' => $user->getPrenom(),
  121. 'nom' => $user->getNom(),
  122. 'email' => $user->getEmail()
  123. );
  124. while($i = current($vars)) {
  125. $content = str_replace('{{'.key($vars).'}}', $i, $content);
  126. next($vars);
  127. }
  128. //Remplacer le motif
  129. if($motif != ''){
  130. $content = str_replace('{{motif}}', '<p>Pour le motif suivant : '.$motif.'</p>', $content);
  131. }else{
  132. $content = str_replace('{{motif}}', '', $content);
  133. }
  134. //Lire l'adresse email destinatrice
  135. $param = $this->manager->getRepository(Parametrage::class)->findOneBy(array('code' => 'NOTIFICATION_DESINSCRIPTIONS_DESTINATAIRES'));
  136. $emails = explode(',',$param->getValeur());
  137. foreach ($emails as $mail){
  138. $email=new Email();
  139. $email->setObjet($titre);
  140. $email->setCorps($content);
  141. $email->setDestinataire($mail);
  142. $this->manager->persist($email);
  143. }
  144. }
  145. }