Completed
Push — master ( ecc25c...57664d )
by Julito
11:13
created

CourseRepository::getSubscribedUsers()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 36
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Importance

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