PrivateDiscussionsController.php 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. <?php
  2. namespace App\Controller;
  3. use App\Entity\PrivateDiscussion;
  4. use App\Entity\PrivateMessage;
  5. use App\Entity\User;
  6. use Symfony\Component\HttpFoundation\Request;
  7. use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
  8. use Symfony\Component\HttpFoundation\Response;
  9. use Symfony\Component\Routing\Annotation\Route;
  10. class PrivateDiscussionsController extends AbstractController
  11. {
  12. #[Route('/private/discussions', name: 'private_discussions')]
  13. public function index(Request $request): Response
  14. {
  15. $session = $this->get('session');
  16. if (null === $session->get('user')) {
  17. return $this->redirectToRoute('home');
  18. }
  19. $formBuilder = $this->createFormBuilder();
  20. $formBuilder->add('text', \Symfony\Component\Form\Extension\Core\Type\TextType::class)
  21. ->add('username', \Symfony\Component\Form\Extension\Core\Type\TextType::class)
  22. ->setAction($this->generateUrl('private_discussions'));
  23. $form = $formBuilder->getForm();
  24. $em = $this->getDoctrine()->getManager();
  25. $repo_user = $em->getRepository(User::class);
  26. $user = $repo_user->findOneBy(array('username' => $session->get("user")));
  27. $private_discussions = array();
  28. foreach ($user->getPrivateDiscussions() as $pd) {
  29. $participants = $pd->getParticipants();
  30. if ($participants[0] == $user) {
  31. $participant = $participants[1];
  32. } else {
  33. $participant = $participants[0];
  34. }
  35. array_push($private_discussions, array($pd->getId() => $participant->getUsername()));
  36. }
  37. if ($request->getMethod() == 'POST') {
  38. $form->handleRequest($request);
  39. if ($form->isValid()) {
  40. $recept = $repo_user->findOneBy(array('username' => $form->get('username')->getData()));
  41. if (!$recept) {
  42. return new Response("Profil non existant");
  43. }
  44. $disc_found = false;
  45. foreach ($user->getPrivateDiscussions() as $disc) {
  46. if(in_array($recept, $disc->getParticipants()->getValues())) {
  47. $disc_found = true;
  48. break;
  49. }
  50. }
  51. if ($disc_found) {
  52. return new Response("Discussion existante");
  53. }
  54. $discussion = new PrivateDiscussion();
  55. $discussion->addParticipant($user);
  56. $discussion->addParticipant($recept);
  57. $dm = new PrivateMessage();
  58. $dm->setSender($user);
  59. $dm->setText($form->get('text')->getData());
  60. $discussion->addPrivateMessage($dm);
  61. $em->persist($dm);
  62. $em->persist($discussion);
  63. $em->flush();
  64. }
  65. }
  66. return $this->render('private_discussions/index.html.twig', [
  67. 'controller_name' => 'PrivateDiscussionsController',
  68. 'form' => $form->createView(),
  69. 'private_discussions' => $private_discussions,
  70. 'username' => $session->get('user'),
  71. ]);
  72. }
  73. }