Passed
Push — develop ( fdade1...99650f )
by BENARD
02:15
created

TranslationExtension::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ProjetNormandie\ArticleBundle\Doctrine;
6
7
use ApiPlatform\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
8
use ApiPlatform\Doctrine\Orm\Extension\QueryItemExtensionInterface;
9
use ApiPlatform\Doctrine\Orm\Util\QueryNameGeneratorInterface;
10
use ApiPlatform\Metadata\Operation;
11
use Doctrine\ORM\QueryBuilder;
12
use ProjetNormandie\ArticleBundle\Entity\Article;
13
use Symfony\Component\HttpFoundation\RequestStack;
14
15
final class TranslationExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
16
{
17
    private RequestStack $requestStack;
18
19
    public function __construct(RequestStack $requestStack)
20
    {
21
        $this->requestStack = $requestStack;
22
    }
23
24
    public function applyToCollection(
25
        QueryBuilder $queryBuilder,
26
        QueryNameGeneratorInterface $queryNameGenerator,
27
        string $resourceClass,
28
        ?Operation $operation = null,
29
        array $context = []
30
    ): void {
31
        $this->addWhere($queryBuilder, $resourceClass);
32
    }
33
34
    public function applyToItem(
35
        QueryBuilder $queryBuilder,
36
        QueryNameGeneratorInterface $queryNameGenerator,
37
        string $resourceClass,
38
        array $identifiers,
39
        ?Operation $operation = null,
40
        array $context = []
41
    ): void {
42
        $this->addWhere($queryBuilder, $resourceClass);
43
    }
44
45
    private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
46
    {
47
        if ($resourceClass != Article::class) {
48
            return;
49
        }
50
51
        // Joindre les traductions
52
        $rootAlias = $queryBuilder->getRootAliases()[0];
53
        $queryBuilder->leftJoin($rootAlias . '.translations', 't')
54
            ->addSelect('t');
55
56
        // Si vous voulez filtrer par locale, vous pouvez le faire ici
57
        $request = $this->requestStack->getCurrentRequest();
58
        if ($request && $locale = $request->getLocale()) {
0 ignored issues
show
Unused Code introduced by
The assignment to $locale is dead and can be removed.
Loading history...
59
            // Optionnel : filtrer par locale courante
60
            // $queryBuilder->andWhere('t.locale = :locale')
61
            //     ->setParameter('locale', $locale);
62
        }
63
    }
64
}
65