src/Controller/App/UserController.php line 136
<?php
namespace App\Controller\App;
use App\Entity\User;
use App\Form\ChangePasswordFormType;
use App\Form\UserCreateType;
use App\Form\UserType;
use App\Repository\UserRepository;
use App\Service\FileUploader;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Contracts\Translation\TranslatorInterface;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\PasswordHasher\Hasher\UserPasswordHasherInterface;
#[Route('/app/user')]
#[IsGranted('IS_AUTHENTICATED_FULLY')]
class UserController extends AbstractController
{
public function __construct(private TranslatorInterface $translator)
{
}
#[Route('/', name: 'app_user_index', methods: ['GET', 'POST'])]
public function index(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher, FileUploader $fileUploader): Response
{
$user = new User();
$form = $this->createForm(UserCreateType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var $user App\Entity\User */
$CurrentUser = $this->getUser();
$user->setCompany($CurrentUser->getCompany());
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form->get('plainPassword')->getData()
)
);
$photo = $form->get('photo')->getData();
if ($photo) {
$uploadedFileName = $fileUploader->upload($photo, 'users_dir');
$user->setPhoto($uploadedFileName);
}
$userRepository->add($user, true);
// TODO: send email invitation and to verify user
$this->addFlash('success', $this->translator->trans('Succès !!'));
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}
if ($form->isSubmitted() && !$form->isValid()) {
$this->addFlash('error', $this->translator->trans('Error !!'));
}
return $this->render('app/user/index.html.twig', [
'users' => $userRepository->findAll(),
'form' => $form,
]);
}
#[Route('/new', name: 'app_user_new', methods: ['GET', 'POST'])]
public function new(Request $request, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher, FileUploader $fileUploader): Response
{
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
// $user = new User();
// $form = $this->createForm(UserType::class, $user);
// $form->handleRequest($request);
// if ($form->isSubmitted() && $form->isValid()) {
// /** @var $user App\Entity\User */
// $CurrentUser = $this->getUser();
// $user->setCompany($CurrentUser->getCompany());
// $user->setPassword(
// $userPasswordHasher->hashPassword(
// $user,
// $form->get('password')->getData()
// )
// );
// $photo = $form->get('photo')->getData();
// if ($photo) {
// $uploadedFileName = $fileUploader->upload($photo, 'users_dir');
// $user->setPhoto($uploadedFileName);
// }
// $userRepository->add($user, true);
// // TODO: send email invitation and to verify user
// $this->addFlash('success', $this->translator->trans('Succès !!'));
// return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
// }
// return $this->renderForm('app/user/new.html.twig', [
// 'user' => $user,
// 'form' => $form,
// ]);
}
#[Route('/{id}', name: 'app_user_show', methods: ['GET'])]
public function show(User $user): Response
{
return $this->redirectToRoute('app_user_edit', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
// return $this->render('app/user/show.html.twig', [
// 'user' => $user,
// ]);
}
#[Route('/{id}/edit', name: 'app_user_edit', methods: ['GET', 'POST'])]
public function edit(Request $request, User $user, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher, FileUploader $fileUploader): Response
{
$form = $this->createForm(UserType::class, $user);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$photo = $form->get('photo')->getData();
if ($photo) {
$uploadedFileName = $fileUploader->upload($photo, 'users_dir');
$user->setPhoto($uploadedFileName);
}
$userRepository->add($user, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
return $this->redirectToRoute('app_user_edit', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('app/user/edit.html.twig', [
'user' => $user,
'form' => $form,
]);
}
#[Route('/{id}/toggleactive', name: 'app_user_toggle_active', methods: ['GET', 'POST'])]
public function toggle_active(Request $request, User $user, UserRepository $userRepository): Response
{
$user->setIsActive(!$user->isIsActive());
$userRepository->add($user, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}
#[Route('/{id}/editpassword', name: 'app_user_edit_password', methods: ['GET', 'POST'])]
public function edit_password(Request $request, User $user, UserRepository $userRepository, UserPasswordHasherInterface $userPasswordHasher, FileUploader $fileUploader): Response
{
// The token is valid; allow the user to change their password.
$form_password = $this->createForm(ChangePasswordFormType::class);
$form_password->handleRequest($request);
if ($form_password->isSubmitted() && $form_password->isValid()) {
if ($form_password->get('plainPassword')) {
$user->setPassword(
$userPasswordHasher->hashPassword(
$user,
$form_password->get('plainPassword')->getData()
)
);
}
$userRepository->add($user, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
return $this->redirectToRoute('app_user_edit_password', ['id' => $user->getId()], Response::HTTP_SEE_OTHER);
}
return $this->renderForm('app/user/edit-password.html.twig', [
'user' => $user,
'form_password' => $form_password,
]);
}
#[Route('/{id}', name: 'app_user_delete', methods: ['POST'])]
public function delete(Request $request, User $user, UserRepository $userRepository): Response
{
if ($this->isCsrfTokenValid('delete' . $user->getId(), $request->request->get('_token'))) {
try {
$userRepository->remove($user, true);
$this->addFlash('success', $this->translator->trans('Succès !!'));
} catch (\Exception $e) {
$errorMessage = $e->getMessage();
$result = explode(':', $errorMessage);
$this->addFlash('error', $result[0]);
}
}
return $this->redirectToRoute('app_user_index', [], Response::HTTP_SEE_OTHER);
}
}