vendor/kobizo/cms-bundle/src/Repository/PageRepository.php line 23

Open in your IDE?
  1. <?php
  2. namespace Kobizo\Bundle\CmsBundle\Repository;
  3. use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
  4. use Doctrine\Persistence\ManagerRegistry;
  5. use Doctrine\ORM\QueryBuilder;
  6. use Kobizo\Bundle\ECommerceBundle\Entity\Store;
  7. use Kobizo\Component\Attributes\Status\PageStatusAttribute;
  8. use Kobizo\Component\Entity\CmsBaseEntityInterface;
  9. use Kobizo\Component\Entity\Page;
  10. /**
  11.  * @method Page|null find($id, $lockMode = null, $lockVersion = null)
  12.  * @method Page|null findOneBy(array $criteria, array $orderBy = null)
  13.  * @method Page[]    findAll()
  14.  * @method Page[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  15.  */
  16. class PageRepository extends ServiceEntityRepository
  17. {
  18.     public function __construct(ManagerRegistry $registry)
  19.     {
  20.         parent::__construct($registryPage::class);
  21.     }
  22.     public function getSearchQueryBuilder(array $filters = []): QueryBuilder
  23.     {
  24.         $qb $this->createQueryBuilder('page')
  25.             ->leftJoin('page.author''author')
  26.             ->leftJoin('page.translations''translation');
  27.         if (isset($filters['user'])) {
  28.             $qb->andWhere('page.author = :user')
  29.                 ->setParameter('user'$filters['user']);
  30.         }
  31.         if (isset($filters['isMine'])) {
  32.             if ($filters['isMine']) {
  33.                 $qb->andWhere('author.id = :userId');
  34.                 $qb->setParameter('userId'$filters['userId']);
  35.             }
  36.         } elseif (isset($filters['isPublish'])) {
  37.             if ($filters['isPublish']) {
  38.                 $qb->andWhere('page.status = :status');
  39.                 $qb->setParameter('status'PageStatusAttribute::PUBLISHED);
  40.             }
  41.         } elseif (isset($filters['isSticky'])) {
  42.             if ($filters['isSticky']) {
  43.                 $qb->andWhere('page.status = :status');
  44.                 $qb->setParameter('status'PageStatusAttribute::STICKY);
  45.             }
  46.         } elseif (isset($filters['isDraft'])) {
  47.             if ($filters['isDraft']) {
  48.                 $qb->andWhere('page.status = :status');
  49.                 $qb->setParameter('status'PageStatusAttribute::DRAFT);
  50.             }
  51.         } elseif (isset($filters['isPending'])) {
  52.             if ($filters['isPending']) {
  53.                 $qb->andWhere('page.status = :status');
  54.                 $qb->setParameter('status'PageStatusAttribute::PENDING);
  55.             }
  56.         } elseif (isset($filters['isDeleted'])) {
  57.             if ($filters['isDeleted']) {
  58.                 $qb->andWhere('page.status = :deletedStatus');
  59.             } else {
  60.                 $qb->andWhere('page.status != :deletedStatus');
  61.             }
  62.             $qb->setParameter('deletedStatus'PageStatusAttribute::DELETED);
  63.         }
  64.         if (isset($filters['term'])) {
  65.             $qb->andWhere('translation.title LIKE :term OR translation.content LIKE :term')
  66.                 ->setParameter('term''%'.$filters['term'].'%');
  67.         }
  68.         return $qb;
  69.     }
  70.     public function findAllMatchingPageByTitle(string $termint $limit 20)
  71.     {
  72.         return $this->createQueryBuilder('page')
  73.             ->leftJoin('page.translations''translations')
  74.             ->where('translations.title LIKE :term')
  75.             ->andWhere('page.status != :deletedStatus')
  76.             ->setParameter('deletedStatus'PageStatusAttribute::DELETED)
  77.             ->setParameter('term'"%$term%")
  78.             ->setMaxResults($limit)
  79.             ->getQuery()
  80.             ->getResult();
  81.     }
  82.     public function findByStores(array $stores)
  83.     {
  84.         if (count($stores) <= 0) {
  85.             return [];
  86.         }
  87.         $qb $this->createQueryBuilder('page')
  88.             ->leftJoin('page.translations''translation');
  89.         if (isset($filters['status'])) {
  90.             $qb->where('page.status =: status')->setParameter('status'$filters['status']);
  91.         }
  92.         foreach ($stores as $store) {
  93.             $qb->orWhere('translation.slug LIKE :store')
  94.                 ->setParameter('store'sprintf('store-%s'$store->getCode()).'%');
  95.         }
  96.         return $qb->getQuery()->getResult();
  97.     }
  98. }