src/Repository/FormRepository.php line 25

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Form;
  4. use App\Entity\User;
  5. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  6. use Doctrine\Persistence\ManagerRegistry;
  7. use function Doctrine\ORM\QueryBuilder;
  8. use Symfony\Component\Security\Core\Security;
  9. /**
  10.  * @method Form|null find($id, $lockMode = null, $lockVersion = null)
  11.  * @method Form|null findOneBy(array $criteria, array $orderBy = null)
  12.  * @method Form[]    findAll()
  13.  * @method Form[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  14.  */
  15. class FormRepository extends ServiceEntityRepository
  16. {
  17.     public function __construct(ManagerRegistry $registry, private readonly Security $security, private readonly UserEntityRepository $userEntities)
  18.     {
  19.         parent::__construct($registryForm::class);
  20.     }
  21.     public function findAllByUser(User $userbool $hasObjects false): array
  22.     {
  23.         if (in_array('ROLE_SUPER_ADMIN'$user->getRoles())) {
  24.             $qb $this->createQueryBuilder('f');
  25.             return $qb->getQuery()->getResult();
  26.         } else {
  27.             $profiles $user->getProfiles();
  28.             $qbExpr $this->getEntityManager()->createQueryBuilder();
  29.             $qb $this->createQueryBuilder('f')
  30.                 ->innerJoin('f.entity''e')
  31.                 ->innerJoin('e.userEntities''ue')
  32.                 ->innerJoin('ue.user''u')
  33.                 ->innerJoin('e.admins''a')
  34.                 ->andWhere(
  35.                     $qbExpr->expr()->orX(
  36.                         $qbExpr->expr()->andX(
  37.                             $qbExpr->expr()->eq('u.id'":userId"),
  38.                             $qbExpr->expr()->isMemberOf(":profiles"'f.profiles')
  39.                         ),
  40.                         $qbExpr->expr()->andX(
  41.                             $qbExpr->expr()->eq('u.id'":userId"),
  42.                             $qbExpr->expr()->eq('size(f.profiles)'0)
  43.                         ),
  44.                         $qbExpr->expr()->eq('a.id'":userId"),
  45.                     )
  46.                 )
  47.                 ->andWhere($qbExpr->expr()->orX(
  48.                     $qbExpr->expr()->eq('f.isBooking'":isBookingfalse"),
  49.                     $qbExpr->expr()->isNull('f.isBooking')
  50.                 ));
  51.             if (!$hasObjects){
  52.                 $qb->andWhere("f.isLinkedToObject = 0");
  53.             }
  54.             $qb->andWhere("f.isActive = 1")
  55.                 ->andWhere("f.publicationDate <= :now")
  56.                 //TODO: publicationEnd request
  57.                 ->andWhere(
  58.                     $qbExpr->expr()->orX(
  59.                         $qbExpr->expr()->gte("f.publicationEnd",":now"),
  60.                         $qbExpr->expr()->isNull('f.publicationEnd')
  61.                     )
  62.                 )
  63.                 ->setParameter('now', new \DateTime('now'))
  64.                 ->setParameter('userId'$user->getId())
  65.                 ->setParameter("profiles"$profiles)
  66.                 ->setParameter("isBookingfalse"0);
  67.             return $qb->getQuery()->getResult();
  68.         }
  69.     }
  70.     public function findByEntitySelected($selectedEntity$isActive$isBooking): array
  71.     {
  72.         return $this->createQueryBuilder('f')
  73.             ->innerJoin("f.entity""e")
  74.             ->andWhere("e.id = :selectedEntity")
  75.             ->andWhere('f.isActive = :archive')
  76.             ->andWhere('f.isBooking = :booking')
  77.             ->setParameter('selectedEntity'$selectedEntity)
  78.             ->setParameter('archive'$isActive)
  79.             ->setParameter('booking'$isBooking)
  80.             ->getQuery()
  81.             ->getResult();
  82.     }
  83.     public function findBooking()
  84.     {
  85.         $user $this->security->getUser();
  86.         $userEntities $this->userEntities;
  87.         $entities $userEntities->findAllEntitiesIsAccepted($user);
  88.         $idEntities = [];
  89.         foreach ($entities as $entity) {
  90.             $idEntities[] = $entity->getEntity()->getId();
  91.         }
  92.         $date = new \DateTime();
  93.         $date $date->format('Y-m-d');
  94.         $qb $this->createQueryBuilder('f')
  95.             ->andWhere("f.entity IN (:entities)")
  96.             ->andWhere("f.publicationDate <= :date")
  97.             ->andWhere("f.bookingDate >= :date")
  98.             ->andWhere("f.isActive = 1")
  99.             ->andWhere("f.isBooking = 1")
  100.             ->setParameter('date'$date)
  101.             ->setParameter('entities',$idEntities);
  102.         return $qb->getQuery()->getResult();
  103.     }
  104.     
  105.     public function findFormsByIdAnimals($animals$entities$profiles)
  106.     {
  107.         $qbExpr $this->getEntityManager()->createQueryBuilder();
  108.         $qb $this->createQueryBuilder('f')
  109.             ->andWhere(
  110.                 $qbExpr->expr()->in('f.entity',":entities"))
  111.             ->setParameter('entities'$entities);
  112.         if ($animals) {
  113.             $qb->andWhere(
  114.                 $qbExpr->expr()->in(
  115.                 'f.animal',':animals'))
  116.                 ->setParameter('animals'$animals);
  117.         }
  118.         if ($profiles) {
  119.             $qb->andWhere(
  120.                 $qbExpr->expr()->isMemberOf(
  121.                     ':profiles','f.profiles'))
  122.             ->setParameter('profiles'$profiles);
  123.         }
  124.         return $qb->getQuery()->getResult();
  125.     }
  126.     public function add(Form $entitybool $flash false): void
  127.     {
  128.         $this->getEntityManager()->persist($entity);
  129.         if ($flash) {
  130.             $this->getEntityManager()->flush();
  131.         }
  132.     }
  133.     public function remove(Form $entitybool $flush false): void
  134.     {
  135.         $this->getEntityManager()->remove($entity);
  136.         if ($flush) {
  137.             $this->getEntityManager()->flush();
  138.         }
  139.     }
  140. }