CurrentUserNotificationExtension.php 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. <?php
  2. declare(strict_types=1);
  3. namespace App\Doctrine\Core;
  4. use App\Doctrine\AbstractExtension;
  5. use App\Entity\Access\Access;
  6. use App\Entity\Core\Notification;
  7. use Doctrine\ORM\QueryBuilder;
  8. use Symfony\Bundle\SecurityBundle\Security;
  9. /**
  10. * Class NotificationExtension : Filtre de sécurité par défaut pour une resource Notification
  11. * @package App\Doctrine\Core
  12. */
  13. final class CurrentUserNotificationExtension extends AbstractExtension
  14. {
  15. public function __construct(private Security $security)
  16. { }
  17. /**
  18. * @todo : A la suite de la migration, il faut supprimer le where avec le discr.
  19. */
  20. protected function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
  21. {
  22. if (Notification::class !== $resourceClass) {
  23. return;
  24. }
  25. /** @var Access $currentUser */
  26. $currentUser = $this->security->getUser();
  27. $rootAlias = $queryBuilder->getRootAliases()[0];
  28. $queryBuilder
  29. ->andWhere(sprintf('%s.recipientAccess = :current_access', $rootAlias))
  30. ->andWhere('o.availabilityDate IS NULL or o.availabilityDate <= :today')
  31. ->setParameter('current_access', $currentUser)
  32. ->setParameter('today', new \DateTime())
  33. ;
  34. }
  35. }