<?php
namespace App\Service;
use App\Entity\Email;
use App\Entity\Entreprise;
use App\Entity\Parametrage;
use App\Entity\Utilisateur;
use App\Repository\EmailModeleRepository;
use App\Repository\UtilisateurRepository;
use Doctrine\ORM\EntityManagerInterface;
class AccountService
{
public function __construct(EntityManagerInterface $manager, AppParametersService $appParametersService,UtilisateurRepository $utilisateurRepository,EmailModeleRepository $emailModeleRepository)
{
$this->appParametersService = $appParametersService;
$this->utilisateurRepository = $utilisateurRepository;
$this->emailModeleRepository = $emailModeleRepository;
$this->manager = $manager;
}
public function reinitialisePassword(Utilisateur $user){
$paramUrl = $this->appParametersService->getAppLocalParameter('APPLICATION_URL');
$token=uniqid('', true);
$user->setToken($token);
$url=$paramUrl.'#/resetpassword/'.$user->getEmail().'/'.$token;
//PASSWORD_DEFINITION
$emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'PASSWORD_DEFINITION'));
$titre=$emailModele->getObjet();
$content=$emailModele->getCorps();
//remplacer les variables
$vars=array(
'prenom' => $user->getPrenom(),
'nom' => $user->getNom(),
'url'=> $url
);
while($i = current($vars)) {
$content = str_replace('{{'.key($vars).'}}', $i, $content);
next($vars);
}
//Envoyer l'email d'activation de compte
$email=new Email();
$email->setObjet($titre);
$email->setCorps($content);
$email->setDestinataire($user->getEmail());
$this->manager->persist($user);
$this->manager->persist($email);
return true;
}
public function avertirFirstAccountEntreprise(Entreprise $entreprise, Utilisateur $user){
$paramUrl = $this->appParametersService->getAppLocalParameter('APPLICATION_URL');
//trouver le premier compte de l'entreprise
$sql="select id from commun.utilisateur where actif=true and entreprise_id=:uuidEntreprise order by inscription asc";
$conn = $this->manager->getConnection();
$stmt = $conn->prepare($sql);
$resultSet = $stmt->executeQuery(['uuidEntreprise' => $entreprise->getId()]);
$resultFirstUser=$resultSet->fetchAllAssociative();
//lire l'utilisateur
if(count($resultFirstUser)>0){
$firstUser=$this->utilisateurRepository->findOneBy(array("id" => $resultFirstUser[0]['id'], "actif" => true));
$token=uniqid('', true);
$user->setToken($token);
$url=$paramUrl.'#/activeaccount/'.$user->getEmail().'/'.$token;
//ACTIVE_ACCOUNT
$emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'ACTIVE_ACCOUNT'));
$titre=$emailModele->getObjet();
$content=$emailModele->getCorps();
//remplacer les variables
$vars=array(
'prenom' => $firstUser->getPrenom(),
'nom' => $firstUser->getNom(),
'nomEntreprise' => $entreprise->getNom(),
'siretEntreprise' => $entreprise->getSiret(),
'prenomUtilisateur' => $user->getPrenom(),
'nomUtilisateur' => $user->getNom(),
'emailUtilisateur' => $user->getEmail(),
'url'=> $url
);
while($i = current($vars)) {
$content = str_replace('{{'.key($vars).'}}', $i, $content);
next($vars);
}
//Envoyer l'email d'activation de compte
$email=new Email();
$email->setObjet($titre);
$email->setCorps($content);
$email->setDestinataire($firstUser->getEmail());
$this->manager->persist($user);
$this->manager->persist($email);
$this->avertirNewAccountEntreprise($user);
}else{
$this->reinitialisePassword($user);
}
}
public function avertirNewAccountEntreprise(Utilisateur $user){
//ATTENTE_VALIDATION
$emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'ATTENTE_VALIDATION'));
$titre=$emailModele->getObjet();
$content=$emailModele->getCorps();
//remplacer les variables
$vars=array(
'prenom' => $user->getPrenom(),
'nom' => $user->getNom()
);
while($i = current($vars)) {
$content = str_replace('{{'.key($vars).'}}', $i, $content);
next($vars);
}
$email=new Email();
$email->setObjet($titre);
$email->setCorps($content);
$email->setDestinataire($user->getEmail());
$this->manager->persist($email);
}
public function avertirUnactiveAccount(Utilisateur $user, $motif = ''){
//ATTENTE_VALIDATION
$emailModele=$this->emailModeleRepository->findOneBy(array("code" => 'UNACTIVE_ACCOUNT'));
$titre=$emailModele->getObjet();
$content=$emailModele->getCorps();
//remplacer les variables
$vars=array(
'entreprise' => $user->getEntreprise()->getNom().' ('.$user->getEntreprise()->getSiret().')',
'prenom' => $user->getPrenom(),
'nom' => $user->getNom(),
'email' => $user->getEmail()
);
while($i = current($vars)) {
$content = str_replace('{{'.key($vars).'}}', $i, $content);
next($vars);
}
//Remplacer le motif
if($motif != ''){
$content = str_replace('{{motif}}', '<p>Pour le motif suivant : '.$motif.'</p>', $content);
}else{
$content = str_replace('{{motif}}', '', $content);
}
//Lire l'adresse email destinatrice
$param = $this->manager->getRepository(Parametrage::class)->findOneBy(array('code' => 'NOTIFICATION_DESINSCRIPTIONS_DESTINATAIRES'));
$emails = explode(',',$param->getValeur());
foreach ($emails as $mail){
$email=new Email();
$email->setObjet($titre);
$email->setCorps($content);
$email->setDestinataire($mail);
$this->manager->persist($email);
}
}
}