src/Service/User/Layer/AmateurLayer.php line 101

Open in your IDE?
  1. <?php
  2. namespace App\Service\User\Layer;
  3. use App\Entity\Ad;
  4. use App\Entity\Member;
  5. use App\Lib\Property\MemberPropertyProviderInterface;
  6. use App\Repository\MemberRepository;
  7. use App\Service\MemberService;
  8. use Doctrine\ORM\EntityManagerInterface;
  9. use Doctrine\ORM\Tools\Pagination\Paginator;
  10. class AmateurLayer implements MemberPropertyProviderInterface
  11. {
  12.     /**
  13.      * @var string
  14.      */
  15.     public const PROPERTY_SKIP_IN_LISTS 'amateur.skip-in-lists';
  16.     /**
  17.      * @var string
  18.      */
  19.     public const PROPERTY_AMATEUR_SIDEBAR_SLIDER_DISABLED 'amateur.sidebar.slider.disabled';
  20.     protected MemberService $memberService;
  21.     protected EntityManagerInterface $entityManager;
  22.     /**
  23.      * AmateurLayer constructor.
  24.      */
  25.     public function __construct(MemberService $memberServiceEntityManagerInterface $entityManager)
  26.     {
  27.         $this->setMemberService($memberService);
  28.         $this->setEntityManager($entityManager);
  29.     }
  30.     protected function setEntityManager(EntityManagerInterface $entityManager): self
  31.     {
  32.         $this->entityManager $entityManager;
  33.         return $this;
  34.     }
  35.     protected function getEntityManager(): EntityManagerInterface
  36.     {
  37.         return $this->entityManager;
  38.     }
  39.     protected function setMemberService(MemberService $memberService): self
  40.     {
  41.         $this->memberService $memberService;
  42.         return $this;
  43.     }
  44.     protected function getMemberService(): MemberService
  45.     {
  46.         return $this->memberService;
  47.     }
  48.     public function getProvidedPropertyType(string $name): ?string
  49.     {
  50.         switch ($name) {
  51.             case self::PROPERTY_SKIP_IN_LISTS:
  52.             case self::PROPERTY_AMATEUR_SIDEBAR_SLIDER_DISABLED:
  53.                 return self::PROPTYPE_BOOL;
  54.         }
  55.         return null;
  56.     }
  57.     public function getProvidedProperties(): array
  58.     {
  59.         return [
  60.             self::PROPERTY_SKIP_IN_LISTS => 'Amateure - In Topliste ausblenden',
  61.             self::PROPERTY_AMATEUR_SIDEBAR_SLIDER_DISABLED => 'Slider in Sidebar ausblenden'// label is used in FE
  62.         ];
  63.     }
  64.     public function getDefaultValueForProperty(string $property)
  65.     {
  66.         switch ($property) {
  67.             case self::PROPERTY_SKIP_IN_LISTS:
  68.                 return false;
  69.             case self::PROPERTY_AMATEUR_SIDEBAR_SLIDER_DISABLED:
  70.                 return true;
  71.         }
  72.         return null;
  73.     }
  74.     /**
  75.      * @return int[]
  76.      */
  77.     public function getSkipInListAmateurIds(): array
  78.     {
  79.         $conn $this->getEntityManager()->getConnection();
  80.         $prop self::PROPERTY_SKIP_IN_LISTS;
  81.         $result $conn->fetchAllAssociative('SELECT member_id FROM MemberProperty WHERE value = 1 and name = "'.$prop.'"');
  82.         $ids = [];
  83.         foreach ($result as $row) {
  84.             $ids[] = (int) $row['member_id'];
  85.         }
  86.         return $ids;
  87.     }
  88.     public function getTopAmateurs(int $pageint $limitbool $imagebool $online, ?array $skipIds null,
  89.         ?array $idList null): Paginator
  90.     {
  91.         /**
  92.          * @var $repo MemberRepository
  93.          */
  94.         $repo $this->getMemberService()->getRepository();
  95.         $qb $repo->getTopAmateursQueryBuilder($image$online$skipIds$idList);
  96.         $qb->setMaxResults($limit);
  97.         $qb->setFirstResult($page $limit $limit);
  98.         return new Paginator($qb->getQuery());
  99.     }
  100.     /**
  101.      * @throws \Exception
  102.      */
  103.     public function getOnlineAmateurs(int $pageint $limit, ?int $minutes null): Paginator
  104.     {
  105.         /**
  106.          * @var $repo MemberRepository
  107.          */
  108.         $repo $this->getMemberService()->getRepository();
  109.         if ($minutes 0) {
  110.             $lastOnlineAt = new \DateTime($minutes.' minutes ago');
  111.             $qb $repo->getOnlineAmateursQueryBuilder($lastOnlineAt);
  112.         } else {
  113.             $qb $repo->getOnlineAmateursQueryBuilder();
  114.         }
  115.         $qb->setMaxResults($limit);
  116.         $qb->setFirstResult($page $limit $limit);
  117.         return new Paginator($qb->getQuery());
  118.     }
  119.     public function getLivecamAmateurs(int $pageint $limit): Paginator
  120.     {
  121.         /**
  122.          * @var $repo MemberRepository
  123.          */
  124.         $repo $this->getMemberService()->getRepository();
  125.         $qb $repo->getLivecamAmateursQueryBuilder();
  126.         $qb->setMaxResults($limit);
  127.         $qb->setFirstResult($page $limit $limit);
  128.         return new Paginator($qb->getQuery());
  129.     }
  130.     public function getRecentAmateurs(int $pageint $limit): Paginator
  131.     {
  132.         /**
  133.          * @var $repo MemberRepository
  134.          */
  135.         $repo $this->getMemberService()->getRepository();
  136.         $qb $repo->getRecentAmateursQueryBuilder();
  137.         $qb->setMaxResults($limit);
  138.         $qb->setFirstResult($page $limit $limit);
  139.         return new Paginator($qb->getQuery());
  140.     }
  141.     public function getRandomAmateurs(int $limitbool $withImageOnly true, array $skipMemberIds = []): Paginator
  142.     {
  143.         /**
  144.          * @var $repo MemberRepository
  145.          */
  146.         $repo $this->getMemberService()->getRepository();
  147.         $qb $repo->findRandomRemarkableAmateur($limit$withImageOnly$skipMemberIds);
  148.         return new Paginator($qb->getQuery());
  149.     }
  150.     /**
  151.      * @return Member[]
  152.      */
  153.     public function getRandomAmateursArray(int $limitbool $withImageOnly true, array $skipMemberIds = []): array
  154.     {
  155.         /**
  156.          * @var $repo MemberRepository
  157.          */
  158.         $repo $this->getMemberService()->getRepository();
  159.         return $repo->findRandomRemarkableAmateur($limit$withImageOnly$skipMemberIds)->getQuery()->getResult();
  160.     }
  161.     public function getAmateursForWebmasterAd(Ad $ad): Paginator
  162.     {
  163.         /**
  164.          * @var $repo MemberRepository
  165.          */
  166.         $repo $this->getMemberService()->getRepository();
  167.         $qb $repo->getAmateurAdQueryBuilder($ad);
  168.         $maxResults $ad->getSizeWidth() * $ad->getSizeHeight();
  169.         if ($maxResults 2) {
  170.             $maxResults 2;
  171.         }
  172.         $qb->setMaxResults($maxResults);
  173.         return new Paginator($qb->getQuery());
  174.     }
  175. }