PrivateDiscussionController.php 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\PrivateDiscussion;
  4. use App\Entity\PrivateMessage;
  5. use App\Entity\User;
  6. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  7. use Symfony\Component\HttpFoundation\Request;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. class PrivateDiscussionController extends AbstractController
  11. {
  12. #[Route('/private/discussion/{id}', name: 'private_discussion')]
  13. public function index($id, Request $request): Response
  14. {
  15. $session = $this->get('session');
  16. // Redirection sur le login si l'utilisateur n'est pas connecté
  17. if (null === $session->get('user')) {
  18. return $this->redirectToRoute('login');
  19. }
  20. // Création du formulaire pour envoyer un message à l'utilisateur
  21. $formBuilder = $this->createFormBuilder();
  22. $formBuilder->add('text', \Symfony\Component\Form\Extension\Core\Type\TextType::class,['label' => 'Envoyer un message'])
  23. ->setAction($this->generateUrl('private_discussion', ['id' => $id]));
  24. $form = $formBuilder->getForm();
  25. // Obtention de la liste des messages privées correspondant à un utilisateur
  26. $em = $this->getDoctrine()->getManager();
  27. $repo_pd = $em->getRepository(PrivateDiscussion::class);
  28. $pd = $repo_pd->find($id);
  29. $messages = $pd->getPrivateMessages();
  30. // Envoi des messages à $user
  31. if ($request->getMethod() == 'POST') {
  32. $form->handleRequest($request);
  33. if($form->isValid()) {
  34. $user = $em->getRepository(User::class)->findOneBy(array('username' => $session->get('user')));
  35. $pm = new PrivateMessage();
  36. $pm->setText($form->get('text')->getData());
  37. $pm->setSender($user);
  38. $pm->setPrivateDiscussion($pd);
  39. $em->persist($pm);
  40. $em->flush();
  41. }
  42. }
  43. // Affichage de la vue
  44. return $this->render('private_discussion/index.html.twig', [
  45. 'controller_name' => 'PrivateDiscussionController',
  46. 'messages' => $messages,
  47. 'form' => $form->createView(),
  48. 'username' => $session->get('user'),
  49. ]);
  50. }
  51. }