diff --git a/src/Controller/FriendController.php b/src/Controller/FriendController.php index e9111a85dae64581b698e41e5191bebc4c5d0ddf..ca9ce3fec0d645f5af39564c5d1dda63fb0e5e16 100644 --- a/src/Controller/FriendController.php +++ b/src/Controller/FriendController.php @@ -41,18 +41,20 @@ class FriendController extends AbstractController */ public function index(Request $request): Response { - $invitationRequestsSent = $this->doctrine->getManager()->getRepository(InvitationRequest::class)->findBy([ + $pendingInvitationRequestsSent = $this->doctrine->getManager()->getRepository(InvitationRequest::class)->findBy([ 'sender' => $this->getUser(), + 'status' => InvitationRequest::STATUS_NEW, ], ['id' => 'DESC']); - $invitationRequestsReceived = $this->doctrine->getManager()->getRepository(InvitationRequest::class)->findBy([ + $pendingInvitationRequestsReceived = $this->doctrine->getManager()->getRepository(InvitationRequest::class)->findBy([ 'recipient' => $this->getUser(), + 'status' => InvitationRequest::STATUS_NEW, ], ['id' => 'DESC']); return $this->render('user/showFriends.html.twig', [ 'user' => $this->getUser(), - 'invitationRequestsSent' => $invitationRequestsSent, - 'invitationRequestsReceived' => $invitationRequestsReceived, + 'pendingInvitationRequestsSent' => $pendingInvitationRequestsSent, + 'pendingInvitationRequestsReceived' => $pendingInvitationRequestsReceived, ]); } diff --git a/src/Entity/User.php b/src/Entity/User.php index b71c7ab678443dfc6e31962b69d5483fd9184273..825fff6d53529a45a337df98121ff51fd2b76688 100644 --- a/src/Entity/User.php +++ b/src/Entity/User.php @@ -286,6 +286,22 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface $this->invitationRequestsSent = new ArrayCollection(); } + public function getUsersFromPendingInvitationRequests() + { + $result = []; + foreach ($this->getInvitationRequestsReceived() as $invitation) { + if ($invitation->isNew()) { + $result[] = $invitation->getSender(); + } + } + foreach ($this->getInvitationRequestsSent() as $invitation) { + if ($invitation->isNew()) { + $result[] = $invitation->getRecipient(); + } + } + return $result; + } + public function getInitials() { return $this->getPseudo()[0]; diff --git a/src/Form/UserAddFriendType.php b/src/Form/UserAddFriendType.php index b2750f1b2fea33ce222972d68ca163bd23d93620..6c55212059d436560326550c8947ea8823bfee72 100644 --- a/src/Form/UserAddFriendType.php +++ b/src/Form/UserAddFriendType.php @@ -31,15 +31,23 @@ class UserAddFriendType extends AbstractType public function buildForm(FormBuilderInterface $builder, array $options): void { $user = $this->security->getUser(); + $hiddenUsers = []; + if ($user) { + $hiddenUsers[] = $user; + foreach ($user->getMyFriends() as $friend) { + $hiddenUsers[] = $friend; + } + $hiddenUsers = array_merge($hiddenUsers, $user->getUsersFromPendingInvitationRequests()); + } $builder ->add('friend', EntityType::class, [ 'label' => 'Utilisateur', 'class' => User::class, - 'query_builder' => function (EntityRepository $entityRepository) use ($user) { + 'query_builder' => function (EntityRepository $entityRepository) use ($hiddenUsers) { $qb = $entityRepository->createQueryBuilder('u') - ->andWhere('u.id != :myId') - ->setParameter('myId', $user->getId()) + ->andWhere('u.id NOT IN (:hiddenUsers)') + ->setParameter('hiddenUsers', $hiddenUsers) ->addOrderBy('u.pseudo', 'ASC') ; return $qb; diff --git a/templates/user/showFriends.html.twig b/templates/user/showFriends.html.twig index f495427a5b7044413859de3af154a22d614fce13..be375cc43edebd27f884b487b1d838fd97ff9904 100644 --- a/templates/user/showFriends.html.twig +++ b/templates/user/showFriends.html.twig @@ -28,27 +28,20 @@ </div> </div> - {% if invitationRequestsSent %} + {% if pendingInvitationRequestsSent %} <h3 class="mt-3">{{ "Demandes envoyées"|trans }}</h3> <div class="card mt-3"> <div class="card-body"> <table class="table table-borderless"> - {% for invitationRequest in invitationRequestsSent %} + {% for invitationRequest in pendingInvitationRequestsSent %} <tr> <td>{{ invitationRequest.createdAt|date('d/m/Y') }}</td> <td> <span class="badge bg-secondary"> {{ "Demande envoyée à "|trans }}{{ invitationRequest.recipient }}</span> - {% if invitationRequest.accepted %} - <span class="badge bg-success">{{ "Acceptée"|trans }}</span> - {% elseif invitationRequest.accepted %} - <span class="badge bg-success">{{ "Refusée"|trans }}</span> - {% endif %} </td> <td class="text-end"> - {% if invitationRequest.accepted is null %} - <a data-confirm="{{ "Confirmer la suppression ?"|trans }}" data-bs-toggle="modal" data-bs-target="#confirm-dialog" - data-href="{{ path('app_friend_remove_friendship_invitationRequest', {id: invitationRequest.id}) }}" class="btn btn-xs btn-danger"><i class="bi-x-circle"></i></a> - {% endif %} + <a data-confirm="{{ "Confirmer la suppression ?"|trans }}" data-bs-toggle="modal" data-bs-target="#confirm-dialog" + data-href="{{ path('app_friend_remove_friendship_invitationRequest', {id: invitationRequest.id}) }}" class="btn btn-xs btn-danger"><i class="bi-x-circle"></i></a> </td> </tr> {% endfor %} @@ -57,27 +50,21 @@ </div> {% endif %} - {% if invitationRequestsReceived %} + {% if pendingInvitationRequestsReceived %} <h3 class="mt-3">{{ "Demandes reçues"|trans }}</h3> <div class="card mt-3"> <div class="card-body"> <table class="table table-borderless"> - {% for invitationRequest in invitationRequestsReceived %} + {% for invitationRequest in pendingInvitationRequestsReceived %} <tr> <td>{{ invitationRequest.createdAt|date('d/m/Y') }}</td> <td><span class="badge bg-secondary"> {{ "Demande envoyée par "|trans }}{{ invitationRequest.sender }}</span></td> <td class="text-end"> - {% if invitationRequest.new %} - <a href="{{ path('app_friend_accept_friendship_invitationRequest', {id: invitationRequest.id}) }}" class="btn btn-xs btn-success"><i class="fa fa-check"></i> {{ "Accepter"|trans }}</a> - <a data-confirm="{{ "Confirmer le refus ?"|trans }}" data-bs-toggle="modal" data-bs-target="#confirm-dialog" - data-href="{{ path('app_friend_deny_friendship_invitationRequest', {id: invitationRequest.id}) }}" class="btn btn-xs btn-danger"> - <i class="bi-x-circle"></i> {{ "Refuser"|trans }} - </a> - {% elseif invitationRequest.accepted %} - <span class="badge bg-success">{{ "Acceptée"|trans }}</span> - {% elseif invitationRequest.denied %} - <span class="badge bg-success">{{ "Refusée"|trans }}</span> - {% endif %} + <a href="{{ path('app_friend_accept_friendship_invitationRequest', {id: invitationRequest.id}) }}" class="btn btn-xs btn-success"><i class="fa fa-check"></i> {{ "Accepter"|trans }}</a> + <a data-confirm="{{ "Confirmer le refus ?"|trans }}" data-bs-toggle="modal" data-bs-target="#confirm-dialog" + data-href="{{ path('app_friend_deny_friendship_invitationRequest', {id: invitationRequest.id}) }}" class="btn btn-xs btn-danger"> + <i class="bi-x-circle"></i> {{ "Refuser"|trans }} + </a> </td> </tr> {% endfor %}