Test Setup Failed
Push — master ( 4e700f...c7183e )
by Julito
63:12
created

CourseRepository   A

Complexity

Total Complexity 6

Size/Duplication

Total Lines 98
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 0
Metric Value
dl 0
loc 98
rs 10
c 0
b 0
f 0
wmc 6
lcom 1
cbo 5
1
<?php
2
/* For licensing terms, see /license.txt */
3
4
namespace Chamilo\CoreBundle\Entity\Repository;
5
6
use Chamilo\CoreBundle\Entity\Course;
7
use Doctrine\Common\Collections\Criteria;
8
use Doctrine\ORM\EntityRepository;
9
use Doctrine\ORM\Query\Expr\Join;
10
use Doctrine\ORM\QueryBuilder;
11
use Sylius\Component\Resource\Repository\RepositoryInterface;
12
use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository;
0 ignored issues
show
Bug introduced by
This code did not parse for me. Apparently, there is an error somewhere around this line:

Cannot use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository as EntityRepository because the name is already in use
Loading history...
13
14
15
/**
16
 * Class CourseRepository
17
 * The functions inside this class must return an instance of QueryBuilder
18
 *
19
 * @package Chamilo\CoreBundle\Entity\Repository
20
 */
21
class CourseRepository extends EntityRepository
22
{
23
    /**
24
     * Get all users that are registered in the course. No matter the status
25
     *
26
     * @param Course $course
27
     *
28
     * @return \Doctrine\ORM\QueryBuilder
29
     */
30
    public function getSubscribedUsers(Course $course)
31
    {
32
        // Course builder
33
        $queryBuilder = $this->createQueryBuilder('c');
34
35
        // Selecting user info.
36
        $queryBuilder->select('DISTINCT user');
37
38
        // Selecting courses for users.
39
        $queryBuilder->innerJoin('c.users', 'subscriptions');
40
        $queryBuilder->innerJoin(
41
            'ChamiloUserBundle:User',
42
            'user',
43
            Join::WITH,
44
            'subscriptions.user = user.id'
45
        );
46
47
        if (api_is_western_name_order()) {
48
            $queryBuilder->add('orderBy', 'user.firstname ASC');
49
        } else {
50
            $queryBuilder->add('orderBy', 'user.lastname ASC');
51
        }
52
53
        $wherePart = $queryBuilder->expr()->andx();
54
55
        // Get only users subscribed to this course
56
        $wherePart->add($queryBuilder->expr()->eq('c.id', $course->getId()));
57
58
        // $wherePart->add($queryBuilder->expr()->eq('c.status', $status));
59
60
        $queryBuilder->where($wherePart);
61
62
        //var_dump($queryBuilder->getQuery()->getSQL());
63
        //$q = $queryBuilder->getQuery();
64
        //return $q->execute();
65
        return $queryBuilder;
66
    }
67
68
    /**
69
     * Gets students subscribed in the course
70
     *
71
     * @param Course $course
72
     *
73
     * @return QueryBuilder
74
     */
75
    public function getSubscribedStudents(Course $course)
76
    {
77
        return self::getSubscribedUsersByStatus($course, STUDENT);
78
    }
79
80
    /**
81
     * Gets the students subscribed in the course
82
     * @param Course $course
83
     *
84
     * @return QueryBuilder
85
     */
86
    public function getSubscribedCoaches(Course $course)
87
    {
88
        $queryBuilder = $this->getSubscribedUsers($course);
89
        //@todo add criterias
90
        return $queryBuilder;
91
    }
92
93
    /**
94
     *
95
     * Gets the teachers subscribed in the course
96
     * @param Course $course
97
     *
98
     * @return QueryBuilder
99
     */
100
    public function getSubscribedTeachers(Course $course)
101
    {
102
        return self::getSubscribedUsersByStatus($course, COURSEMANAGER);
103
    }
104
105
    /**
106
     * @param Course $course
107
     * @param int $status use legacy chamilo constants COURSEMANAGER|STUDENT
108
     * @return QueryBuilder
109
     */
110
    public function getSubscribedUsersByStatus(Course $course, $status)
111
    {
112
        $queryBuilder = $this->getSubscribedUsers($course);
113
        $wherePart = $queryBuilder->expr()->andx();
114
        $wherePart->add($queryBuilder->expr()->eq('c.status', $status));
115
116
        return $queryBuilder;
117
    }
118
119
    public function getCoursesWithNoSession($urlId)
120
    {
121
        $queryBuilder = $this->createQueryBuilder('c');
122
        $criteria = Criteria::create();
123
        $queryBuilder = $queryBuilder
124
            ->select('c')
125
            ->leftJoin('c.urls', 'u')
126
            ->leftJoin('c.sessions', 's')
127
            /*->leftJoin(
128
                'ChamiloCoreBundle:SessionRelCourse',
129
                'sc',
130
                Join::WITH,
131
                'c != sc.course'
132
            )->leftJoin(
133
                'ChamiloCoreBundle:AccessUrlRelCourse',
134
                'ac',
135
                Join::WITH,
136
                'c = ac.course'
137
            )*/
138
            ->where($queryBuilder->expr()->isNull('s'))
139
            //->where($queryBuilder->expr()->eq('s', 0))
140
            ->where($queryBuilder->expr()->eq('u.url', $urlId))
141
            ->getQuery();
142
143
        $courses = $queryBuilder->getResult();
144
        $courseList = [];
145
        /** @var Course $course */
146
        foreach ($courses as $course) {
147
            if (empty($course->getSessions()->count() == 0)) {
148
                $courseList[] = $course;
149
            }
150
        }
151
152
        return $courseList;
153
    }
154
}
155