Passed
Push — master ( 192ccc...1770a0 )
by Angel Fernando Quiroz
06:47
created

CourseLinkExtensionTrait::addCourseLinkCondition()   A

Complexity

Conditions 3
Paths 4

Size

Total Lines 26
Code Lines 15

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 15
c 0
b 0
f 0
nc 4
nop 4
dl 0
loc 26
rs 9.7666
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
trait CourseLinkExtensionTrait
12
{
13
    public function __construct(
14
        private readonly Security $security
15
    ) {}
16
17
    protected function addCourseLinkWithVisibilityConditions(QueryBuilder $queryBuilder, bool $checkVisibility): void
18
    {
19
        $rootAlias = $queryBuilder->getRootAliases()[0];
20
21
        $queryBuilder
22
            ->innerJoin("$rootAlias.resourceNode", 'node')
23
            ->innerJoin('node.resourceLinks', 'resource_links')
24
        ;
25
26
        if ($checkVisibility) {
27
            $this->addVisibilityCondition($queryBuilder);
28
        }
29
    }
30
31
    protected function addVisibilityCondition(QueryBuilder $queryBuilder): void
32
    {
33
        $allowDraft =
34
            $this->security->isGranted('ROLE_ADMIN')
35
            || $this->security->isGranted('ROLE_CURRENT_COURSE_TEACHER');
36
37
        if (!$allowDraft) {
38
            $queryBuilder
39
                ->andWhere('resource_links.visibility != :visibilityDraft')
40
                ->setParameter('visibilityDraft', ResourceLink::VISIBILITY_DRAFT)
41
            ;
42
        }
43
    }
44
}
45