<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\ConnexionFormType;
use App\Form\UserFormType;
use App\Notification\ContactNotification;
use App\Repository\MediaRepository;
use App\Repository\UserRepository;
use Doctrine\ORM\EntityManagerInterface;
use Nexmo\Client;
use Nexmo\Client\Credentials\Basic;
use PhpParser\Node\Expr\BinaryOp\Equal;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\Security\Core\Encoder\UserPasswordEncoderInterface;
use Symfony\Component\Security\Http\Authentication\AuthenticationUtils;
use telesign\sdk\messaging\MessagingClient;
use Twig\Cache\FilesystemCache;
class UserController extends AbstractController
{
/**
* @var EntityManagerInterface
*/
private $em;
/**
* UserController constructor.
* @param EntityManagerInterface $em
*/
public function __construct(EntityManagerInterface $em)
{
$this->em = $em;
}
/**
* Permet de signaler l'echec d'une connexion a cause d'un faux mot de passe ou email
*
* @Route("/login", name="parc.login")
* @param Request $request
* @param AuthenticationUtils $authenticationUtils
* @return Response
*/
public function login(Request $request,AuthenticationUtils $authenticationUtils){
$user = new User();
$FormConnexion = $this->createForm(ConnexionFormType::class,$user);
$FormConnexion->handleRequest($request);
$error = $authenticationUtils->getLastAuthenticationError();
$lastUsername = $authenticationUtils->getLastUsername();
return $this->render('inscription/page/formConnexionPage.html.twig',[
'formConnexion' => $FormConnexion->createView(),
'error' => $error,
'last_username' => $lastUsername
]);
}
/**
* Permet de checker
*
* @Route("/loginCheck",name="parc.page.login")
* @return \Symfony\Component\HttpFoundation\RedirectResponse
*/
public function loginCheck(){
if($this->isGranted('ROLE_SUPER_ADMIN')){
return $this->redirectToRoute('app.admin');
}
else if($this->isGranted('ROLE_CHOEUR')){
return $this->redirectToRoute('choeur.admin');
}
return $this->redirectToRoute('chovie.logout');
}
/**
* Appel les formulaires de connexion et d'inscription a l'index du site
*
* @Route("/",name="inscription.inscription")
* @param UserRepository $userRepository
* @param Request $request
* @return Response
* @internal param AuthenticationUtils $authenticationUtils
*/
public function inscription(UserRepository $userRepository,Request $request):Response{
$user = new User();
$UserInfo = $userRepository->find2User(2);
$UserInfo2 = $userRepository->UserMembre(12);
$FormInscription = $this->createForm(UserFormType::class,$user);
$FormInscription->handleRequest($request);
$req_user_page = $userRepository->find2User(1);
if($FormInscription->isSubmitted() && $FormInscription->isValid()){
if($user->getTypeCompteUser() === 1){
return $this->render('inscription/new_suite_info.html.twig',[
'formInscription' => $FormInscription->createView(),
'MyIdPDW' => $user->getPasswordUser()
]);
}
return $this->render('inscription/signature/new_suite_info.html.twig',[
'formInscription' => $FormInscription->createView(),
'MyIdPDW' => $user->getPasswordUser()
]);
}
$count = $userRepository->count(['id' => $userRepository->UserMembreSignateurCount()]);
return $this->render('inscription/new.html.twig',[
'formInscription' => $FormInscription->createView(),
'UserInfo' => $UserInfo,
'UserInfo2' => $UserInfo2,
'User' => $req_user_page,
'totalPreference' => $count
]);
}
/**
* Permet l'envoie d'un code de vérification du robot
*
* @Route("/sendCode",name="inscription.sendCode")
* @param ContactNotification $email
* @param Request $request
* @param UserPasswordEncoderInterface $encoder
* @return Response
* @throws \Twig\Error\LoaderError
* @throws \Twig\Error\RuntimeError
* @throws \Twig\Error\SyntaxError
*/
public function sendCode(Request $request,UserPasswordEncoderInterface $encoder):Response{
$user = new User();
$FormInscription = $this->createForm(UserFormType::class,$user);
$FormInscription->handleRequest($request);
$pwd = $user->getPasswordUser();
if($FormInscription->isSubmitted() && $FormInscription->isValid()){
if($user->getTypeCompteUser() === 3){
$hash = $encoder->encodePassword($user,$user->getPasswordUser());
$user->setPasswordUser($hash);
}
$code = mt_rand(0,100000000);
$user->setCodeValidation($code);
return $this->render('inscription/signature/sms.html.twig',[
'formInscription' => $FormInscription->createView(),
'MyIdPDW' => $pwd,
'code' => $code
]);
}
if($user->getTypeCompteUser() === 1){
return $this->json(['message' => 'Erreur d\'envoie'],200);
}
return $this->redirectToRoute('inscription.sms');
}
/**
* @Route("/sms", name="inscription.sms")
*
* @param Request $request
* @param UserPasswordEncoderInterface $encoder
* @param UserRepository $userRepository
* @return \Symfony\Component\HttpFoundation\RedirectResponse|Response
*/
public function smsvalidation(Request $request, UserPasswordEncoderInterface $encoder, UserRepository $userRepository){
$user = new User();
$FormInscription = $this->createForm(UserFormType::class,$user);
$FormInscription->handleRequest($request);
if($FormInscription->isSubmitted()){
if($FormInscription->isValid()) {
$hash = $encoder->encodePassword($user, $user->getPasswordUser());
$user->setPasswordUser($hash);
$user->setRoles('ROLE_CHOEUR');
$this->em->persist($user);
$this->em->flush();
return $this->redirectToRoute('parc.login', [
'm' => $user->getEmailUser(),
'?' => $hash,
]);
}
$code = mt_rand(1000,10000000);
return $this->render('inscription/signature/sms.html.twig',[
'formInscription' => $FormInscription->createView(),
'MyIdPDW' => $user->getPassword(),
'code' => $code
]);
}
if($user->getPasswordUser() === null){
// Si la session à été detruite
return $this->render('inscription/inscription.html.twig',[
'formInscription' => $FormInscription->createView(),
'error' => 'Votre session à été détruite',
'last_username' => ''
]);
}
$code = mt_rand(10000,10000000);
return $this->render('inscription/signature/sms.html.twig',[
'formInscription' => $FormInscription->createView(),
'req' => 0,
'MyIdPDW' => $user->getPassword(),
'code' => $code
]);
}
/**
* @Route("/sauverUser/{mail}/{pwd}",name="inscription.sauver")
* @param Request $request
* @return Response
*/
public function sauver(Request $request){
$user = new User();
$FormProfil = $this->createForm(ConnexionFormType::class,$user);
//$this->filesystemCache->clear();
return $this->render('inscription/formConnexion.html.twig',[
'formConnexion' => $FormProfil->createView(),
'pwd' => $request->get('pwd'),
'email' => $request->get('mail')
]);
}
/**
* @Route("/page/{nm}/page/php?q=1{ii}y{clan}0e{ik}f1u/{id}-{create_at}", name="page.chovie_pub")
* @param Request $request
* @param MediaRepository $repository
* @param UserRepository $userRepository
* @return Response
*/
public function page_(Request $request,MediaRepository $repository,UserRepository $userRepository):Response
{
$page_id = $request->get('id');
$page_ii = $request->get('ii');
$page_ik = $request->get('ik');
if(!is_numeric($page_id) or $page_id != $page_ii or $page_id != $page_ik ){
return $this->redirectToRoute('inscription.inscription');
}
$req_user = $repository->getMediaPage($page_id,1,99999999999);
$req_user_page = $userRepository->find($page_id);
$findAll = $userRepository->find2User(4);
return $this->render('inscription/page/page.html.twig',[
'q' => 101,
'Media' => $req_user,
'User' => $req_user_page,
'UserAll' => $findAll
]);
}
/**
* @Route("/page-{q}-{id}/{ik}-{ii}-{apprt}-{idscroller}", name="page.media.scroller")
*
* @param Request $request
* @param MediaRepository $repository
* @return Response
*/
public function scrollerMedia(Request $request, MediaRepository $repository){
$page_id = $request->get('id');
$page_ii = $request->get('ii');
$page_ik = $request->get('ik');
$scroler = $request->get('idscroller');
$apprt = $request->get('apprt');
$q = $request->get('q');
$req_user = $repository->getMediaPage($page_id,$apprt,$scroler);
return $this->render('parc/_lecteur_media.html.twig',[
'Media' => $req_user,
'q' => $q
]);
}
/**
* @Route("/pageAuto", name="page.auto" )
*
* @param Request $request
* @param UserRepository $repository
* @return Response
*/
public function searchUser(Request $request, UserRepository $repository) {
$key = trim($request->get('q'));
$tab = $repository->autocomplete($key,0);
return $this->render('inscription/page/seekUser.html.twig',[
'UserSearch' => $tab
]);
}
/**
* Appel les formulaires de connexion et d'inscription a l'index du site
*
* @Route("/inscription",name="user.inscription")
* @param UserRepository $userRepository
* @param Request $request
* @param AuthenticationUtils $authenticationUtils
* @return Response
*/
public function inscriptionForm(UserRepository $userRepository,Request $request,AuthenticationUtils $authenticationUtils):Response{
$user = new User();
$FormInscription = $this->createForm(UserFormType::class,$user);
$FormInscription->handleRequest($request);
if($FormInscription->isSubmitted() && $FormInscription->isValid()){
/**$this->filesystemCache->setMultiple([
'user.nom' => $user->getNomUser(),
'user.email' => $user->getEmailUser(),
'user.telphone' => $user->getNumTelUser(),
'user.motDePasse' => $user->getPasswordUser(),
'user.typeCompte' => $user->getTypeCompteUser(),
]);*/
if($user->getTypeCompteUser() === 1){
return $this->render('inscription/new_suite_info.html.twig',[
'formInscription' => $FormInscription->createView(),
'MyIdPDW' => $user->getPasswordUser()
]);
}
return $this->render('inscription/signature/new_suite_info.html.twig',[
'formInscription' => $FormInscription->createView(),
'MyIdPDW' => $user->getPasswordUser()
]);
}
return $this->render('inscription/inscription.html.twig',[
'formInscription' => $FormInscription->createView(),
]);
}
/**
* Share whatsapp
*
* @Route("/page/xe5oi{id}yr{id_med}h7",name="page.Media.notifierWhasapp")
*
* @param MediaRepository $mediaRepository
* @param Request $request
* @param UserRepository $userRepository
* @return Response
*/
public function MediaSelectionnerWhatsapp(MediaRepository $mediaRepository,Request $request,UserRepository $userRepository){
$id = $request->get('id');
$id_med = $request->get('id_med');
$req_user = $mediaRepository->getMediaNotification($id,$id_med);
$req_user_page = $userRepository->find($id);
$findAll = $userRepository->find2User(4);
return $this->render('inscription/page/page.html.twig',[
'q' => 101,
'Media' => $req_user,
'User' => $req_user_page,
'UserAll' => $findAll
]);
}
}