Passed
Push — master ( 7d2d6a...c68aff )
by Angel Fernando Quiroz
09:51
created

CourseLinkExtensionTrait::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
c 0
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Chamilo\CoreBundle\DataProvider\Extension;
6
7
use Chamilo\CoreBundle\Entity\ResourceLink;
8
use Doctrine\ORM\QueryBuilder;
9
use Symfony\Bundle\SecurityBundle\Security;
10
11
/**
12
 * You should inject Symfony\Bundle\SecurityBundle\Security in the constructor.
13
 */
14
trait CourseLinkExtensionTrait
15
{
16
    protected function addCourseLinkWithVisibilityConditions(QueryBuilder $queryBuilder, bool $checkVisibility): void
17
    {
18
        $rootAlias = $queryBuilder->getRootAliases()[0];
19
20
        $joins = $queryBuilder->getDQLPart('join');
21
22
        if (empty($joins[$rootAlias])
23
            || !array_filter($joins[$rootAlias], fn ($j) => 'node' === $j->getAlias())
24
        ) {
25
            $queryBuilder->innerJoin("$rootAlias.resourceNode", 'node');
26
        }
27
28
        if (empty($joins[$rootAlias])
29
            || !array_filter($joins[$rootAlias], fn ($j) => 'resource_links' === $j->getAlias())
30
        ) {
31
            $queryBuilder->innerJoin('node.resourceLinks', 'resource_links');
32
        }
33
34
        if ($checkVisibility) {
35
            $this->addVisibilityCondition($queryBuilder);
36
        }
37
    }
38
39
    protected function addVisibilityCondition(QueryBuilder $queryBuilder): void
40
    {
41
        $allowDraft =
42
            $this->security->isGranted('ROLE_ADMIN')
43
            || $this->security->isGranted('ROLE_CURRENT_COURSE_TEACHER');
44
45
        if (!$allowDraft) {
46
            $queryBuilder
47
                ->andWhere('resource_links.visibility != :visibilityDraft')
48
                ->setParameter('visibilityDraft', ResourceLink::VISIBILITY_DRAFT)
49
            ;
50
        }
51
    }
52
}
53