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