Passed
Pull Request — master (#6161)
by
unknown
08:26
created

findOneByRemoteIdAndAccessUrl()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 15
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 1
eloc 10
c 1
b 0
f 0
nc 1
nop 2
dl 0
loc 15
rs 9.9332
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\ConferenceMeeting;
10
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
11
use Doctrine\Persistence\ManagerRegistry;
12
13
/**
14
 * Repository for the ConferenceMeeting entity.
15
 */
16
class ConferenceMeetingRepository extends ServiceEntityRepository
17
{
18
    public function __construct(ManagerRegistry $registry)
19
    {
20
        parent::__construct($registry, ConferenceMeeting::class);
21
    }
22
23
    public function findByMeetingRemoteId(string $remoteId): array
24
    {
25
        $qb = $this->createQueryBuilder('r')
26
            ->innerJoin('r.meeting', 'm')
27
            ->where('m.remoteId = :remoteId')
28
            ->setParameter('remoteId', $remoteId);
29
30
        return $qb->getQuery()->getArrayResult();
31
    }
32
33
    /**
34
     * Find a meeting by remote ID and access URL, return as associative array.
35
     */
36
    public function findOneByRemoteIdAndAccessUrl(string $remoteId, int $accessUrlId): ?array
37
    {
38
        $qb = $this->createQueryBuilder('m');
39
40
        $qb
41
            ->select('m', 'IDENTITY(m.user) AS user_id')
42
            ->where('m.remoteId = :remoteId')
43
            ->andWhere('m.accessUrl = :accessUrlId')
44
            ->setParameter('remoteId', $remoteId)
45
            ->setParameter('accessUrlId', $accessUrlId)
46
            ->setMaxResults(1);
47
48
        $result = $qb->getQuery()->getArrayResult();
49
50
        return $result[0] ?? null;
51
    }
52
53
    /**
54
     * Find meeting by ID and return as array.
55
     */
56
    public function findOneAsArrayById(int $id): ?array
57
    {
58
        $qb = $this->createQueryBuilder('m')
59
            ->where('m.id = :id')
60
            ->setParameter('id', $id)
61
            ->setMaxResults(1);
62
63
        $result = $qb->getQuery()->getArrayResult();
64
65
        return $result[0] ?? null;
66
    }
67
68
    /**
69
     * Insert a new ConferenceMeeting and flush immediately.
70
     */
71
    public function insert(ConferenceMeeting $meeting): void
72
    {
73
        $this->_em->persist($meeting);
74
        $this->_em->flush();
75
    }
76
77
    /**
78
     * Update the video URL for a meeting.
79
     */
80
    public function updateVideoUrl(int $id, string $url): void
81
    {
82
        $qb = $this->_em->createQueryBuilder();
83
        $qb->update(ConferenceMeeting::class, 'm')
84
            ->set('m.videoUrl', ':url')
85
            ->where('m.id = :id')
86
            ->setParameter('url', $url)
87
            ->setParameter('id', $id)
88
            ->getQuery()
89
            ->execute();
90
    }
91
92
    /**
93
     * Update visibility (1 = visible, 0 = invisible).
94
     */
95
    public function updateVisibility(int $id, bool $visible): void
96
    {
97
        $qb = $this->_em->createQueryBuilder();
98
        $qb->update(ConferenceMeeting::class, 'm')
99
            ->set('m.visibility', ':visible')
100
            ->where('m.id = :id')
101
            ->setParameter('visible', $visible ? 1 : 0)
102
            ->setParameter('id', $id)
103
            ->getQuery()
104
            ->execute();
105
    }
106
107
    /**
108
     * Close the meeting (status = 0, update closed_at).
109
     */
110
    public function closeMeeting(int $id, \DateTimeInterface $closedAt): void
111
    {
112
        $qb = $this->_em->createQueryBuilder();
113
        $qb->update(ConferenceMeeting::class, 'm')
114
            ->set('m.status', 0)
115
            ->set('m.closedAt', ':closedAt')
116
            ->where('m.id = :id')
117
            ->setParameter('closedAt', $closedAt)
118
            ->setParameter('id', $id)
119
            ->getQuery()
120
            ->execute();
121
    }
122
123
    /**
124
     * Delete meeting by ID.
125
     */
126
    public function deleteById(int $id): void
127
    {
128
        $qb = $this->_em->createQueryBuilder();
129
        $qb->delete(ConferenceMeeting::class, 'm')
130
            ->where('m.id = :id')
131
            ->setParameter('id', $id)
132
            ->getQuery()
133
            ->execute();
134
    }
135
136
    /**
137
     * Find meetings created between two dates.
138
     *
139
     * @param \DateTimeInterface $start
140
     * @param \DateTimeInterface $end
141
     * @return ConferenceMeeting[]
142
     */
143
    public function findByDateRange(\DateTimeInterface $start, \DateTimeInterface $end): array
144
    {
145
        return $this->createQueryBuilder('m')
146
            ->where('m.createdAt BETWEEN :start AND :end')
147
            ->setParameter('start', $start->format('Y-m-d 00:00:00'))
148
            ->setParameter('end', $end->format('Y-m-d 23:59:59'))
149
            ->orderBy('m.createdAt', 'ASC')
150
            ->getQuery()
151
            ->getResult();
152
    }
153
}
154