From 76029b8d1af52447e5331fa4c7b8c0f6efca1ab8 Mon Sep 17 00:00:00 2001 From: pfleu <fleutotp@gmail.com> Date: Fri, 9 Jun 2023 23:01:13 +0200 Subject: [PATCH] Friendship: suite --- src/Controller/FriendController.php | 10 ++++---- src/Entity/User.php | 16 +++++++++++++ src/Form/UserAddFriendType.php | 14 ++++++++--- templates/user/showFriends.html.twig | 35 +++++++++------------------- 4 files changed, 44 insertions(+), 31 deletions(-) diff --git a/src/Controller/FriendController.php b/src/Controller/FriendController.php index e9111a8..ca9ce3f 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 b71c7ab..825fff6 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 b2750f1..6c55212 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 f495427..be375cc 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 %} -- GitLab