Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
71.43% covered (warning)
71.43%
10 / 14
77.78% covered (warning)
77.78%
7 / 9
28.57% covered (danger)
28.57%
2 / 7
50.00% covered (danger)
50.00%
1 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
WordCriteriaApplier
71.43% covered (warning)
71.43%
10 / 14
77.78% covered (warning)
77.78%
7 / 9
28.57% covered (danger)
28.57%
2 / 7
50.00% covered (danger)
50.00%
1 / 2
14.11
0.00% covered (danger)
0.00%
0 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 applyWordCriteria
69.23% covered (warning)
69.23%
9 / 13
75.00% covered (warning)
75.00%
6 / 8
16.67% covered (danger)
16.67%
1 / 6
0.00% covered (danger)
0.00%
0 / 1
13.26
1<?php
2
3namespace App\Specification;
4
5use App\Entity\Qualifier;
6use App\Entity\Subject;
7use App\Entity\Word;
8
9/**
10 * Apply Criteria on a QueryBuilder for word, qualifier or subject retrieval.
11 *
12 * @author Wilhelm Zwertvaegher
13 */
14class WordCriteriaApplier implements WordCriteriaApplierInterface
15{
16    public function __construct(private readonly CriterionConverter $criterionConverter)
17    {
18    }
19
20    public function applyWordCriteria(QueryBuilderInterface $qb, Criteria $criteria, Sort $sort = Sort::RANDOM, ?EntitiesAliases $aliases = null): void
21    {
22        if (null === $aliases) {
23            $aliases = new EntitiesAliases(Word::class, 'word', Subject::class, 's', Qualifier::class, 'q');
24        }
25
26        $this->criterionConverter->applyAll($qb, $criteria->getCriteria(), $aliases);
27
28        if (Sort::RANDOM !== $sort) {
29            $qb->setMaxResults(1);
30
31            return;
32        }
33
34        $count = $qb->count($aliases->getAlias(Word::class).'.id');
35        if ($count > 0) {
36            $offset = random_int(0, $count - 1);
37            $qb->setFirstResult($offset);
38            $qb->setMaxResults(1);
39        } else {
40            $qb->setFirstResult(0);
41            $qb->setMaxResults(0);
42        }
43    }
44}