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

TrackEDefaultRepository::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 1
c 1
b 0
f 0
nc 1
nop 1
dl 0
loc 3
rs 10
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