Passed
Push — master ( 8949b5...eed85f )
by Julito
08:45 queued 41s
created

CDocumentExtension::applyToItem()   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 6
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\Util\QueryNameGeneratorInterface;
12
use Chamilo\CoreBundle\Entity\ResourceLink;
13
use Chamilo\CourseBundle\Entity\CDocument;
14
use Doctrine\ORM\QueryBuilder;
15
use Symfony\Component\Security\Core\Security;
16
17
final class CDocumentExtension implements QueryCollectionExtensionInterface, QueryItemExtensionInterface
18
{
19
    private $security;
20
21
    public function __construct(Security $security)
22
    {
23
        $this->security = $security;
24
    }
25
26
    public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null): void
27
    {
28
        error_log('applyToCollection');
29
        $this->addWhere($queryBuilder, $resourceClass);
30
    }
31
32
    public function applyToItem(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, array $identifiers, string $operationName = null, array $context = []): void
33
    {
34
        error_log('applyToItem');
35
        $this->addWhere($queryBuilder, $resourceClass);
36
    }
37
38
    private function addWhere(QueryBuilder $queryBuilder, string $resourceClass): void
39
    {
40
        error_log('addWhere');
41
        if (CDocument::class !== $resourceClass ||
42
            $this->security->isGranted('ROLE_ADMIN') ||
43
            null === $user = $this->security->getUser()
44
        ) {
45
            return;
46
        }
47
48
        error_log('here!');
49
        $rootAlias = $queryBuilder->getRootAliases()[0];
50
51
        $queryBuilder
52
            ->innerJoin("$rootAlias.resourceNode", 'node')
53
            ->innerJoin('node.resourceLinks', 'links')
54
        ;
55
56
        $queryBuilder
57
            ->andWhere('links.visibility != :visibilityDeleted')
58
            ->setParameter('visibilityDeleted', ResourceLink::VISIBILITY_DELETED)
59
        ;
60
61
        $queryBuilder
62
            ->andWhere('links.visibility != :visibilityDraft')
63
            ->setParameter('visibilityDraft', ResourceLink::VISIBILITY_DRAFT)
64
        ;
65
66
        /*$queryBuilder->
67
            andWhere('node.creator = :current_user')
68
        ;*/
69
        //$queryBuilder->andWhere(sprintf('%s.node.creator = :current_user', $rootAlias));
70
        //$queryBuilder->setParameter('current_user', $user->getId());
71
    }
72
}
73