|
|
@@ -15,23 +15,26 @@ class PrivateDiscussionsController extends AbstractController
|
|
|
#[Route('/private/discussions', name: 'private_discussions')]
|
|
|
public function index(Request $request): Response
|
|
|
{
|
|
|
- $error = "";
|
|
|
$session = $this->get('session');
|
|
|
|
|
|
+ // Si l'utilisateur n'est pas connecté, il est redirigé sur login
|
|
|
if (null === $session->get('user')) {
|
|
|
return $this->redirectToRoute('login');
|
|
|
}
|
|
|
+
|
|
|
+ // Création du formulaire pour initialiser une discussion
|
|
|
$formBuilder = $this->createFormBuilder();
|
|
|
$formBuilder->add('text', \Symfony\Component\Form\Extension\Core\Type\TextType::class, ['label' => 'Envoyer un message'])
|
|
|
->add('username', \Symfony\Component\Form\Extension\Core\Type\TextType::class, ['label' => 'Utilisateur'])
|
|
|
->setAction($this->generateUrl('private_discussions'));
|
|
|
$form = $formBuilder->getForm();
|
|
|
|
|
|
+ // Recherche de l'objet correspondant à l'utilisateur connecté
|
|
|
$em = $this->getDoctrine()->getManager();
|
|
|
$repo_user = $em->getRepository(User::class);
|
|
|
$user = $repo_user->findOneBy(array('username' => $session->get("user")));
|
|
|
|
|
|
- $user = $repo_user->findOneBy(array('username' => $session->get("user")));
|
|
|
+ // Recherche de toutes les discussions de l'utilisateur et récupération du nom du destinataire
|
|
|
$private_discussions = array();
|
|
|
foreach ($user->getPrivateDiscussions() as $pd) {
|
|
|
$participants = $pd->getParticipants();
|
|
|
@@ -43,10 +46,12 @@ class PrivateDiscussionsController extends AbstractController
|
|
|
array_push($private_discussions, array($pd->getId() => $participant->getUsername()));
|
|
|
}
|
|
|
|
|
|
+ // Création d'une nouvelle discussion
|
|
|
if ($request->getMethod() == 'POST') {
|
|
|
$form->handleRequest($request);
|
|
|
if ($form->isValid()) {
|
|
|
$recept = $repo_user->findOneBy(array('username' => $form->get('username')->getData()));
|
|
|
+ // Vérification si le profil existe
|
|
|
if (!$recept) {
|
|
|
return $this->render('private_discussions/index.html.twig', [
|
|
|
'controller_name' => 'PrivateDiscussionsController',
|
|
|
@@ -56,6 +61,7 @@ class PrivateDiscussionsController extends AbstractController
|
|
|
'error' => "Profil non existant.",
|
|
|
]);
|
|
|
}
|
|
|
+ // Vérifie si la discussion existe
|
|
|
$disc_found = false;
|
|
|
foreach ($user->getPrivateDiscussions() as $disc) {
|
|
|
if (in_array($recept, $disc->getParticipants()->getValues())) {
|
|
|
@@ -63,6 +69,7 @@ class PrivateDiscussionsController extends AbstractController
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ // Si c'est le cas on affiche l'erreur "Discussion existante."
|
|
|
if ($disc_found) {
|
|
|
return $this->render('private_discussions/index.html.twig', [
|
|
|
'controller_name' => 'PrivateDiscussionsController',
|
|
|
@@ -72,6 +79,7 @@ class PrivateDiscussionsController extends AbstractController
|
|
|
'error' => "Discussion existante.",
|
|
|
]);
|
|
|
}
|
|
|
+ // Sinon on crée la nouvelle discussion
|
|
|
$discussion = new PrivateDiscussion();
|
|
|
$discussion->addParticipant($user);
|
|
|
$discussion->addParticipant($recept);
|