Chamilo is a learning management system focused on ease of use and accessibility
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.
 
 
 
 
 
 
chamilo-lms/src/CoreBundle/Repository/TrackEDefaultRepository.php

68 lines
2.2 KiB

<?php
declare(strict_types=1);
/* For licensing terms, see /license.txt */
namespace Chamilo\CoreBundle\Repository;
use Chamilo\CoreBundle\Entity\TrackEDefault;
use DateTime;
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
use Doctrine\Persistence\ManagerRegistry;
use Exception;
use RuntimeException;
class TrackEDefaultRepository extends ServiceEntityRepository
{
public function __construct(ManagerRegistry $registry)
{
parent::__construct($registry, TrackEDefault::class);
}
/**
* Retrieves the registration date of a user in a specific course or session.
*/
public function getUserCourseRegistrationAt(int $courseId, int $userId, ?int $sessionId = 0): ?DateTime
{
$serializedPattern = \sprintf('s:2:"id";i:%d;', $userId);
$qb = $this->createQueryBuilder('te')
->select('te.defaultDate')
->where('te.cId = :courseId')
->andWhere('te.defaultValueType = :valueType')
->andWhere('te.defaultEventType = :eventType')
->andWhere('te.defaultValue LIKE :serializedPattern')
->setParameter('courseId', $courseId)
->setParameter('valueType', 'user_object')
->setParameter('eventType', 'user_subscribed')
->setParameter('serializedPattern', '%'.$serializedPattern.'%')
;
if ($sessionId > 0) {
$qb->andWhere('te.sessionId = :sessionId')
->setParameter('sessionId', $sessionId)
;
} elseif (0 === $sessionId) {
$qb->andWhere('te.sessionId = 0');
} else {
$qb->andWhere('te.sessionId IS NULL');
}
$qb->setMaxResults(1);
$query = $qb->getQuery();
try {
$result = $query->getOneOrNullResult();
if ($result && isset($result['defaultDate'])) {
return $result['defaultDate'] instanceof DateTime
? $result['defaultDate']
: new DateTime($result['defaultDate']);
}
} catch (Exception $e) {
throw new RuntimeException('Error fetching registration date: '.$e->getMessage());
}
return null;
}
}