Passed
Pull Request — master (#5832)
by
unknown
08:39
created

getUserCourseRegistrationAt()   A

Complexity

Conditions 4
Paths 6

Size

Total Lines 31
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
cc 4
eloc 22
c 2
b 0
f 1
nc 6
nop 3
dl 0
loc 31
rs 9.568
1
<?php
2
3
declare(strict_types=1);
4
5
/* For licensing terms, see /license.txt */
6
7
namespace Chamilo\CoreBundle\Repository;
8
9
use Chamilo\CoreBundle\Entity\TrackEDefault;
10
use DateTime;
11
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
12
use Doctrine\Persistence\ManagerRegistry;
13
14
class TrackEDefaultRepository extends ServiceEntityRepository
15
{
16
    public function __construct(ManagerRegistry $registry)
17
    {
18
        parent::__construct($registry, TrackEDefault::class);
19
    }
20
21
    /**
22
     * Retrieves the registration date of a user in a specific course or session.
23
     */
24
    public function getUserCourseRegistrationAt(int $courseId, int $userId, ?int $sessionId = 0): ?\DateTime
25
    {
26
        $serializedPattern = '%s:2:"id";i:' . $userId . ';%';
27
28
        $qb = $this->createQueryBuilder('te')
29
            ->select('te.defaultDate')
30
            ->where('te.cId = :courseId')
31
            ->andWhere('te.defaultValueType = :valueType')
32
            ->andWhere('te.defaultEventType = :eventType')
33
            ->andWhere('te.defaultValue LIKE :serializedPattern')
34
            ->setParameter('courseId', $courseId)
35
            ->setParameter('valueType', 'user_object')
36
            ->setParameter('eventType', 'user_subscribed')
37
            ->setParameter('serializedPattern', $serializedPattern);
38
39
        if ($sessionId > 0) {
40
            $qb->andWhere('te.sessionId = :sessionId')
41
                ->setParameter('sessionId', $sessionId);
42
        }
43
        else if ($sessionId === 0) {
44
            $qb->andWhere('te.sessionId = 0');
45
        }
46
        else {
47
            $qb->andWhere('te.sessionId IS NULL');
48
        }
49
50
        $qb->setMaxResults(1);
51
        $query = $qb->getQuery();
52
        $result = $query->getOneOrNullResult();
53
54
        return $result ? $result['defaultDate'] : null;
55
    }
56
}
57