<?php
namespace App\Controller;
use App\Entity\User;
use App\Form\UserType;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\File\Exception\FileException;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\File\File;
use Symfony\Component\String\Slugger\SluggerInterface;
class UserController extends AbstractController
{
public function __construct(EntityManagerInterface $manager, UserPasswordHasherInterface $passwordHasher)
{
$this->manager = $manager;
$this->passwordHasher = $passwordHasher;
}
/**
* @Route("/user", name="app_user")
*/
public function index(Request $request, SluggerInterface $sluger): Response
{
// Nouvelle instance d'utilisateur
$user = new User();
// Création du formulaire à partir d'une classe issu du fichier UserType.php
$form = $this->createForm(UserType::class, $user);
// Traitement du formulaire
$form->handleRequest($request);
// Si le formulaire est soumis et validé , alors...
if ($form->isSubmitted() && $form->isValid()) {
$emptyPassword = $form->get('password')->getData();
if ($emptyPassword == null) {
// recuperer le mdp de l'user en bdd et le renvoyer
$user->setPassword($user->getPassword());
} else {
$passwordEncod = $this->passwordHasher->hashPassword($user, $emptyPassword);
$user->setPassword($passwordEncod);
}
$photoUser = $form->get('photo')->getData();
if ($photoUser) {
$originalFilename = pathinfo($photoUser->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $sluger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photoUser->guessExtension();
try {
$photoUser->move(
$this->getParameter('photo'),
$newFilename
);
} catch (FileException $e) {
}
$user->setPhoto($newFilename);
} //else {
// dd('Aucune image de competence disponible');
// }
// On va hacher le mdp de l'utilisateur
// $user->setPassword($this->passwordHasher->hashPassword($user, $user->getPassword()));
// On persiste l'utilisateur
$this->manager->persist($user);
// On flush
$this->manager->flush();
// On retourne sur la page d'accueil
return $this->redirectToRoute('app_home');
}
return $this->render('user/index.html.twig', [
// On passe le formulaire à la vue
'myUserForm' => $form->createView(),
]);
}
/**
* @Route("/user/update/{id}", name="app_user_update")
*/
public function updateUser(User $userUpdate, Request $request, SluggerInterface $sluger): Response
{
$formUpdate = $this->createForm(UserType::class, $userUpdate);
$formUpdate->handleRequest($request);
if ($formUpdate->isSubmitted() && $formUpdate->isValid()) {
// Récuperer le champ du password
$emptyPassword = $formUpdate->get('password')->getData();
// Quand le port lunaire est soumis, vérifier que le champ password,
// S'il est vide, alors on recupère le mot de passe à l'utilisateur à modifier et on le renvoi
if ($emptyPassword == null) {
// recuperer le mdp de l'user en bdd et le renvoyer
$userUpdate->setPassword($userUpdate->getPassword());
} else {
$passwordEncod = $this->passwordHasher->hashPassword($userUpdate, $emptyPassword);
$userUpdate->setPassword($passwordEncod);
}
$photoUser = $formUpdate->get('photo')->getData();
if ($photoUser) {
$originalFilename = pathinfo($photoUser->getClientOriginalName(), PATHINFO_FILENAME);
$safeFilename = $sluger->slug($originalFilename);
$newFilename = $safeFilename . '-' . uniqid() . '.' . $photoUser->guessExtension();
try {
$photoUser->move(
$this->getParameter('photo'),
$newFilename
);
} catch (FileException $e) {
}
$userUpdate->setPhoto($newFilename);
} //else {
// dd('Aucune image de competence disponible');
// }
$this->manager->persist($userUpdate);
$this->manager->flush();
return $this->redirectToRoute('app_user');
}
return $this->render('user/updateUser.html.twig', ['updateUser' => $formUpdate->createView(),]);
}
/**
* @Route("/all/users", name="app_all_presentation_Vue")
*/
public function allUsers(): Response
{
$users = $this->manager->getRepository(User::class)->findAll();
// Verifier que la variable a bien recu les données cherchés dans la BDD
return $this->render('user/allUsersVue.html.twig', [
// Matérialise l'affichage du formulaire
'users' => $users,
]);
}
}