Passed
Push — master ( eff1c9...0941d8 )
by Matt
04:56
created

ImageRepository::findWithNoLocationButHasLatLng()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 16
Code Lines 11

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 11
nc 1
nop 0
dl 0
loc 16
rs 9.9
c 0
b 0
f 0
1
<?php
2
3
namespace App\Repository;
4
5
use App\Entity\Image;
6
use App\Entity\Wander;
7
use DateTime;
8
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
9
use Doctrine\ORM\Query;
10
use Doctrine\ORM\QueryBuilder;
11
use Doctrine\Persistence\ManagerRegistry;
12
use Knp\Component\Pager\Paginator;
13
14
/**
15
 * @method Image|null find($id, $lockMode = null, $lockVersion = null)
16
 * @method Image|null findOneBy(array $criteria, array $orderBy = null)
17
 * @method Image[]    findAll()
18
 * @method Image[]    findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null)
19
 */
20
class ImageRepository extends ServiceEntityRepository
21
{
22
    public function __construct(ManagerRegistry $registry)
23
    {
24
        parent::__construct($registry, Image::class);
25
    }
26
27
    public function standardQueryBuilder(): QueryBuilder
28
    {
29
        return $this->createQueryBuilder('i');
30
    }
31
32
    public function findBetweenDates(DateTime $from, DateTime $to)
33
    {
34
        return $this->createQueryBuilder('i')
35
            ->andWhere('i.capturedAt BETWEEN :from AND :to')
36
            ->setParameter('from', $from)
37
            ->setParameter('to', $to)
38
            ->orderBy('i.capturedAt')
39
            ->getQuery()
40
            ->getResult();
41
    }
42
43
    public function findWithNoWander()
44
    {
45
        return $this->createQueryBuilder('i')
46
            ->andWhere('i.wander IS NULL')
47
            ->orderBy('i.capturedAt', 'desc')
48
            ->getQuery()
49
            ->getResult();
50
    }
51
52
    public function findWithNoLocation()
53
    {
54
        return $this->createQueryBuilder('i')
55
        ->andWhere('i.location IS NULL')
56
        ->orWhere("i.location = ''")
57
        ->orderBy('i.capturedAt', 'desc')
58
        ->getQuery()
59
        ->getResult();
60
    }
61
62
    public function findWithNoLocationButHasLatLng()
63
    {
64
        $qb = $this->createQueryBuilder('i');
65
        return $qb
66
            ->add('where',
67
                $qb->expr()->andX(
68
                    $qb->expr()->orX(
69
                        $qb->expr()->eq('i.location', "''"),
70
                        $qb->expr()->isNull('i.location')
71
                    ),
72
                    $qb->expr()->isNotNull('i.latlng')
73
                )
74
            )
75
            ->addOrderBy('i.capturedAt', 'desc')
76
            ->getQuery()
77
            ->getResult();
78
    }
79
80
81
    public function findFromIdOnwards(int $id)
82
    {
83
        return $this->createQueryBuilder('i')
84
            ->andWhere('i.id >= :id')
85
            ->setParameter('id', $id)
86
            ->orderBy('i.id')
87
            ->getQuery()
88
            ->getResult();
89
    }
90
91
    public function getPaginatorQueryBuilder(?Wander $wander = null): QueryBuilder
92
    {
93
        $qb = $this->createQueryBuilder('i')
94
            ->addOrderBy('i.capturedAt')
95
            ->addOrderBy('i.id'); // tie-breaker
96
        if ($wander !== null) {
97
            $qb
98
                ->andWhere('i.wander = :wander')
99
                ->setParameter('wander', $wander);
100
        }
101
        return $qb;
102
    }
103
104
    public function getReversePaginatorQueryBuilder(?Wander $wander = null): QueryBuilder
105
    {
106
        $qb = $this->createQueryBuilder('i')
107
            ->addOrderBy('i.capturedAt', 'desc')
108
            ->addOrderBy('i.id', 'desc'); // tie-breaker
109
        if ($wander !== null) {
110
            $qb
111
                ->andWhere('i.wander = :wander')
112
                ->setParameter('wander', $wander);
113
        }
114
        return $qb;
115
    }
116
117
    public function findNext(Image $image)
118
    {
119
        $wander = $image->getWander();
120
        if ($wander === null) {
121
            return null;
122
        }
123
124
        $qb = $this->createQueryBuilder('i');
125
        $qb->add('where', $qb->expr()->andX(
126
            $qb->expr()->eq('i.wander', ':wander'),
127
            $qb->expr()->orX(
128
                $qb->expr()->gt('i.capturedAt', ':capturedAt'),
129
                $qb->expr()->andX(
130
                    $qb->expr()->eq('i.capturedAt', ':capturedAt'),
131
                    $qb->expr()->gt('i.id', ':id')
132
                )
133
            )
134
        ));
135
        $qb->setParameter('wander', $wander)
136
            ->setParameter('capturedAt', $image->getCapturedAt())
137
            ->setParameter('id', $image->getId());
138
139
        $qb->addOrderBy('i.capturedAt')
140
            ->addOrderBy('i.id');
141
        $qb->setMaxResults(1);
142
        return $qb->getQuery()->getOneOrNullResult();
143
    }
144
145
    public function findPrev(Image $image)
146
    {
147
        $wander = $image->getWander();
148
        if ($wander === null) {
149
            return null;
150
        }
151
152
        $qb = $this->createQueryBuilder('i');
153
        $qb->add('where', $qb->expr()->andX(
154
            $qb->expr()->eq('i.wander', ':wander'),
155
            $qb->expr()->orX(
156
                $qb->expr()->lt('i.capturedAt', ':capturedAt'),
157
                $qb->expr()->andX(
158
                    $qb->expr()->eq('i.capturedAt', ':capturedAt'),
159
                    $qb->expr()->lt('i.id', ':id')
160
                )
161
            )
162
        ));
163
        $qb->setParameter('wander', $wander)
164
            ->setParameter('capturedAt', $image->getCapturedAt())
165
            ->setParameter('id', $image->getId());
166
167
        $qb->addOrderBy('i.capturedAt', 'desc')
168
            ->addOrderBy('i.id', 'desc');
169
        $qb->setMaxResults(1);
170
        return $qb->getQuery()->getOneOrNullResult();
171
    }
172
173
    // /**
174
    //  * @return Image[] Returns an array of Image objects
175
    //  */
176
    /*
177
    public function findByExampleField($value)
178
    {
179
        return $this->createQueryBuilder('i')
180
            ->andWhere('i.exampleField = :val')
181
            ->setParameter('val', $value)
182
            ->orderBy('i.id', 'ASC')
183
            ->setMaxResults(10)
184
            ->getQuery()
185
            ->getResult()
186
        ;
187
    }
188
    */
189
190
    /*
191
    public function findOneBySomeField($value): ?Image
192
    {
193
        return $this->createQueryBuilder('i')
194
            ->andWhere('i.exampleField = :val')
195
            ->setParameter('val', $value)
196
            ->getQuery()
197
            ->getOneOrNullResult()
198
        ;
199
    }
200
    */
201
}
202