src/Controller/manager/DefaultController.php line 137

Open in your IDE?
  1. <?php
  2. namespace App\Controller\manager;
  3. use App\Client\StripeClient;
  4. use App\Entity\Account;
  5. use App\Entity\Partner;
  6. use App\Entity\PartnerPage;
  7. use App\Form\PractitionerType;
  8. use App\Security\PasswordEncoder;
  9. use App\Service\MailjetEmailService;
  10. use Doctrine\ORM\EntityManagerInterface;
  11. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  12. use Symfony\Component\EventDispatcher\EventDispatcherInterface;
  13. use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
  14. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  15. use Symfony\Component\Form\Extension\Core\Type\PasswordType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextType;
  17. use Symfony\Component\HttpFoundation\JsonResponse;
  18. use Symfony\Component\HttpFoundation\Request;
  19. use Symfony\Component\HttpFoundation\Response;
  20. use Symfony\Component\HttpFoundation\Session\SessionInterface;
  21. use Symfony\Component\Routing\Annotation\Route;
  22. use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
  23. use Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken;
  24. use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
  25. use Symfony\Component\Security\Http\SecurityEvents;
  26. /**
  27. * Class Defaultcontroller
  28. * @package App\Controller\manager
  29. *
  30. * @Route("/manager", name="manager_")
  31. */
  32. class DefaultController extends AbstractController
  33. {
  34. /**
  35. * @Route(
  36. * path="/",
  37. * name="home"
  38. * )
  39. *
  40. * @return Response
  41. */
  42. public function homeAction(Request $request, PasswordEncoder $passwordEncoder, EntityManagerInterface $em, SessionInterface $session, TokenStorageInterface $tokenStorage, EventDispatcherInterface $eventDispatcher)
  43. {
  44. return $this->redirectToRoute("manager_app_homepage");
  45. }
  46. /**
  47. * @Route(
  48. * path="/login",
  49. * name="login"
  50. * )
  51. *
  52. * @return Response
  53. */
  54. public function loginAction(Request $request, PasswordEncoder $passwordEncoder, EntityManagerInterface $em, SessionInterface $session, TokenStorageInterface $tokenStorage, EventDispatcherInterface $eventDispatcher)
  55. {
  56. $form = $this->createFormBuilder()
  57. ->add("username", EmailType::class, [
  58. "attr" => [
  59. "placeholder" => "Adresse mail"
  60. ],
  61. "label" => "Adresse mail",
  62. ])
  63. ->add("password", PasswordType::class, [
  64. "attr" => [
  65. "placeholder" => "Mot de passe"
  66. ],
  67. "label" => "Mot de passe",
  68. ])->getForm();
  69. $form->handleRequest($request);
  70. if ($form->isSubmitted() && $form->isValid()) {
  71. $username = $form['username']->getData();
  72. $password = $form['password']->getData();
  73. $account = $em->getRepository(Account::class)->findOneBy(['email' => $username]);
  74. if ($account) {
  75. $isValid = $passwordEncoder->isPasswordValid($account->getPassword(), $password, $account->getSalt());
  76. if ($isValid) {
  77. if ($account->getEnabled()) {
  78. $firewall = 'manager';
  79. $token = new UsernamePasswordToken($account, $firewall, $account->getRoles());
  80. $tokenStorage->setToken($token);
  81. $session->set('_security_' . $firewall, serialize($token));
  82. $event = new InteractiveLoginEvent($request, $token);
  83. $eventDispatcher->dispatch($event, SecurityEvents::INTERACTIVE_LOGIN);
  84. $account->setLastLogin(new \DateTime('now'));
  85. $em->flush();
  86. return $this->redirectToRoute('manager_app_homepage');
  87. } else {
  88. $session->getFlashBag()->add("danger", "Compte inactif");
  89. }
  90. } else {
  91. $session->getFlashBag()->add("danger", "Identifiant ou mot de passe incorrect");
  92. }
  93. } else {
  94. $session->getFlashBag()->add("danger", "Identifiant ou mot de passe incorrect");
  95. }
  96. }
  97. return $this->render('manager/login.html.twig', [
  98. 'form' => $form->createView()
  99. ]);
  100. }
  101. /**
  102. * @Route(
  103. * path="/logout",
  104. * name="logout"
  105. * )
  106. */
  107. public function logoutAction(TokenStorageInterface $tokenStorage, SessionInterface $session)
  108. {
  109. $tokenStorage->setToken(null);
  110. $session->invalidate();
  111. return $this->redirectToRoute("manager_login");
  112. }
  113. /**
  114. * @Route(
  115. * path="/register",
  116. * name="register"
  117. * )
  118. *
  119. * @return Response
  120. */
  121. public function registerAction(Request $request, PasswordEncoder $passwordEncoder, EntityManagerInterface $em, SessionInterface $session, StripeClient $stripeClient, MailjetEmailService $mailjetEmailService)
  122. {
  123. $partner = new Partner();
  124. $partner->setIspractitioner(true);
  125. $form = $this->createForm(PractitionerType::class, $partner);
  126. $form
  127. ->add('email', EmailType::class, [
  128. "label" => "Email d'identification",
  129. "attr" => [
  130. "placeholder" => "Email d'identification",
  131. ],
  132. "required" => true,
  133. "mapped" => false,
  134. ])
  135. ->add('parrainage', TextType::class, [
  136. "label" => "Code de parrainage",
  137. "attr" => [
  138. "placeholder" => "Code de parrainage",
  139. ],
  140. "required" => false,
  141. "mapped" => false,
  142. ])
  143. ->add('password', PasswordType::class, [
  144. "label" => "Mot de passe",
  145. "required" => true,
  146. "mapped" => false,
  147. ])
  148. ->add('password2', PasswordType::class, [
  149. "label" => "Confirmation du mot de passe",
  150. "required" => true,
  151. "mapped" => false,
  152. ])
  153. ->add('cgv', CheckboxType::class, [
  154. "label" => "",
  155. "required" => true,
  156. "mapped" => false,
  157. ])
  158. ->add('charte', CheckboxType::class, [
  159. "label" => "",
  160. "required" => true,
  161. "mapped" => false,
  162. ])
  163. ;
  164. $form->handleRequest($request);
  165. $clear = false;
  166. if ($form->isSubmitted() && !$form->isValid()) {
  167. $session->getFlashBag()->add('danger', 'Le formulaire n\'est pas rempli correctement. Veuillez vérifier les champs.');
  168. }
  169. if ($form->isSubmitted() && $form->isValid()) {
  170. if ($form->get('password')->getData() == $form->get('password2')->getData()) {
  171. $account = $em->getRepository(Account::class)->findOneBy(['email' => $form->get('email')->getData()]);
  172. if (!$account) {
  173. $em->persist($partner);
  174. $em->flush();
  175. $account = new Account();
  176. $account->setEmail($form->get('email')->getData());
  177. $account->setRegistrationDate(new \DateTime('now'));
  178. $account->setEnabled(true);
  179. $account->setRoles(["ROLE_PARTNER"]);
  180. $account->setPartner($partner);
  181. $salt = md5(uniqid());
  182. $account->setSalt($salt);
  183. $enc_pwd = $passwordEncoder->encodePassword($form->get('password')->getData(), $salt);
  184. $account->setPassword($enc_pwd);
  185. $em->persist($account);
  186. $em->flush();
  187. // Création de la fiche
  188. $partnerPage = new PartnerPage();
  189. $em->persist($partnerPage);
  190. $em->flush();
  191. $partner->setPartnerPage($partnerPage);
  192. $partner->setPartnershipCode($form->get('parrainage')->getData());
  193. $em->flush();
  194. $stripeCustomer = $stripeClient->createCustomer($account, $account->getEmail(), $partner->getFirstName(), $partner->getLastName());
  195. if ($stripeCustomer && $stripeCustomer->id) {
  196. $account->setStripeCustomerId($stripeCustomer->id);
  197. $em->flush();
  198. }
  199. // Notification utilisateur
  200. $mailjetEmailService->send(
  201. "Création de votre compte ZenDez-Vous",
  202. $account->getEmail(),
  203. 4686131,
  204. [
  205. "title" => "Bienvenue sur ZenDez-Vous !",
  206. "content" => "Bonjour " . $partner->getFirstName() . " " . $partner->getLastName() . ",<br/><br/>Bienvenue chez ZenDez-Vous ! Votre inscription a bien été enregistrée et vous pouvez dès à présent accéder à votre espace professionnel ici : <a href='https://www.zendez-vous.fr/manager/login' target='_blank'>Mon intranet</a>.<br/><br/>La mise en ligne de votre profil sera effective après vérification de la validité de vos diplômes/certifications et de votre RC pro par l’équipe ZenDez-Vous. N'oubliez pas de nous communiquer ces éléments à <a href='mailto: inscription-praticien@zendez-vous.fr'>inscription-praticien@zendez-vous.fr</a> si ce n'est pas encore fait.<br/><br/>En cas de question, n’hésitez pas à nous contacter sur <a href='mailto: contact@zendez-vous.fr'>contact@zendez-vous.fr</a>.<br/><br/>Merci pour votre confiance !",
  207. "email" => $account->getEmail(),
  208. ]);
  209. // Notification admin
  210. $mailjetEmailService->send(
  211. "ZenDez-Vous: Nouveau praticien ".$partner->getFirstName(). " " . $partner->getLastName(),
  212. "inscription-praticien@zendez-vous.fr",
  213. 4686131,
  214. [
  215. "title" => "Un nouveau praticien sur ZenDez-Vous",
  216. "content" => "Bonjour, <br/><br/>Le praticien ".$partner->getFirstName(). " " . $partner->getLastName() ." s'est inscrit sur ZenDez-Vous.<br/>Il devrait vous envoyer ses diplômes/certifications et sa RC pro pour vérification et s'abonner prochainement.".($form->get("parrainage")->getData() ? "<br/><br/><b>Code de parrainage : </b>".$form->get("parrainage")->getData() : ""),
  217. "email" => "inscription-praticien@zendez-vous.fr",
  218. ]);
  219. $clear = true;
  220. $session->getFlashBag()->add('success', 'Super ! Votre compte praticien a bien été créé. Vous avez reçu un email avec les dernières instructions.');
  221. } else {
  222. $session->getFlashBag()->add('danger', 'Un compte existe déjà avec cette adresse e-mail. Veuillez en choisir une autre.');
  223. }
  224. } else {
  225. $session->getFlashBag()->add('danger', 'Les mots de passe ne correspondent pas.');
  226. }
  227. }
  228. return $this->render('manager/register.html.twig', [
  229. "form" => $form->createView(),
  230. "clear" => $clear,
  231. ]);
  232. }
  233. /**
  234. * @Route(
  235. * path="/register-admin",
  236. * name="register_admin"
  237. * )
  238. */
  239. public function registerAdminAction(EntityManagerInterface $em, PasswordEncoder $passwordEncoder)
  240. {
  241. /*
  242. $account = new Account();
  243. $account->setEmail("webmaster@slapp.me");
  244. $account->setRegistrationDate(new \DateTime('now'));
  245. $salt = md5(uniqid());
  246. $account->setSalt($salt);
  247. $enc_pwd = $passwordEncoder->encodePassword("", $salt);
  248. $account->setPassword($enc_pwd);
  249. $em->persist($account);
  250. $em->flush();
  251. */
  252. return new JsonResponse([
  253. 'success' => true,
  254. ]);
  255. }
  256. /**
  257. * @Route(
  258. * path="/test-sms",
  259. * name="test-sms"
  260. * )
  261. */
  262. public function testSmsAdminAction(EntityManagerInterface $em, PasswordEncoder $passwordEncoder)
  263. {
  264. $fields = array(
  265. 'apiKey' => "00e22d45de38c8e5252f8d8266c2446f95865ccf",
  266. 'phoneNumbers' => "0604176553",
  267. 'message' => 'Vérification du fonctionnement du service SMS',
  268. 'sender' => 'ZENDEZ-VOUS',
  269. );
  270. $curl = curl_init();
  271. curl_setopt($curl, CURLOPT_URL, 'https://api.smspartner.fr/v1/send');
  272. curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
  273. curl_setopt($curl, CURLOPT_TIMEOUT, 10);
  274. curl_setopt($curl, CURLOPT_POST, 1);
  275. curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($fields));
  276. $result = curl_exec($curl);
  277. curl_close($curl);
  278. return new JsonResponse([
  279. 'success' => true,
  280. 'message' => $result,
  281. ]);
  282. }
  283. }