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

TranslationExtension   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
eloc 12
dl 0
loc 44
rs 10
c 2
b 0
f 0
wmc 7

4 Methods

Rating   Name   Duplication   Size   Complexity  
A applyToItem() 0 9 1
A __construct() 0 3 1
A applyToCollection() 0 8 1
A addWhere() 0 14 4
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