Passed
Push — master ( c5f69b...918276 )
by Julito
25:10
created

CQuizRepository::getLink()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 11
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 2
eloc 6
c 0
b 0
f 0
nc 2
nop 3
dl 0
loc 11
rs 10
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\ResourceInterface;
11
use Chamilo\CoreBundle\Entity\Session;
12
use Chamilo\CoreBundle\Repository\ResourceRepository;
13
use Chamilo\CoreBundle\Repository\ResourceWithLinkInterface;
14
use Chamilo\CourseBundle\Entity\CQuiz;
15
use DateTime;
16
use Doctrine\ORM\QueryBuilder;
17
use Doctrine\Persistence\ManagerRegistry;
18
use Symfony\Component\Routing\RouterInterface;
19
20
final class CQuizRepository extends ResourceRepository implements ResourceWithLinkInterface
21
{
22
    public function __construct(ManagerRegistry $registry)
23
    {
24
        parent::__construct($registry, CQuiz::class);
25
    }
26
27
    public function findQuizzes(Course $course, Session $session = null, string $title = '', ?int $active = null)
28
    {
29
        $qb = $this->getResourcesByCourse($course, $session);
30
31
        $this->addDateFilterQueryBuilder(new DateTime(), $qb);
32
        $this->addActiveQueryBuilder($active, $qb);
33
        $this->addNotDeletedQueryBuilder($qb);
34
        $this->addTitleQueryBuilder($title, $qb);
35
36
        return $qb->getQuery()->getResult();
37
    }
38
39
    public function getLink(ResourceInterface $resource, RouterInterface $router, array $extraParams = []): string
40
    {
41
        $params = [
42
            'name' => 'exercise/overview.php',
43
            'exerciseId' => $resource->getResourceIdentifier(),
44
        ];
45
        if (!empty($extraParams)) {
46
            $params = array_merge($params, $extraParams);
47
        }
48
49
        return $router->generate('legacy_main', $params);
50
    }
51
52
    public function deleteAllByCourse(Course $course): void
53
    {
54
        $qb = $this->getResourcesByCourse($course);
55
        $resources = $qb->getQuery()->getResult();
56
        $em = $this->getEntityManager();
57
58
        /*foreach ($resources as $quiz) {
59
            $questions = $quiz->getQuestions();
60
            foreach ($questions as $question) {
61
                //$em->remove($question);
62
            }
63
            $em->remove($quiz);
64
        }*/
65
        //$em->flush();
66
    }
67
68
    private function addDateFilterQueryBuilder(DateTime $dateTime, QueryBuilder $qb = null): QueryBuilder
69
    {
70
        $qb = $this->getOrCreateQueryBuilder($qb);
71
72
        $qb
73
            ->andWhere("(
74
                (
75
                    resource.startTime <> '' AND
76
                    resource.startTime < :date AND
77
                    resource.endTime <> '' AND
78
                    resource.endTime > :date
79
                )  OR
80
                (resource.startTime <> '' AND resource.startTime < :date AND resource.endTime IS NULL) OR
81
                (resource.startTime IS NULL AND resource.endTime <> '' AND resource.endTime > :date) OR
82
                (resource.startTime IS NULL AND resource.endTime IS NULL)
83
                )
84
            ")
85
            ->setParameter('date', $dateTime)
86
        ;
87
88
        return $qb;
89
    }
90
91
    private function addNotDeletedQueryBuilder(QueryBuilder $qb = null): QueryBuilder
92
    {
93
        $qb = $this->getOrCreateQueryBuilder($qb);
94
95
        $qb->andWhere('resource.active <> -1');
96
97
        return $qb;
98
    }
99
100
    private function addActiveQueryBuilder(?int $active = null, QueryBuilder $qb = null): QueryBuilder
101
    {
102
        $qb = $this->getOrCreateQueryBuilder($qb);
103
104
        if (null !== $active) {
105
            $qb
106
                ->andWhere('resource.active = :active')
107
                ->setParameter('active', $active)
108
            ;
109
        }
110
111
        return $qb;
112
    }
113
}
114