src/Entity/Repository/ForumAccessRepository.php line 79

Open in your IDE?
  1. <?php
  2. namespace App\Entity\Repository;
  3. use App\Entity\Forum;
  4. use App\Entity\ForumAccess;
  5. use App\Entity\User;
  6. use Doctrine\ORM\Cache;
  7. use Doctrine\ORM\EntityRepository;
  8. /**
  9.  * @method ForumAccess|null find($id, $lockMode = null, $lockVersion = null)
  10.  * @method ForumAccess|null findOneBy(array $criteria, array $orderBy = null)
  11.  * @method ForumAccess[]    findAll()
  12.  * @method ForumAccess[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
  13.  */
  14. class ForumAccessRepository extends EntityRepository
  15. {
  16.     /**
  17.      * @param Forum $forum
  18.      * @return ForumAccess[]
  19.      */
  20.     public function getModList(Forum $forum)
  21.     {
  22.         $queryBuilder $this->createQueryBuilder('fa')
  23.             ->select('fa')
  24.             ->addSelect('partial user.{id, name}')
  25.             ->addSelect('partial user_data.{id, avatarName}')
  26.             ->leftJoin('fa.user''user')
  27.             ->leftJoin('user.userData''user_data')
  28.             ->andWhere('fa.user IS NOT NULL')
  29.             ->andWhere('fa.forum = :forum')
  30.             ->setParameter('forum'$forum)
  31.             ->andWhere('fa.modMessage = 1')
  32.             ->setCacheable(true)
  33.             ->setCacheMode(Cache::MODE_GET);
  34.         return $queryBuilder->getQuery()->getResult();
  35.     }
  36.     /**
  37.      * @param Forum $forum
  38.      * @return ForumAccess[]
  39.      */
  40.     public function getByForum(Forum $forum): ?ForumAccess
  41.     {
  42.         $queryBuilder $this->createQueryBuilder('fa')
  43.             ->select('fa')
  44.             ->andWhere('fa.forum = :forum')
  45.             ->setParameter('forum'$forum)
  46.             ->setMaxResults(1);
  47.         return $queryBuilder->getQuery()->getOneOrNullResult();
  48.     }
  49.     /**
  50.      * @param User $user
  51.      * @return ForumAccess[]
  52.      */
  53.     public function getByUser(User $user): array
  54.     {
  55.         $queryBuilder $this->createQueryBuilder('fa')
  56.             ->select('fa')
  57.             ->leftJoin('fa.forum''f')
  58.             ->andWhere('fa.user = :user')
  59.             ->setParameter('user'$user);
  60.         $data $queryBuilder->getQuery()->getResult();
  61.         return array_combine(array_map(function(ForumAccess $fa) {
  62.             return $fa->getForum()->getId();
  63.         }, $data), $data);
  64.     }
  65.     /**
  66.      * @param User $user
  67.      * @return Forum[]
  68.      */
  69.     public function getForumWithReadAccessForUser(User $user): array
  70.     {
  71.         $queryBuilder $this->createQueryBuilder('fa')
  72.             ->select('fa')
  73.             ->leftJoin('fa.forum''f')
  74.             ->where('fa.readMessage = 1')
  75.             ->andWhere('fa.user = :user OR (fa.user IS NULL AND fa.group IS NULL)')
  76.             ->andWhere('f.type = 1')
  77.             ->setParameter('user'$user)
  78.             ->orderBy('fa.user''DESC');
  79.         $data $queryBuilder->getQuery()->getResult();
  80.         $access = [];
  81.         /** @var ForumAccess $forumAccess */
  82.         foreach ($data as $forumAccess) {
  83.             if (!isset($access[$forumAccess->getForum()->getId()])) {
  84.                 $access[$forumAccess->getForum()->getId()] = $forumAccess->getForum();
  85.             }
  86.         }
  87.         return $access;
  88.     }
  89. }