Passed
Push — master ( 435634...9a6e0b )
by Julito
10:38
created

PageExtension::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 2
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 4
rs 10
1
<?php
2
3
/* For licensing terms, see /license.txt */
4
5
declare(strict_types=1);
6
7
namespace Chamilo\CoreBundle\DataProvider\Extension;
8
9
use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryCollectionExtensionInterface;
10
//use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
11
//use ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\QueryItemExtensionInterface;
12
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
13
use Chamilo\CoreBundle\Entity\Page;
14
use Doctrine\ORM\QueryBuilder;
15
use Symfony\Component\HttpFoundation\RequestStack;
16
use Symfony\Component\Security\Core\Security;
17
18
final class PageExtension implements QueryCollectionExtensionInterface //, QueryItemExtensionInterface
19
{
20
    private Security $security;
21
    private RequestStack $requestStack;
22
23
    public function __construct(Security $security, RequestStack $request)
24
    {
25
        $this->security = $security;
26
        $this->requestStack = $request;
27
    }
28
29
    public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void
30
    {
31
        $this->addWhere($queryBuilder, $resourceClass);
32
    }
33
34
    public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
35
    {
36
        //$this->addWhere($queryBuilder, $resourceClass);
37
    }
38
39
    private function addWhere(QueryBuilder $qb, string $resourceClass): void
40
    {
41
        if (Page::class !== $resourceClass) {
42
            return;
43
        }
44
45
        $alias = $qb->getRootAliases()[0];
46
47
        $request = $this->requestStack->getCurrentRequest();
48
        $urlId = $request->getSession()->get('access_url_id');
49
50
        // Url filter by default.
51
        $qb
52
            ->andWhere("$alias.url = :url")
53
            ->setParameter('url', $urlId)
54
        ;
55
56
        $locale = $request->query->get('locale');
57
58
        // By default, load the locale elements.
59
        if (empty($locale)) {
60
            $qb
61
                ->andWhere("$alias.locale = :locale")
62
                ->setParameter('locale', $request->getLocale())
63
            ;
64
        }
65
    }
66
}
67