<?php
namespace App\Controller\Front;
use App\Entity\Document;
use App\Entity\User;
use App\Mail\Mail;
use App\Repository\AddressRepository;
use App\Repository\DocumentRepository;
use App\Repository\UserRepository;
use App\Service\ActivityService;
use App\Service\GlobalVariables;
use App\Service\RightService;
use Doctrine\DBAL\Exception;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\JsonResponse;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Messenger\MessageBusInterface;
use Symfony\Component\Messenger\Stamp\DelayStamp;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Routing\Annotation\Route;
/**
* @Route("/client")
*/
class UserController extends AbstractController
{
// Keys for encryption
private const ENCRYPTION_KEY = 'nb689fgnf23vic54dfmg21n872121fdf3hpbd212gbn36ed87yxwa89jmspcyf87';
private const SALT_KEY = 'sunshine-elegance';
private $addressRepository;
private $userRepository;
private $documentRepository;
private $rightService;
private $activityService;
private $globalVariables;
/** @var EntityManagerInterface */
private $em;
public function __construct(
AddressRepository $addressRepository,
UserRepository $userRepository,
DocumentRepository $documentRepository,
RightService $rightService,
ActivityService $activityService,
EntityManagerInterface $manager,
GlobalVariables $globalVariables
)
{
$this->addressRepository = $addressRepository;
$this->userRepository = $userRepository;
$this->documentRepository = $documentRepository;
$this->rightService = $rightService;
$this->activityService = $activityService;
$this->em = $manager;
$this->globalVariables = $globalVariables;
}
/**
* @Route("/login", name="user_login", methods={"GET"})
*/
public function login(Request $request): Response
{
$message = $request->query->get('message');
if ($this->getUser()) {
return $this->redirectToRoute('user_account');
} else {
return $this->render('front/user/login.html.twig', compact('message'));
}
}
/**
* @Route("/account", name="user_account", methods={"GET"}, options={"expose"=true})
*/
public function account(): Response
{
return ($this->getUser())? $this->render('front/user/account.html.twig'):$this->redirectToRoute('user_login');
}
/**
* @Route("/api/get_documents", name="api_get_documents", options={"expose"=true}, methods={"GET"})
*/
public function getDocumentsAPI(Request $request): Response
{
// Vérifier si utilisateur connecté
if (!$this->globalVariables->timeout()) {
$response = [
'res' => 'ERROR_CNX',
'message' => 'Session has ended.',
];
return new jsonResponse($response);
};
$page = $request->query->get('page');
$orderBy = $request->query->get('orderBy');
// get the product repository
$documents = $this->em->getRepository(Document::class);
// build the query for the doctrine paginator
$query = $documents->createQueryBuilder('d')
->where('d.client = :user')
->setParameter('user', $this->getUser());
/*->setParameter('minPrice', $minPrice);*/
// Order by
switch ($orderBy) {
case 1:
$query->orderBy('d.createdAt', 'ASC');
break;
case 2:
$query->orderBy('d.createdAt', 'DESC');
break;
case 3:
$query->orderBy('d.id', 'ASC');
break;
case 4:
$query->orderBy('d.id', 'DESC');
break;
case 5:
$query->orderBy('d.totalAmountTtc', 'ASC');
break;
case 6:
$query->orderBy('d.totalAmountTtc', 'DESC');
break;
}
$query->getQuery();
// set page size
$pageSize = $request->query->get('pageSize');
// load doctrine Paginator
$paginator = new \Doctrine\ORM\Tools\Pagination\Paginator($query);
// you can get total items
$totalItems = count($paginator);
// get total pages
$pagesCount = ceil($totalItems / $pageSize);
// now get one page's items:
$paginator
->getQuery()
->setFirstResult($pageSize * ($page - 1)) // set the offset
->setMaxResults($pageSize); // set the limit
$data = array();
foreach ($paginator as $pageItem) {
// do stuff with results...
array_push($data, $pageItem);
}
// Les nombres de pages
$pages = array();
for ($i = max($page - 3, 1); $i <= min($page + 3, $pagesCount); $i++) {
array_push($pages, $i);
}
$response = [
'res' => 'OK',
'data' => $data,
'pagesCount' => $pagesCount,
'total' => $totalItems,
'pages' => $pages,
'message' => 'Commandes récupérés avec succès.',
];
return new jsonResponse($response);
}
/**
* @Route("/api/get_document_status", name="api_get_document_status", options={"expose"=true}, methods={"GET"})
*/
public function getStatusAPI(Request $request): Response
{
// Vérifier si utilisateur connecté
if (!$this->globalVariables->timeout()) {
$response = [
'res' => 'ERROR_CNX',
'message' => 'Session has ended.',
];
return new jsonResponse($response);
};
$id = $request->query->get('id');
// get the product repository
$document = $this->em->getRepository(Document::class)->find($id);
if (!$document) {
$response = [
'res' => 'ERROR',
'message' => 'Aucune commande trouvée.',
];
} else {
$response = [
'res' => 'OK',
'data' => $document->getConditionDocument(),
'message' => 'Commandes récupérés avec succès.',
];
}
return new jsonResponse($response);
}
/**
* @Route("/api/get_user_adress", name="api_get_user_adress", options={"expose"=true}, methods={"GET"})
*/
public function getUserAdressAPI(Request $request): Response
{
// Vérifier si utilisateur connecté
if (!$this->globalVariables->timeout()) {
$response = [
'res' => 'ERROR_CNX',
'message' => 'Session has ended.',
];
} else {
$response = [
'res' => 'OK',
'data' => [$this->getUser()->getAdress(), $this->getUser()->getSecondAdress()],
'message' => 'Adresses récupérés avec succès.',
];
}
return new jsonResponse($response);
}
/**
* @Route("/api/save_user_adress", name="api_save_user_adress", options={"expose"=true}, methods={"POST"})
*/
public function saveUserAdressAPI(Request $request): Response
{
// Vérifier si utilisateur connecté
if (!$this->globalVariables->timeout()) {
$response = [
'res' => 'ERROR_CNX',
'message' => 'Session has ended.',
];
} else {
$adresses = json_decode($request->request->get('adresses'), true);
$type = json_decode($request->request->get('type'), true);
// Vérifier si l'adresse est vide
if ($adresses[$type] == '') {
$response = [
'res' => 'ERROR',
'message' => "L'adresse " . ($type + 1) . " ne doît pas être vide.",
];
} else {
$user = $this->getUser();
switch ($type) {
case 0:
$user->setAdress($adresses[$type]);
break;
case 1:
$user->setSecondAdress($adresses[$type]);
break;
}
$this->em->persist($user);
$this->em->flush();
$response = [
'res' => 'OK',
'data' => [$this->getUser()->getAdress(), $this->getUser()->getSecondAdress()],
'message' => 'Adresse modifiée avec succès.',
];
}
}
return new jsonResponse($response);
}
/**
* @Route("/api/get_user_details", name="api_get_user_details", options={"expose"=true}, methods={"GET"})
*/
public function getUserDetailsAPI(Request $request): Response
{
// Vérifier si utilisateur connecté
if (!$this->globalVariables->timeout()) {
$response = [
'res' => 'ERROR_CNX',
'message' => 'Session has ended.',
];
} else {
$response = [
'res' => 'OK',
'data' => $this->getUser(),
'message' => 'Détails récupérés avec succès.',
];
};
return new jsonResponse($response);
}
/**
* @Route("/api/save_user_details", name="api_save_user_details", options={"expose"=true}, methods={"POST"})
*/
public function saveUserDetailsAPI(Request $request, UserPasswordEncoderInterface $passwordEncoder): Response
{
if (!$this->globalVariables->timeout()) {
$response = [
'res' => 'ERROR_CNX',
'message' => 'Session has ended.',
];
} else {
$user = json_decode($request->request->get('user'), true);
$userByMail = $this->em->getRepository(User::class)->findOneBy(array('email' => $user['email']));
// Vérifier si l'adresse est vide
if ($user['lastName'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Le nom est obligatoire",
];
} elseif ($user['firstName'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Le prénom est obligatoire",
];
} elseif ($user['email'] == '') {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail est obligatoire",
];
} elseif (!filter_var($user['email'], FILTER_VALIDATE_EMAIL)) {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail n'est pas valide",
];
} elseif ($userByMail && $userByMail->getId() <> $this->getUser()->getId()) {
$response = [
'res' => 'ERROR',
'message' => "E-mail déja utilisé.",
];
} elseif (strlen($user['password']) < 6 && strlen($user['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La longueur de mot de passe doît être supérieur à 5",
];
} elseif (!$passwordEncoder->isPasswordValid($this->getUser(), $user['password']) && strlen($user['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "Le mot de passe ne correspond pas",
];
} elseif (strlen($user['newPassword']) == 0 && strlen($user['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "Saisir le nouveau mot de passe",
];
} elseif (strlen($user['confirmPassword']) == 0 && strlen($user['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "Saisir la confirmaion de mot de passe",
];
} elseif (strlen($user['newPassword']) < 6 && strlen($user['newPassword']) > 0 && strlen($user['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La longueur de nouveau mot de passe doît être supérieur à 5",
];
} elseif (strlen($user['confirmPassword']) < 6 && strlen($user['confirmPassword']) > 0 && strlen($user['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La longueur de confirmation mot de passe doît être supérieur à 5",
];
} elseif ($user['newPassword'] != $user['confirmPassword'] && strlen($user['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La confirmation de nouveau mot de passe ne correspond pas",
];
} else {
$this->getUser()->setFirstName($user['firstName']);
$this->getUser()->setLastName($user['lastName']);
$this->getUser()->setEmail($user['email']);
if (strlen($user['newPassword']) > 0 && $passwordEncoder->isPasswordValid($this->getUser(), $user['password']) && strlen($user['password']) > 0) {
$this->getUser()->setPassword(
$passwordEncoder->encodePassword(
$this->getUser(),
$user['newPassword']
)
);
};
$this->em->persist($this->getUser());
$this->em->flush();
$response = [
'res' => 'OK',
'data' => $this->getUser(),
'message' => 'Enregsitrement effectué avec succès.',
];
}
}
return new jsonResponse($response);
}
/**
* @Route("/document/{id}", name="document_details", methods={"GET"}, options={"expose"=true})
*/
public function document(Request $request, $id): Response
{
$max = isset($_ENV['FREE_DELIVERY_AMOUNT']) ? floatval($_ENV['FREE_DELIVERY_AMOUNT']) : 0; // Maximum pour avoir une livraison gratuite
if ($this->getUser()) {
$document = $this->em->getRepository(Document::class)->find($id);
// Vérifier l'existance de la commande
if (!$document) {
return $this->redirectToRoute('user_account');
}
return $this->render('front/user/order.html.twig', compact('document', 'max'));
} else {
return $this->redirectToRoute('user_login');
}
}
// Functions to encrypt and decrypt a string
public function encrypt($string, $salt = null): ?string
{
// Concaténer la chaine avec la date en cours
$string = $string . '|' . (new \DateTime('now'))->format('Y-m-d H:i:s');
if ($salt === null) {
$salt = hash('sha256', uniqid(mt_rand(), true));
} // this is an unique salt per entry and directly stored within a password
return base64_encode(openssl_encrypt($string, 'AES-256-CBC', self::ENCRYPTION_KEY, 0, str_pad(substr(self::SALT_KEY, 0, 16), 16, '0', STR_PAD_LEFT)))/*.':'.self::SALT_KEY*/ ;
}
public function decrypt($string): ?string
{
//if( count(explode(':', $string)) !== 2 ) { return $string; }
//$salt = explode(":",$string)[1];
//$string = explode(":",$string)[0]; // read salt from entry
return openssl_decrypt(base64_decode($string), 'AES-256-CBC', self::ENCRYPTION_KEY, 0, str_pad(substr(self::SALT_KEY, 0, 16), 16, '0', STR_PAD_LEFT));
}
/**
* @Route("/account-activation/{key}", name="account_activation", methods={"GET"}, options={"expose"=true})
*/
public function activateAccount(Request $request, $key): Response
{
$string = $this->decrypt($key);
$parts = explode('|', $string);
// Récupérer le nom utilisateur
$username = $parts[0];
// Récupérer la date d'inscription
$dateSignUp = $parts[1];
$date = strtotime('now');
$dateSignUp = strtotime($dateSignUp);
// Vérifier si le lien a expiré (envoyé depuis plus de 30 minutes)
if (round(abs($date - $dateSignUp) / 60, 2) > 30) {
return $this->render('front/user/login.html.twig', array(
'message' => 'Votre lien a expiré. Merci de réassayer.',
));
}
// Activation du compte et redirection vers la page login
$user = $this->em->getRepository(User::class)->findOneBy(array('usermane' => $username));
// Vérification existance utiliateur
if (!$user) {
return $this->render('front/user/login.html.twig', array(
'message' => "Votre nom d'utilisateur n'existe pas.",
));
}
// Vérification existance utiliateur
if ($user->isVerified()) {
return $this->render('front/user/login.html.twig', array(
'message' => "Votre compte est déjà vérifié. Merci de connecter.",
));
}
// Activation
$user->setIsVerified(true);
// Enregistrement
$this->em->persist($user);
$this->em->flush();
return $this->render('front/user/login.html.twig', array(
'message' => "Votre compte a été vérifié. Merci de connecter.",
));
}
/**
* @Route("/password-restore/{key}", name="password_restore", methods={"GET"}, options={"expose"=true})
*/
public function restorePassword(Request $request, $key): Response
{
$string = $this->decrypt($key);
$parts = explode('|', $string);
// Récupérer l'email
$email = $parts[0];
// Récupérer la date
$dateRestore = $parts[1];
$date = strtotime('now');
$dateRestore = strtotime($dateRestore);
// Vérifier si le lien a expiré (envoyé depuis plus de 30 minutes)
if (round(abs($date - $dateRestore) / 60, 2) > 30) {
return $this->render('front/user/login.html.twig', array(
'message' => 'Votre lien a expiré. Merci de réassayer.',
));
}
// Activation du compte et redirection vers la page login
$user = $this->em->getRepository(User::class)->findOneBy(array('email' => $email));
// Vérification existance utiliateur
if (!$user) {
return $this->render('front/user/login.html.twig', array(
'message' => "Votre email n'existe pas.",
));
}
return $this->render('front/user/password.html.twig', array(
'message' => "Saisir votre nouvelle mot de passe.",
'key' => $key
));
}
/**
* @Route("/api/user_signup", name="api_user_signup", options={"expose"=true}, methods={"POST"})
*/
public function userSignUpAPI(Request $request, UserPasswordEncoderInterface $passwordEncoder, MessageBusInterface $bus): Response
{
$client = json_decode($request->request->get('client'), true);
// Vérifier les saisies obligatoires
if ($client['nom'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Le nom est obligatoire",
];
} elseif ($client['prenom'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Le prénom est obligatoire",
];
} /*elseif ($client['username'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Le nom d'utilisateur est obligatoire",
];
} */elseif ($client['telephone'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Le numéro de téléphone est obligatoire",
];
} elseif ($client['email'] == '') {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail est obligatoire",
];
} elseif (!filter_var($client['email'], FILTER_VALIDATE_EMAIL)) {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail n'est pas valide",
];
} elseif (strlen($client['password']) == 0) {
$response = [
'res' => 'ERROR',
'message' => "Le mot de passe est obligatoire",
];
} elseif (strlen($client['password']) < 6 && strlen($client['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La longueur de mot de passe doît être supérieur à 5",
];
} elseif (strlen($client['confirmPassword']) == 0) {
$response = [
'res' => 'ERROR',
'message' => "Saisir la confirmaion de mot de passe",
];
} elseif (strlen($client['confirmPassword']) < 6 && strlen($client['confirmPassword']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La longueur de confirmation mot de passe doît être supérieur à 5",
];
} elseif ($client['password'] != $client['confirmPassword']) {
$response = [
'res' => 'ERROR',
'message' => "La confirmation de mot de passe ne correspond pas",
];
} elseif (!$client['accept']) {
$response = [
'res' => 'ERROR',
'message' => "Veuillez accepter les termes et la politique",
];
} else {
// Vérification de l'existance de client
$userByPhone = $this->em->getRepository(User::class)->findOneBy(array('phone' => str_replace(' ', '', $client['telephone'])));
// $userByUsername = $this->em->getRepository(User::class)->findOneBy(array('usermane' => $client['username']));
$userByUsername = $this->em->getRepository(User::class)->findOneBy(array('usermane' => $client['email']));
$userByMail = $this->em->getRepository(User::class)->findOneBy(array('email' => $client['email']));
//$userAll = $this->em->getRepository(User::class)->findOneBy(array('email' => $client['email'], 'phone' => str_replace(' ', '', $client['telephone']), 'usermane' => $client['username'], 'isVerified' => 0));
$userAll = $this->em->getRepository(User::class)->findOneBy(array('email' => $client['email'], 'phone' => str_replace(' ', '', $client['telephone']), 'usermane' => $client['email'], 'isVerified' => 0));
if ($userAll) {
$response = [
'res' => 'ERROR',
'message' => "Ce compte existe mais n'est pas vérifié.",
];
} elseif ($userByPhone) {
$response = [
'res' => 'ERROR',
'message' => "Numéro de téléphone déja utilisé.",
];
} elseif ($userByUsername) {
$response = [
'res' => 'ERROR',
//'message' => "Nom d'utilisateur déja utilisé.",
'message' => "E-mail déja utilisé.",
];
} elseif ($userByMail) {
$response = [
'res' => 'ERROR',
'message' => "E-mail déja utilisé.",
];
} else {
// Suspend auto commit : début de la transaction
$this->em->getConnection()->beginTransaction();
try {
// Création de nouveau utiliateur
$user = new User();
$user->setType('client');
// $user->setUsermane($client['username']);
$user->setUsermane($client['email']);
$user->setFirstName($client['nom']);
$user->setLastName($client['prenom']);
//$user->setCity($client['civilite']);
$user->setPhone(str_replace('', '', $client['telephone']));
$user->setEmail($client['email']);
$user->setCreatedAt(new \DateTime('now'));
$user->setCivility($client['civilite']);
// Mot de passe
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$client['password']
)
);
// Enregistrer le nouveau client
$this->em->persist($user);
$this->em->flush();
// Génération de chaine de username crypté
$key = $this->encrypt($user->getUsermane());
// Envoi de mail
if (isset($_ENV['MAILER_DSN']) && isset($_ENV['MAILER_MAIL'])) {
if ($user->getEmail() && filter_var($user->getEmail(), FILTER_VALIDATE_EMAIL)) {
$bus->dispatch(new Mail('front/mail/activation.html.twig', null, $key, $user->getEmail(), 'Activation compte SUNSHINE-ELEGANCE'), [new DelayStamp(10000)]);
}
};
// Try and commit the transaction
$this->em->getConnection()->commit();
} catch (Exception $e) {
// Rollback the failed transaction
$this->em->getConnection()->rollBack();
throw $e;
}
$response = [
'res' => 'OK',
'message' => 'Votre compte a été crée avec succès. Consulter votre boite mail pour activer votre compte.',
];
}
}
return new jsonResponse($response);
}
/**
* @Route("/user-request-password", name="user_request_password", methods={"GET"})
*/
public function requestPassword(Request $request): Response
{
return $this->render('front/user/requestPassword.html.twig');
}
/**
* @Route("/user-request-verify", name="user_request_verify", methods={"GET"})
*/
public function requestVerify(Request $request): Response
{
return $this->render('front/user/requestVerify.html.twig');
}
/**
* @Route("/api/user-change-password", name="api_user_change_password", options={"expose"=true}, methods={"POST"})
*/
public function changePasswordAPI(Request $request, UserPasswordEncoderInterface $passwordEncoder, MessageBusInterface $bus): Response
{
$client = json_decode($request->request->get('client'), true);
// Vérifier les saisies obligatoires
if (strlen($client['password']) == 0) {
$response = [
'res' => 'ERROR',
'message' => "Saisir votre nouveau passe",
];
} elseif (strlen($client['password']) < 6 && strlen($client['password']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La longueur de mot de passe doît être supérieur à 5",
];
} elseif (strlen($client['confMotDePasse']) == 0) {
$response = [
'res' => 'ERROR',
'message' => "Saisir la confirmaion de mot de passe",
];
} elseif (strlen($client['confMotDePasse']) < 6 && strlen($client['confMotDePasse']) > 0) {
$response = [
'res' => 'ERROR',
'message' => "La longueur de confirmation mot de passe doît être supérieur à 5",
];
} elseif ($client['password'] != $client['confMotDePasse']) {
$response = [
'res' => 'ERROR',
'message' => "La confirmation de mot de passe ne correspond pas",
];
} else {
$string = $this->decrypt($client['key']);
$parts = explode('|', $string);
// Récupérer le nom utilisateur
$email = $parts[0];
// Récupérer la date d'inscription
$dateRestore = $parts[1];
$date = strtotime('now');
$dateRestore = strtotime($dateRestore);
// Vérifier si le lien a expiré (envoyé depuis plus de 30 minutes)
if (round(abs($date - $dateRestore) / 60, 2) > 30) {
return $this->render('front/user/login.html.twig', array(
'message' => 'Votre lien a expiré. Merci de réassayer.',
));
}
// Activation du compte et redirection vers la page login
$user = $this->em->getRepository(User::class)->findOneBy(array('email' => $email));
// Vérification existance utiliateur
if (!$user) {
return $this->render('front/user/login.html.twig', array(
'message' => "Votre nom d'utilisateur n'existe pas.",
));
}
// Mot de passe
$user->setPassword(
$passwordEncoder->encodePassword(
$user,
$client['password']
)
);
// Enregistrement
$this->em->persist($user);
$this->em->flush();
/*return $this->render('front/user/login.html.twig', array(
'message' => "Votre compte a été vérifié. Merci de connecter.",
));*/
$response = [
'res' => 'OK',
'message' => 'Votre mote de passe a été réinitialisé avec succès.',
];
}
return new jsonResponse($response);
}
/**
* @Route("/email-test", name="email_test", options={"expose"=true}, methods={"GET"})
*/
public function emailTest(Request $request, MessageBusInterface $bus): Response
{
$document = $this->em->getRepository(Document::class)->find(26119);
// send mail
$bus->dispatch(new Mail('front/mail/order.html.twig', $document), [new DelayStamp(10000)]);
$response = [
'res' => 'Ok',
'message' => 'Email envoyé.',
];
return new jsonResponse($response);
}
/**
* @Route("/api/user-request-password", name="api_user_request_password", options={"expose"=true}, methods={"POST"})
*/
public function requestPasswordAPI(Request $request, UserPasswordEncoderInterface $passwordEncoder, MessageBusInterface $bus): Response
{
$client = json_decode($request->request->get('client'), true);
// Vérifier les saisies obligatoires
if ($client['email'] == '') {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail est obligatoire",
];
} elseif (!filter_var($client['email'], FILTER_VALIDATE_EMAIL)) {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail n'est pas valide",
];
} else {
// Vérification de l'existance de client
// $userByUsername = $this->em->getRepository(User::class)->findOneBy(array('usermane' => $client['email']));
$userByMail = $this->em->getRepository(User::class)->findOneBy(array('email' => $client['email']));
/*if (!$userByUsername) {
$response = [
'res' => 'ERROR',
'message' => "Nom d'utilisateur inexistant.",
];
} */
if (!$userByMail) {
$response = [
'res' => 'ERROR',
'message' => "E-mail inexistant.",
];
} else {
// Suspend auto commit : début de la transaction
$this->em->getConnection()->beginTransaction();
try {
// Génération de chaine de username crypté
$key = $this->encrypt($userByMail->getEmail());
// Envoi de mail
if (isset($_ENV['MAILER_DSN']) && isset($_ENV['MAILER_MAIL'])) {
if ($client['email'] && filter_var($client['email'], FILTER_VALIDATE_EMAIL)) {
$bus->dispatch(new Mail('front/mail/password.html.twig', null, $key, $userByMail->getEmail(), 'Réinitialisation mot de passe'), [new DelayStamp(10000)]);
}
};
// Try and commit the transaction
$this->em->getConnection()->commit();
} catch (Exception $e) {
// Rollback the failed transaction
$this->em->getConnection()->rollBack();
throw $e;
}
$response = [
'res' => 'OK',
'message' => 'Un e-mail de réinitialisation de mot de passe vous a été envoyé. Merci de consulter votre boite mail.',
];
}
}
return new jsonResponse($response);
}
/**
* @Route("/api/user_request_verify", name="api_user_request_verify", options={"expose"=true}, methods={"POST"})
*/
public function requestUserVerifyAPI(Request $request, UserPasswordEncoderInterface $passwordEncoder, MessageBusInterface $bus): Response
{
$client = json_decode($request->request->get('client'), true);
// Vérifier les saisies obligatoires
if ($client['email'] == '') {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail est obligatoire",
];
} elseif (!filter_var($client['email'], FILTER_VALIDATE_EMAIL)) {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail n'est pas valide",
];
} else {
// Vérification de l'existance de client
// $userByUsername = $this->em->getRepository(User::class)->findOneBy(array('usermane' => $client['email']));
$userByMail = $this->em->getRepository(User::class)->findOneBy(array('email' => $client['email']));
/*if (!$userByUsername) {
$response = [
'res' => 'ERROR',
'message' => "Nom d'utilisateur inexistant.",
];
} */
if (!$userByMail) {
$response = [
'res' => 'ERROR',
'message' => "E-mail inexistant.",
];
} else {
// Suspend auto commit : début de la transaction
$this->em->getConnection()->beginTransaction();
try {
// Génération de chaine de username crypté
$key = $this->encrypt($userByMail->getUsermane());
// Envoi de mail
if (isset($_ENV['MAILER_DSN']) && isset($_ENV['MAILER_MAIL'])) {
if ($client['email'] && filter_var($client['email'], FILTER_VALIDATE_EMAIL)) {
$bus->dispatch(new Mail('front/mail/activation.html.twig', null, $key, $userByMail->getEmail(), 'Activation compte SUNSHINE-ELEGANCE'), [new DelayStamp(10000)]);
}
};
// Try and commit the transaction
$this->em->getConnection()->commit();
} catch (Exception $e) {
// Rollback the failed transaction
$this->em->getConnection()->rollBack();
throw $e;
}
$response = [
'res' => 'OK',
'message' => 'Un e-mail de vérification vous a été envoyé. Merci de consulter votre boite mail.',
];
}
}
return new jsonResponse($response);
}
/**
* @Route("/api/user_contact", name="api_user_contact", options={"expose"=true}, methods={"POST"})
*/
public function userContactAPI(Request $request, UserPasswordEncoderInterface $passwordEncoder, MessageBusInterface $bus): Response
{
$client = json_decode($request->request->get('client'), true);
// Vérifier les saisies obligatoires
if ($client['telephone'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Le numéro de téléphone est obligatoire.",
];
} elseif ($client['email'] != '' && !filter_var($client['email'], FILTER_VALIDATE_EMAIL)) {
$response = [
'res' => 'ERROR',
'message' => "L'adresse mail n'est pas valide.",
];
} elseif ($client['message'] == '') {
$response = [
'res' => 'ERROR',
'message' => "Saisir votre message.",
];
} else {
// Envoi de mail
if (isset($_ENV['MAILER_DSN']) && isset($_ENV['MAILER_MAIL']) && isset($_ENV['MAILER_CONTACT'])) {
if (filter_var($_ENV['MAILER_CONTACT'], FILTER_VALIDATE_EMAIL)) {
$bus->dispatch(new Mail('front/mail/contact.html.twig', null, null, $_ENV['MAILER_CONTACT'], 'Message client contact', $client), [new DelayStamp(10000)]);
}
};
$response = [
'res' => 'OK',
'message' => 'Votre message a été envoyé avec succès.'
];
}
return new jsonResponse($response);
}
}