zend-blog-3-backend

Форк
0
/
CommentatorRepository.php 
110 строк · 2.9 Кб
1
<?php
2

3
namespace App\Repository;
4

5
use App\DTO\CommentatorDTO;
6
use App\Entity\Commentator;
7
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
8
use Doctrine\Persistence\ManagerRegistry;
9

10
/**
11
 * CommentatorRepository
12
 *
13
 * @method Commentator|null findOneByDisqusId($id)
14
 */
15
class CommentatorRepository extends ServiceEntityRepository
16
{
17
    use ListQueryTrait;
18

19
    /**
20
     * @param ManagerRegistry $registry
21
     */
22
    public function __construct(ManagerRegistry $registry)
23
    {
24
        parent::__construct($registry, Commentator::class);
25
    }
26

27
    public function findOrCreate(CommentatorDTO $commentator): Commentator
28
    {
29
        $result = $this->getByCommentatorData($commentator);
30
        if (!$result) {
31
            $result = new Commentator();
32
            $result
33
                ->setName($commentator->name)
34
                ->setEmail($commentator->email)
35
                ->setWebsite($commentator->getNormalizedURL())
36
            ;
37

38
            $this->getEntityManager()->persist($result);
39
        }
40

41
        return $result;
42
    }
43

44
    public function getByCommentatorData(CommentatorDTO $commentator): ?Commentator
45
    {
46
        $qb = $this->createQueryBuilder('c');
47
        $qb
48
            ->where($qb->expr()->eq('c.name', ':name'))
49
            ->setParameter('name', $commentator->name)
50
        ;
51

52
        if ($commentator->email) {
53
            $qb
54
                ->andWhere($qb->expr()->eq('c.email', ':email'))
55
                ->setParameter('email', $commentator->email)
56
            ;
57
        } else {
58
            $qb->andWhere($qb->expr()->isNull('c.email'));
59
        }
60

61
        if ($commentator->website) {
62
            $qb
63
                ->andWhere($qb->expr()->eq('c.website', ':website'))
64
                ->setParameter('website', $commentator->getNormalizedURL())
65
            ;
66
        } else {
67
            $qb->andWhere($qb->expr()->isNull('c.website'));
68
        }
69

70
        return $qb->getQuery()->getOneOrNullResult();
71
    }
72

73
    /**
74
     * @return Commentator[]
75
     */
76
    public function getWithUncheckedEmails(): array
77
    {
78
        $qb = $this->createQueryBuilder('c');
79
        $qb
80
            ->andWhere($qb->expr()->isNotNull('c.email'))
81
            ->andWhere($qb->expr()->isNull('c.emailCheck'))
82
            ->setMaxResults(20)
83
        ;
84

85
        return $qb->getQuery()->getResult();
86
    }
87

88
    /**
89
     * @return Commentator[]
90
     */
91
    public function getWithUncheckedLinks(): array
92
    {
93
        $from = (new \DateTime())->sub(new \DateInterval('P1W'))->format('Y-m-d H:i:s');
94

95
        $qb = $this->createQueryBuilder('c');
96
        $qb
97
            ->andWhere($qb->expr()->isNotNull('c.website'))
98
            ->andWhere(
99
                $qb->expr()->orX(
100
                    $qb->expr()->isNull('c.rottenCheck'),
101
                    $qb->expr()->lt('c.rottenCheck', ':from')
102
                )
103
            )
104
            ->setParameter('from', $from)
105
            ->setMaxResults(10)
106
        ;
107

108
        return $qb->getQuery()->getResult();
109
    }
110
}
111

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.