Passed
Push — master ( 5e9101...421268 )
by Julito
07:41
created

CSurveyRepository::getTreeByCourse()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 0

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 0
nc 1
nop 2
dl 0
loc 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CourseBundle\Repository;
8
9
use Chamilo\CoreBundle\Entity\Course;
10
use Chamilo\CoreBundle\Entity\Session;
11
use Chamilo\CoreBundle\Entity\User;
12
use Chamilo\CoreBundle\Repository\ResourceRepository;
13
use Chamilo\CoreBundle\Traits\Repository\ORM\NestedTreeRepositoryTrait;
14
use Chamilo\CourseBundle\Entity\CSurvey;
15
use Doctrine\ORM\QueryBuilder;
16
use Doctrine\Persistence\ManagerRegistry;
17
18
final class CSurveyRepository extends ResourceRepository
19
{
20
    use NestedTreeRepositoryTrait;
21
22
    public function __construct(ManagerRegistry $registry)
23
    {
24
        parent::__construct($registry, CSurvey::class);
25
26
        $this->initializeTreeRepository($this->getEntityManager(), $this->getClassMetadata());
27
    }
28
29
    public function findAllByCourse(
30
        Course $course,
31
        Session $session = null,
32
        ?string $title = null,
33
        ?string $language = null,
34
        ?User $author = null
35
    ): QueryBuilder {
36
        $qb = $this->getResourcesByCourse($course, $session);
37
38
        $this->addTitleQueryBuilder($title, $qb);
39
        $this->addLanguageQueryBuilder($language, $qb);
40
        $this->addCreatorQueryBuilder($author, $qb);
41
42
        return $qb;
43
    }
44
45
    protected function addTitleQueryBuilder(?string $title, QueryBuilder $qb = null): QueryBuilder
46
    {
47
        $qb = $this->getOrCreateQueryBuilder($qb);
48
        if (null === $title) {
49
            return $qb;
50
        }
51
52
        $qb
53
            ->andWhere('resource.code = :title')
54
            ->andWhere('node.title = :title')
55
            ->setParameter('title', $title)
56
        ;
57
58
        return $qb;
59
    }
60
61
    private function addLanguageQueryBuilder(?string $language = null, QueryBuilder $qb = null): QueryBuilder
62
    {
63
        $qb = $this->getOrCreateQueryBuilder($qb);
64
65
        if (null !== $language) {
66
            $qb
67
                ->andWhere('resource.lang = :lang')
68
                ->setParameter('lang', $language)
69
            ;
70
        }
71
72
        return $qb;
73
    }
74
}
75