mirror of
https://gitlab.com/Chill-Projet/chill-bundles.git
synced 2025-11-26 21:58:31 +00:00
Add a counter to the user menu item
This commit is contained in:
@@ -47,16 +47,10 @@ class MyInvitationsController extends AbstractController
|
||||
$paginator->getCurrentPageFirstItemNumber()
|
||||
);
|
||||
|
||||
$invitationsWaiting = count($this->inviteRepository->findBy([
|
||||
'user' => $user,
|
||||
'status' => 'pending',
|
||||
]));
|
||||
|
||||
$view = '@ChillCalendar/Invitations/listByUser.html.twig';
|
||||
|
||||
return $this->render($view, [
|
||||
'invitations' => $invitations,
|
||||
'invitationsWaiting' => $invitationsWaiting,
|
||||
'paginator' => $paginator,
|
||||
'templates' => $this->docGeneratorTemplateRepository->findByEntity(Calendar::class),
|
||||
]);
|
||||
|
||||
@@ -11,6 +11,7 @@ declare(strict_types=1);
|
||||
|
||||
namespace Chill\CalendarBundle\Menu;
|
||||
|
||||
use Chill\CalendarBundle\Repository\InviteRepository;
|
||||
use Chill\MainBundle\Routing\LocalMenuBuilderInterface;
|
||||
use Knp\Menu\MenuItem;
|
||||
use Symfony\Component\Security\Core\Security;
|
||||
@@ -18,10 +19,12 @@ use Symfony\Contracts\Translation\TranslatorInterface;
|
||||
|
||||
class UserMenuBuilder implements LocalMenuBuilderInterface
|
||||
{
|
||||
public function __construct(private readonly Security $security, public TranslatorInterface $translator) {}
|
||||
public function __construct(private readonly Security $security, public TranslatorInterface $translator, private readonly InviteRepository $inviteRepository) {}
|
||||
|
||||
public function buildMenu($menuId, MenuItem $menu, array $parameters)
|
||||
{
|
||||
$invitationsPending = $this->inviteRepository->countPendingInvitesByUser($this->security->getUser());
|
||||
|
||||
if ($this->security->isGranted('ROLE_USER')) {
|
||||
$menu->addChild('My calendar list', [
|
||||
'route' => 'chill_calendar_calendar_list_my',
|
||||
@@ -30,12 +33,14 @@ class UserMenuBuilder implements LocalMenuBuilderInterface
|
||||
'order' => 8,
|
||||
'icon' => 'tasks',
|
||||
]);
|
||||
$menu->addChild('invite.list.title', [
|
||||
'route' => 'chill_calendar_invitations_list_my',
|
||||
])
|
||||
$menu->addChild(
|
||||
$this->translator->trans('invite.menu with counter', ['nb' => $invitationsPending]),
|
||||
['route' => 'chill_calendar_invitations_list_my']
|
||||
)
|
||||
->setExtras([
|
||||
'order' => 9,
|
||||
'icon' => 'tasks',
|
||||
'counter' => 0 < $invitationsPending ? $invitationsPending : null,
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -75,6 +75,25 @@ class InviteRepository implements ObjectRepository
|
||||
->getSingleScalarResult();
|
||||
}
|
||||
|
||||
public function countPendingInvitesByUser(User $user): int
|
||||
{
|
||||
$qb = $this->entityRepository->createQueryBuilder('i');
|
||||
|
||||
$qb->select('COUNT(i)')
|
||||
->where(
|
||||
$qb->expr()->andX(
|
||||
$qb->expr()->eq('i.user', ':user'),
|
||||
$qb->expr()->eq('i.status', ':status')
|
||||
)
|
||||
)
|
||||
->setParameters([
|
||||
'user' => $user,
|
||||
'status' => Invite::PENDING,
|
||||
]);
|
||||
|
||||
return $qb->getQuery()->getSingleScalarResult();
|
||||
}
|
||||
|
||||
public function buildAcceptedInviteByUserAndDateRangeQuery(User $user, \DateTimeImmutable $from, \DateTimeImmutable $to)
|
||||
{
|
||||
$qb = $this->entityRepository->createQueryBuilder('i');
|
||||
|
||||
@@ -8,8 +8,6 @@
|
||||
|
||||
<h1>{{ 'invite.list.title'|trans }}</h1>
|
||||
|
||||
<p>{{ 'invite.number of invitations waiting'|trans }}: <span class="badge rounded-pill bg-primary mt-3">{{ invitationsWaiting }}</span></p>
|
||||
|
||||
{% if invitations|length == 0 %}
|
||||
<p class="chill-no-data-statement">
|
||||
{{ "invite.list.none"|trans }}
|
||||
|
||||
@@ -6,3 +6,11 @@ chill_calendar:
|
||||
few {# rendez-vous sont ignorés par le filtre de date. Modifiez le filtre de date pour les voir apparaitre.}
|
||||
other {# rendez-vous sont ignorés par le filtre de date. Modifiez le filtre de date pour les voir apparaitre.}
|
||||
}
|
||||
invite:
|
||||
menu with counter: >-
|
||||
{nb, plural,
|
||||
=0 {Mes invitations}
|
||||
one {# invitation}
|
||||
few {# invitations}
|
||||
other {# invitations}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user