src/Controller/Backend/ContactController.php line 34

Open in your IDE?
  1. <?php
  2. namespace App\Controller\Backend;
  3. use App\Entity\EntityStatus;
  4. use App\Entity\Entreprise;
  5. use App\Entity\User;
  6. use App\Repository\UserRepository;
  7. use Doctrine\ORM\EntityManagerInterface;
  8. use Symfony\Bridge\Doctrine\Form\Type\EntityType;
  9. use Symfony\Component\HttpFoundation\JsonResponse;
  10. use App\Entity\Contact;
  11. use App\Form\Common\ContactCompleteType;
  12. use Sensio\Bundle\FrameworkExtraBundle\Configuration\IsGranted;
  13. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  14. use Symfony\Component\HttpFoundation\Request;
  15. use Symfony\Component\HttpFoundation\Response;
  16. use Symfony\Component\Routing\Annotation\Route;
  17. #[Route('/admin')]
  18. class ContactController extends AbstractController
  19. {
  20.     #[Route(path'/contacts/{id}/show'name'show_contact')]
  21.     public function show(Contact $contactUserRepository $repository): Response
  22.     {
  23.         $userExists $repository->findOneBy([
  24.             'contact' => $contact
  25.         ]);
  26.         return $this->render('backend/contact/show.html.twig', [
  27.             'controller_name' => 'ContactController',
  28.             'menu' => 'contact',
  29.             'contact' => $contact,
  30.             'userExists' => $userExists
  31.         ]);
  32.     }
  33.     #[Route(path'/contacts/add-from-dashboard'name'add_contact_from_dashboard'methods: ['GET''POST'])]
  34.     #[Route(path'/contacts/{id}/add'name'add_contact_from_firm'methods: ['GET''POST'])]
  35.     #[IsGranted('ROLE_ADD_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  36.     public function add(
  37.         Request $request,
  38.         EntityManagerInterface $em,
  39.         ?Entreprise $entreprise null,
  40.         ?int $fromDashboard 0
  41.     ): Response
  42.     {
  43.         $contact = new Contact();
  44.         $route $request->attributes->get('_route');
  45.         if (!is_null($entreprise)) {
  46.             $contact->setFirm($entreprise);
  47.         }
  48.         $form $this->createForm(ContactCompleteType::class, $contact, [
  49.             'create_from_dashboard' => $route === 'add_contact_from_dashboard'
  50.         ]);
  51.         $form->handleRequest($request);
  52.         if ($form->isSubmitted() && $form->isValid()) {
  53.             if (!is_null($entreprise)) {
  54.                 $contact->setFirm($entreprise);
  55.             }
  56.             $contact->setStatus(Contact::STATUS_ENABLED);
  57.             $em->persist($contact);
  58.             $em->flush();
  59.             $this->addFlash(
  60.                 'success',
  61.                 'Enregistrement effectué avec succès'
  62.             );
  63.             if ($route === 'add_contact_from_firm' && !is_null($entreprise)) {
  64.                 return $this->redirectToRoute('show_entreprise', [
  65.                     'id' => $entreprise->getId()
  66.                 ]);
  67.             } else {
  68.                 return $this->redirectToRoute('show_contact', [
  69.                     'id' => $form->getData()->getId()
  70.                 ]);
  71.             }
  72.         }
  73.         return $this->render('backend/contact/edit.html.twig', [
  74.             'controller_name' => 'ContactController',
  75.             'menu' => 'contact',
  76.             'contactForm' => $form->createView(),
  77.             'action' => 'creation',
  78.             'route' => $route,
  79.             'entreprise' => $entreprise
  80.         ]);
  81.     }
  82.     #[Route(path'/contacts/{id}/edit'name'edit_contact'methods: ['GET''POST'])]
  83.     #[Route(path'/contacts/{id}/edit'name'edit_contact_from_firm'methods: ['GET''POST'])]
  84.     #[IsGranted('ROLE_UPDATE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  85.     public function edit(
  86.         Contact $contact,
  87.         Request $request,
  88.         EntityManagerInterface $em
  89.     )
  90.     {
  91.         $route $request->attributes->get('_route');
  92.         $form $this->createForm(ContactCompleteType::class, $contact);
  93.         $form->handleRequest($request);
  94.         if ($form->isSubmitted() && $form->isValid()) {
  95.             $em->flush();
  96.             $this->addFlash(
  97.                 'success',
  98.                 'Enregistrement effectué avec succès'
  99.             );
  100.             if ($route === 'edit_contact_from_firm') {
  101.                 return $this->redirectToRoute('show_entreprise', [
  102.                     'id' => $contact->getFirm()->getId()
  103.                 ]);
  104.             } else {
  105.                 return $this->redirectToRoute('show_contact', [
  106.                     'id' => $contact->getId()
  107.                 ]);
  108.             }
  109.         }
  110.         return $this->renderForm('backend/contact/edit.html.twig', [
  111.             'controller_name' => 'ContactController',
  112.             'menu' => 'contact',
  113.             'contactForm' => $form,
  114.             'action' => 'edition',
  115.             'contact' => $contact,
  116.             'contactData' => $contact->getPrenom().' ' .$contact->getNom(),
  117.             'route' => $route
  118.         ]);
  119.     }
  120.     #[Route('/contacts/{id}/archive'name'archive_contact'methods: ['DELETE''POST'])]
  121.     #[IsGranted('ROLE_DELETE_ENTITY'message'Vous n\'avez pas les droits nécessaire pour accéder à cette fonctionnalité')]
  122.     public function archive(Contact $contactRequest $requestEntityManagerInterface $em): JsonResponse
  123.     {
  124.         $data json_decode($request->getContent(), true);
  125.         if ($this->isCsrfTokenValid('contact_'.$contact->getId(), $data['_token'])) {
  126.             $contact->setStatus(EntityStatus::STATUS_ARCHIVED);
  127.             if ($contact->getUser() instanceof User) {
  128.                 $contact->getUser()->setStatus(EntityStatus::STATUS_ARCHIVED);
  129.             }
  130.             $em->persist($contact);
  131.             $em->flush();
  132.             return new JsonResponse([
  133.                 'status' => 'ok',
  134.                 'message' => 'Archivage effectuée avec succès'
  135.             ]);
  136.         }
  137.         return new JsonResponse([
  138.             'status' => 'nok',
  139.             'message' => 'Erreur lors de l\'archivage. Merci de contacter un administrateur.'
  140.         ]);
  141.     }
  142. }