src/Controller/CompteClient/GestionCompteClientController.php line 39

Open in your IDE?
  1. <?php
  2. namespace App\Controller\CompteClient;
  3. use App\Constants\CompteClientConstants;
  4. use App\Constants\FicheConstant;
  5. use App\Constants\TemplateConstants;
  6. use App\Manager\CompteClient\CompteClientListManager;
  7. use App\Manager\Dossier\DossierListManager;
  8. use App\Manager\FichePersonne\FichePersonneListManager;
  9. use App\Manager\Sendinblue\SendinblueManager;
  10. use App\Manager\Template\TemplateListManager;
  11. use App\Repository\CentreRepository;
  12. use App\Repository\CompteClientRepository;
  13. use App\Repository\FicheFonctionRepository;
  14. use App\Repository\HoraireFicheJourRepository;
  15. use App\Repository\HoraireFicheRepository;
  16. use App\Services\Metier\CentreServicesParametresSM;
  17. use App\Traitement\CompteClientTraitement;
  18. use App\Traitement\HoraireFicheTraitement;
  19. use Doctrine\Persistence\ManagerRegistry;
  20. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  21. use Symfony\Component\HttpFoundation\JsonResponse;
  22. use Symfony\Component\HttpFoundation\Request;
  23. use Symfony\Component\HttpFoundation\Response;
  24. use Symfony\Component\Routing\Annotation\Route;
  25. class GestionCompteClientController extends AbstractController
  26. {
  27. private CentreServicesParametresSM $csp;
  28. public function __construct(CentreServicesParametresSM $csp)
  29. {
  30. $this->csp = $csp;
  31. }
  32. /**
  33. * @Route("/mot-de-passe-oublier", name="compte_client_mot_de_passe_oublier")
  34. */
  35. public function motDePasseOublier(Request $request, CompteClientRepository $compteRepository, CentreRepository $centreRepository ): Response
  36. {
  37. return $this->render('compte_client/mot_de_passe_oublier.html.twig');
  38. }
  39. /**
  40. * @Route("/verification-email-mot-de-passe", name="compte_client_verification_email_mot_de_passe_oublier")
  41. *
  42. * @param Request $request
  43. * @param CompteClientRepository $compteRepository
  44. * @return JsonResponse
  45. */
  46. public function checkEmailSendCodeMotDePassOublier(Request $request, ManagerRegistry $doctrine, CompteClientRepository $compteRepository, CentreRepository $centreRepository ): JsonResponse
  47. {
  48. $form = $request->request->all();
  49. if ($this->isCsrfTokenValid('check-email-compte', $form['token'])){
  50. $email = $form['email'];
  51. $user = $compteRepository->findOneBy(['email' => $email]);
  52. $em = $doctrine->getManager();
  53. if(is_object($user) && $user->getEtat() != CompteClientConstants::ETAT_FERME){
  54. $recupCode = '';
  55. for ($i = 0; $i < 8; $i++) {
  56. $recupCode .= mt_rand(0, 9);
  57. }
  58. $user->setRecupCode($recupCode)
  59. ->setRecupCodeTimer(new \DateTime());
  60. $em->persist($user);
  61. $em->flush();
  62. $dossier = DossierListManager::getDossierByCompteClientDQL($em, $user->getId());
  63. if(isset($dossier[0]) && is_object($dossier[0])) {
  64. $centre = $centreRepository->findOneBy(['idCentre' => $dossier[0]->getIdCentre()]);
  65. $param['data'] = array('username'=>$email, 'recup_code'=>$recupCode);
  66. $template = TemplateListManager::getTemplateByCodeAndIdCentre($em,TemplateConstants::RECUPERATION_MOT_DE_PASSE, $centre->getIdCentre());
  67. $param['idTemplate'] = $template->getIdSendiblue();
  68. $cleApi = $this->csp->getBrevoApiKey();
  69. $resSendinblue = SendinblueManager::sendinBlueEmailInCallWithParam($email, $cleApi, $param);
  70. if($resSendinblue['statut']){
  71. $res = array('success' => true);
  72. } else {
  73. $res = array('success' => false, 'msg' => $resSendinblue['erreur']);
  74. }
  75. }else{
  76. $res = array("success" => false, "msg" => "Impossible de trouver le dossier du compte client. Merci de nous contacter");
  77. }
  78. $res = array('success' => true);
  79. }else if(is_object($user) && $user->getEtat() == CompteClientConstants::ETAT_FERME) {
  80. $res = array("success" => false, "msg" => "Votre compte a été fermé. Merci de nous contactez");
  81. }else{
  82. $res = array("success" => false, "msg" => "Votre adresse email est inconnue");
  83. }
  84. }else{
  85. $res = array("success" => false, "msg" =>"Le token du formulaire est invalide");
  86. }
  87. return new JsonResponse($res);
  88. }
  89. /**
  90. * @Route("/code-confirmation", name="compte_client_code_confirmation_mot_de_passe_oublier")
  91. *
  92. * @param Request $request
  93. * @param CompteClientRepository $compteRepository
  94. * @return JsonResponse
  95. */
  96. public function codeConfirmationMotDePasseOublier(Request $request, ManagerRegistry $doctrine, CompteClientRepository $compteRepository): JsonResponse
  97. {
  98. $form = $request->request->all();
  99. if ($this->isCsrfTokenValid('code-confirmation', $form['token'])){
  100. $em = $doctrine->getManager();
  101. $email = $form['email'];
  102. $user = $compteRepository->findOneBy(['email' => $email]);
  103. if(is_object($user)){
  104. $code = $form['code-confirmation'];
  105. $newmdp = $form['password-new'];
  106. $validiteCode = 3600;
  107. $codeBase = $user->getRecupCode();
  108. $codeCreation = $user->getRecupCodeTimer();
  109. if ($code !== $codeBase) {
  110. $res = array('success' => false, 'msg' => 'Erreur, le code de confirmations est incorrecte');
  111. } else {
  112. $timer = $codeCreation->getTimestamp();
  113. $max = $timer + $validiteCode;
  114. $nowDate = new \DateTime();
  115. $now = $nowDate->getTimestamp();
  116. $seconde = $max - $now;
  117. if ($seconde > 0) {
  118. $dataPassword = CompteClientTraitement::generateHashPasswordAndSalt($newmdp);
  119. $user->setPassword($dataPassword['password'])
  120. ->setSalt($dataPassword['salt']);
  121. $em->persist($user);
  122. $em->flush();
  123. $res = array('success' => true);
  124. } else {
  125. $res = array('success' => false, 'msg' => 'Erreur, le code de récupération n\'est plus valide');
  126. }
  127. }
  128. }else{
  129. $res = array("success" => false, "msg" => "Votre adresse email est inconnue");
  130. }
  131. }else{
  132. $res = array("success" => false, "msg" =>"Le token du formulaire est invalide");
  133. }
  134. return new JsonResponse($res);
  135. }
  136. /**
  137. * @Route("/client/teams", name="connect_compte_client_teams")
  138. *
  139. * @param Request $request
  140. * @return void
  141. */
  142. public function teamCompteClient(Request $request, ManagerRegistry $doctrine, FicheFonctionRepository $ficheFonctionRepository, HoraireFicheRepository $horaireFicheRepository, HoraireFicheJourRepository $horaireFicheJourRepository)
  143. {
  144. $em = $doctrine->getManager();
  145. $idCompteClient = $this->getUser()->getId();
  146. $dossier = DossierListManager::getDossierByCompteClientDQL($em, $idCompteClient);
  147. $listeTeam = [];
  148. $teamFonctions = [];
  149. $ficheFonctions = [];
  150. $teamFiche = [];
  151. $horaires =[];
  152. if(isset($dossier[0])){
  153. $listeTeam = CompteClientListManager::getAllCompteClientByIdDossierEtatNonFermer($em, $dossier[0]->getIdDossier());
  154. foreach ($listeTeam as $t) {
  155. $fiches = FichePersonneListManager::getFichePersonneByIdDossierAndIdCompteClient($em, $dossier[0]->getIdDossier(), $t->getId());
  156. $teamFiche[$t->getId()] = $fiches;
  157. foreach ($fiches as $fi) {
  158. $fonctions = $ficheFonctionRepository->findBy(['fiche' => $fi]);
  159. foreach ($fonctions as $f) {
  160. $teamFonctions[$t->getId()][$f->getFonction()->getIdFonction()] = $f->getFonction()->getLibelle();
  161. $ficheFonctions[$t->getId()][$fi->getIdPersonne()][] = $f->getFonction()->getLibelle();
  162. }
  163. $horaires[$fi->getIdPersonne()] = HoraireFicheTraitement::getHoraireFiche($horaireFicheRepository, $horaireFicheJourRepository, $fi->getIdPersonne(), FicheConstant::FICHE_PERSONNE);
  164. }
  165. }
  166. }else{
  167. throw $this->createNotFoundException();
  168. }
  169. return $this->render('compte_client/team.html.twig', array('liste' => $listeTeam, 'fiches' => $teamFiche, 'fonctions' => $teamFonctions, 'ficheFonctions' => $ficheFonctions, 'horaires' => $horaires));
  170. }
  171. /**
  172. * @Route("/client/mon-compte", name="connect_compte_client_mon_compte")
  173. *
  174. * @param Request $request
  175. * @param CompteClientRepository $compteRepository
  176. * @return void
  177. */
  178. public function monCompteClient(Request $request, CompteClientRepository $compteRepository)
  179. {
  180. $user = $this->getUser();
  181. return $this->render('compte_client/mon_compte.html.twig');
  182. }
  183. /**
  184. * @Route("/client/mise-a-jour/information", name="connect_compte_client_mise_a_jour_information", methods={"POST"})
  185. *
  186. * @param Request $request
  187. * @param CompteClientRepository $compteRepository
  188. * @return JsonResponse
  189. */
  190. public function majInformationCompteClient(Request $request, ManagerRegistry $doctrine, CompteClientRepository $compteRepository)
  191. {
  192. $post = $request->request->all();
  193. $em = $doctrine->getManager();
  194. if($this->getUser()){
  195. $compte = $compteRepository->find($this->getUser()->getId());
  196. if($post['date-naissance'] !== ''){
  197. $dateNaiss = \DateTime::createFromFormat('d/m/Y', $post['date-naissance']);
  198. $compte->setDateNaissance($dateNaiss);
  199. }
  200. if($post['date-embauche'] !== ''){
  201. $dateEmb = \DateTime::createFromFormat('d/m/Y', $post['date-embauche']);
  202. $compte->setDateEmbauche($dateEmb);
  203. }
  204. $em->persist($compte);
  205. $em->flush();
  206. $res = array('success' => true);
  207. }else{
  208. $res = array('success' => false);
  209. }
  210. return new JsonResponse($res);
  211. }
  212. /**
  213. * @Route("/client/mise-a-jour/notification", name="connect_compte_client_mise_a_jour_notification", methods={"POST"})
  214. *
  215. * @param Request $request
  216. * @param CompteClientRepository $compteRepository
  217. * @return JsonResponse
  218. */
  219. public function majNotificationCompteClient(Request $request, ManagerRegistry $doctrine, CompteClientRepository $compteRepository)
  220. {
  221. $post = $request->request->all();
  222. $em = $doctrine->getManager();
  223. if($this->getUser()){
  224. $compte = $compteRepository->find($this->getUser()->getId());
  225. if(isset($post['notification-anniversaire'])){
  226. $compte->setAnnivCompte(true);
  227. }else{
  228. $compte->setAnnivCompte(false);
  229. }
  230. if(isset($post['notification-collegue'])){
  231. $compte->setAnnivCollegue(true);
  232. }else{
  233. $compte->setAnnivCollegue(false);
  234. }
  235. $em->persist($compte);
  236. $em->flush();
  237. $res = array('success' => true);
  238. }else{
  239. $res = array('success' => false);
  240. }
  241. return new JsonResponse($res);
  242. }
  243. /**
  244. * @Route("/client/mise-a-jour/mot-de-passe", name="connect_compte_client_mise_a_jour_password", methods={"POST"})
  245. *
  246. * @param Request $request
  247. * @param CompteClientRepository $compteRepository
  248. * @return JsonResponse
  249. */
  250. public function majPasswordCompteClient(Request $request, ManagerRegistry $doctrine, CompteClientRepository $compteRepository)
  251. {
  252. $post = $request->request->all();
  253. $em = $doctrine->getManager();
  254. if($this->getUser()){
  255. $compte = $compteRepository->find($this->getUser()->getId());
  256. $passActuel = CompteClientTraitement::generateHashPasswordBySalt($post['current_password'], $compte->getSalt());
  257. if($passActuel == $compte->getPassword()){
  258. if($post['new_password'] == $post['confirm_password'] && strlen($post['new_password']) > 7){
  259. $dataPassword = CompteClientTraitement::generateHashPasswordAndSalt($post['new_password']);
  260. $compte->setPassword($dataPassword['password'])
  261. ->setSalt($dataPassword['salt']);
  262. $em->persist($compte);
  263. $em->flush();
  264. $res = array('success' => true);
  265. }else{
  266. $res = array('success' => false, 'msg' => "Les mots de passe ne sont pas identique ou ne respectent pas le bon format requis. Veuillez réessayer votre saisie");
  267. }
  268. }else{
  269. $res = array('success' => false, 'msg' => "Le mot de passe actuel est incorrect. Veuillez réessayer ou faire mot de passe oublié");
  270. }
  271. }else{
  272. $res = array('success' => false, 'msg' => "Vous devez vous connecter pour avoir le droit de faire cette action");
  273. }
  274. return new JsonResponse($res);
  275. }
  276. }