Skip to content
Snippets Groups Projects
Commit 76029b8d authored by Pierre Fleutot's avatar Pierre Fleutot
Browse files

Friendship: suite

parent 9441ef6d
No related branches found
No related tags found
No related merge requests found
...@@ -41,18 +41,20 @@ class FriendController extends AbstractController ...@@ -41,18 +41,20 @@ class FriendController extends AbstractController
*/ */
public function index(Request $request): Response 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(), 'sender' => $this->getUser(),
'status' => InvitationRequest::STATUS_NEW,
], ['id' => 'DESC']); ], ['id' => 'DESC']);
$invitationRequestsReceived = $this->doctrine->getManager()->getRepository(InvitationRequest::class)->findBy([ $pendingInvitationRequestsReceived = $this->doctrine->getManager()->getRepository(InvitationRequest::class)->findBy([
'recipient' => $this->getUser(), 'recipient' => $this->getUser(),
'status' => InvitationRequest::STATUS_NEW,
], ['id' => 'DESC']); ], ['id' => 'DESC']);
return $this->render('user/showFriends.html.twig', [ return $this->render('user/showFriends.html.twig', [
'user' => $this->getUser(), 'user' => $this->getUser(),
'invitationRequestsSent' => $invitationRequestsSent, 'pendingInvitationRequestsSent' => $pendingInvitationRequestsSent,
'invitationRequestsReceived' => $invitationRequestsReceived, 'pendingInvitationRequestsReceived' => $pendingInvitationRequestsReceived,
]); ]);
} }
......
...@@ -286,6 +286,22 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface ...@@ -286,6 +286,22 @@ class User implements UserInterface, PasswordAuthenticatedUserInterface
$this->invitationRequestsSent = new ArrayCollection(); $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() public function getInitials()
{ {
return $this->getPseudo()[0]; return $this->getPseudo()[0];
......
...@@ -31,15 +31,23 @@ class UserAddFriendType extends AbstractType ...@@ -31,15 +31,23 @@ class UserAddFriendType extends AbstractType
public function buildForm(FormBuilderInterface $builder, array $options): void public function buildForm(FormBuilderInterface $builder, array $options): void
{ {
$user = $this->security->getUser(); $user = $this->security->getUser();
$hiddenUsers = [];
if ($user) {
$hiddenUsers[] = $user;
foreach ($user->getMyFriends() as $friend) {
$hiddenUsers[] = $friend;
}
$hiddenUsers = array_merge($hiddenUsers, $user->getUsersFromPendingInvitationRequests());
}
$builder $builder
->add('friend', EntityType::class, [ ->add('friend', EntityType::class, [
'label' => 'Utilisateur', 'label' => 'Utilisateur',
'class' => User::class, 'class' => User::class,
'query_builder' => function (EntityRepository $entityRepository) use ($user) { 'query_builder' => function (EntityRepository $entityRepository) use ($hiddenUsers) {
$qb = $entityRepository->createQueryBuilder('u') $qb = $entityRepository->createQueryBuilder('u')
->andWhere('u.id != :myId') ->andWhere('u.id NOT IN (:hiddenUsers)')
->setParameter('myId', $user->getId()) ->setParameter('hiddenUsers', $hiddenUsers)
->addOrderBy('u.pseudo', 'ASC') ->addOrderBy('u.pseudo', 'ASC')
; ;
return $qb; return $qb;
......
...@@ -28,27 +28,20 @@ ...@@ -28,27 +28,20 @@
</div> </div>
</div> </div>
{% if invitationRequestsSent %} {% if pendingInvitationRequestsSent %}
<h3 class="mt-3">{{ "Demandes envoyées"|trans }}</h3> <h3 class="mt-3">{{ "Demandes envoyées"|trans }}</h3>
<div class="card mt-3"> <div class="card mt-3">
<div class="card-body"> <div class="card-body">
<table class="table table-borderless"> <table class="table table-borderless">
{% for invitationRequest in invitationRequestsSent %} {% for invitationRequest in pendingInvitationRequestsSent %}
<tr> <tr>
<td>{{ invitationRequest.createdAt|date('d/m/Y') }}</td> <td>{{ invitationRequest.createdAt|date('d/m/Y') }}</td>
<td> <td>
<span class="badge bg-secondary"> {{ "Demande envoyée à "|trans }}{{ invitationRequest.recipient }}</span> <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>
<td class="text-end"> <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"
<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>
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 %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
...@@ -57,27 +50,21 @@ ...@@ -57,27 +50,21 @@
</div> </div>
{% endif %} {% endif %}
{% if invitationRequestsReceived %} {% if pendingInvitationRequestsReceived %}
<h3 class="mt-3">{{ "Demandes reçues"|trans }}</h3> <h3 class="mt-3">{{ "Demandes reçues"|trans }}</h3>
<div class="card mt-3"> <div class="card mt-3">
<div class="card-body"> <div class="card-body">
<table class="table table-borderless"> <table class="table table-borderless">
{% for invitationRequest in invitationRequestsReceived %} {% for invitationRequest in pendingInvitationRequestsReceived %}
<tr> <tr>
<td>{{ invitationRequest.createdAt|date('d/m/Y') }}</td> <td>{{ invitationRequest.createdAt|date('d/m/Y') }}</td>
<td><span class="badge bg-secondary"> {{ "Demande envoyée par "|trans }}{{ invitationRequest.sender }}</span></td> <td><span class="badge bg-secondary"> {{ "Demande envoyée par "|trans }}{{ invitationRequest.sender }}</span></td>
<td class="text-end"> <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 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"
<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">
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 }}
<i class="bi-x-circle"></i> {{ "Refuser"|trans }} </a>
</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 %}
</td> </td>
</tr> </tr>
{% endfor %} {% endfor %}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment