You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
154 lines
4.3 KiB
154 lines
4.3 KiB
![]()
11 years ago
|
<?php
|
||
|
/* For licensing terms, see /license.txt */
|
||
|
|
||
![]()
7 years ago
|
namespace Chamilo\CoreBundle\Repository;
|
||
![]()
11 years ago
|
|
||
|
use Chamilo\CoreBundle\Entity\Course;
|
||
![]()
8 years ago
|
use Doctrine\Common\Collections\Criteria;
|
||
![]()
10 years ago
|
use Doctrine\ORM\Query\Expr\Join;
|
||
![]()
11 years ago
|
use Doctrine\ORM\QueryBuilder;
|
||
![]()
8 years ago
|
use Sylius\Bundle\ResourceBundle\Doctrine\ORM\EntityRepository;
|
||
![]()
11 years ago
|
|
||
|
/**
|
||
|
* Class CourseRepository
|
||
![]()
8 years ago
|
* The functions inside this class must return an instance of QueryBuilder.
|
||
![]()
11 years ago
|
*
|
||
![]()
7 years ago
|
* @package Chamilo\CoreBundle\Repository
|
||
![]()
11 years ago
|
*/
|
||
|
class CourseRepository extends EntityRepository
|
||
|
{
|
||
|
/**
|
||
![]()
8 years ago
|
* Get all users that are registered in the course. No matter the status.
|
||
![]()
11 years ago
|
*
|
||
|
* @param Course $course
|
||
|
*
|
||
|
* @return \Doctrine\ORM\QueryBuilder
|
||
|
*/
|
||
|
public function getSubscribedUsers(Course $course)
|
||
|
{
|
||
![]()
10 years ago
|
// Course builder
|
||
![]()
10 years ago
|
$queryBuilder = $this->createQueryBuilder('c');
|
||
![]()
11 years ago
|
|
||
|
// Selecting user info.
|
||
![]()
10 years ago
|
$queryBuilder->select('DISTINCT user');
|
||
![]()
11 years ago
|
|
||
|
// Selecting courses for users.
|
||
![]()
10 years ago
|
$queryBuilder->innerJoin('c.users', 'subscriptions');
|
||
|
$queryBuilder->innerJoin(
|
||
|
'ChamiloUserBundle:User',
|
||
|
'user',
|
||
|
Join::WITH,
|
||
|
'subscriptions.user = user.id'
|
||
|
);
|
||
![]()
11 years ago
|
|
||
![]()
10 years ago
|
if (api_is_western_name_order()) {
|
||
|
$queryBuilder->add('orderBy', 'user.firstname ASC');
|
||
|
} else {
|
||
|
$queryBuilder->add('orderBy', 'user.lastname ASC');
|
||
|
}
|
||
![]()
11 years ago
|
|
||
|
$wherePart = $queryBuilder->expr()->andx();
|
||
|
|
||
|
// Get only users subscribed to this course
|
||
![]()
10 years ago
|
$wherePart->add($queryBuilder->expr()->eq('c.id', $course->getId()));
|
||
![]()
11 years ago
|
|
||
|
// $wherePart->add($queryBuilder->expr()->eq('c.status', $status));
|
||
|
|
||
|
$queryBuilder->where($wherePart);
|
||
![]()
10 years ago
|
|
||
|
//var_dump($queryBuilder->getQuery()->getSQL());
|
||
![]()
11 years ago
|
//$q = $queryBuilder->getQuery();
|
||
|
//return $q->execute();
|
||
|
return $queryBuilder;
|
||
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Gets students subscribed in the course.
|
||
![]()
11 years ago
|
*
|
||
|
* @param Course $course
|
||
|
*
|
||
|
* @return QueryBuilder
|
||
|
*/
|
||
|
public function getSubscribedStudents(Course $course)
|
||
|
{
|
||
|
return self::getSubscribedUsersByStatus($course, STUDENT);
|
||
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Gets the students subscribed in the course.
|
||
|
*
|
||
![]()
11 years ago
|
* @param Course $course
|
||
|
*
|
||
|
* @return QueryBuilder
|
||
|
*/
|
||
|
public function getSubscribedCoaches(Course $course)
|
||
|
{
|
||
|
$queryBuilder = $this->getSubscribedUsers($course);
|
||
|
//@todo add criterias
|
||
|
return $queryBuilder;
|
||
|
}
|
||
|
|
||
|
/**
|
||
![]()
8 years ago
|
* Gets the teachers subscribed in the course.
|
||
![]()
11 years ago
|
*
|
||
|
* @param Course $course
|
||
|
*
|
||
|
* @return QueryBuilder
|
||
|
*/
|
||
|
public function getSubscribedTeachers(Course $course)
|
||
|
{
|
||
|
return self::getSubscribedUsersByStatus($course, COURSEMANAGER);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param Course $course
|
||
![]()
8 years ago
|
* @param int $status use legacy chamilo constants COURSEMANAGER|STUDENT
|
||
|
*
|
||
![]()
11 years ago
|
* @return QueryBuilder
|
||
|
*/
|
||
|
public function getSubscribedUsersByStatus(Course $course, $status)
|
||
|
{
|
||
|
$queryBuilder = $this->getSubscribedUsers($course);
|
||
|
$wherePart = $queryBuilder->expr()->andx();
|
||
|
$wherePart->add($queryBuilder->expr()->eq('c.status', $status));
|
||
|
|
||
|
return $queryBuilder;
|
||
|
}
|
||
![]()
8 years ago
|
|
||
|
public function getCoursesWithNoSession($urlId)
|
||
|
{
|
||
|
$queryBuilder = $this->createQueryBuilder('c');
|
||
|
$criteria = Criteria::create();
|
||
|
$queryBuilder = $queryBuilder
|
||
|
->select('c')
|
||
|
->leftJoin('c.urls', 'u')
|
||
|
->leftJoin('c.sessions', 's')
|
||
|
/*->leftJoin(
|
||
|
'ChamiloCoreBundle:SessionRelCourse',
|
||
|
'sc',
|
||
|
Join::WITH,
|
||
|
'c != sc.course'
|
||
|
)->leftJoin(
|
||
|
'ChamiloCoreBundle:AccessUrlRelCourse',
|
||
|
'ac',
|
||
|
Join::WITH,
|
||
|
'c = ac.course'
|
||
|
)*/
|
||
|
->where($queryBuilder->expr()->isNull('s'))
|
||
|
//->where($queryBuilder->expr()->eq('s', 0))
|
||
|
->where($queryBuilder->expr()->eq('u.url', $urlId))
|
||
|
->getQuery();
|
||
|
|
||
|
$courses = $queryBuilder->getResult();
|
||
|
$courseList = [];
|
||
|
/** @var Course $course */
|
||
|
foreach ($courses as $course) {
|
||
|
if (empty($course->getSessions()->count() == 0)) {
|
||
|
$courseList[] = $course;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $courseList;
|
||
|
}
|
||
![]()
11 years ago
|
}
|