src/Repository/ResourceRepository.php line 21

Open in your IDE?
  1. <?php
  2. namespace App\Repository;
  3. use App\Entity\Booking;
  4. use App\Entity\Resource;
  5. use App\Entity\User;
  6. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  7. use Doctrine\Common\Collections\ArrayCollection;
  8. use Doctrine\ORM\QueryBuilder;
  9. use Doctrine\Persistence\ManagerRegistry;
  10. /**
  11.  * @method Resource|null find($id, $lockMode = null, $lockVersion = null)
  12.  * @method Resource|null findOneBy(array $criteria, array $orderBy = null)
  13.  * @method Resource[]    findAll()
  14.  * @method Resource[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  15.  */
  16. class ResourceRepository extends ServiceEntityRepository
  17. {
  18.     public function __construct(ManagerRegistry $registry)
  19.     {
  20.         parent::__construct($registryResource::class);
  21.     }
  22.     public function apiGetResourcesList ( ?string $termUser $user, ?int $limit ): array
  23.     {
  24.         $qb $this->createQueryBuilder('r')
  25.             ->select('r.id, r.name AS text')
  26.             ->orderBy('r.name')
  27.             ->setMaxResults($limit ?: 15);
  28.         if (!empty($term)) {
  29.             $qb->where('r.name LIKE :term')
  30.                 ->setParameter('term'"%$term%");
  31.         }
  32.         $this->addOUFilter($qb$user);
  33.         $res $qb->getQuery()->getResult();
  34.         $response = [];
  35.         foreach ( $res as $row ) {
  36.             $response[] = $row;
  37.         }
  38.         return $response;
  39.     }
  40.     public function qbAvailableResourcesUser $user ): QueryBuilder
  41.     {
  42.         $qb $this->createQueryBuilder('r')
  43.             ->orderBy('r.name');
  44.         $this->addOUFilter($qb$user);
  45.         return $qb;
  46.     }
  47.     protected function addOUFilterQueryBuilder $qbUser $user$alias 'r' ): QueryBuilder
  48.     {
  49.         if ($user->getOrganizationUnit()) {
  50.             $path $user->getOrganizationUnit()->getPath();
  51.             $qb->leftJoin($alias '.organizationUnit''ou')
  52.                 ->andWhere('ou.path LIKE :tree')
  53.                 ->setParameter('tree'$path '%');
  54.         }
  55.         return $qb;
  56.     }
  57. }