Passed
Push — master ( ec308f...430c19 )
by Julito
08:35 queued 11s
created

MessageRepository::getMessageByUser()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
c 0
b 0
f 0
nc 1
nop 2
dl 0
loc 6
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\Message;
10
use Chamilo\CoreBundle\Entity\User;
11
use Chamilo\CoreBundle\Traits\Repository\RepositoryQueryBuilderTrait;
12
use Doctrine\Bundle\DoctrineBundle\Repository\ServiceEntityRepository;
13
use Doctrine\ORM\QueryBuilder;
14
use Doctrine\Persistence\ManagerRegistry;
15
16
class MessageRepository extends ServiceEntityRepository
17
{
18
    use RepositoryQueryBuilderTrait;
19
20
    public function __construct(ManagerRegistry $registry)
21
    {
22
        parent::__construct($registry, Message::class);
23
    }
24
25
    public function update(Message $message, bool $andFlush = true): void
26
    {
27
        $this->getEntityManager()->persist($message);
28
        if ($andFlush) {
29
            $this->getEntityManager()->flush();
30
        }
31
    }
32
33
    public function delete(Message $message): void
34
    {
35
        $this->getEntityManager()->remove($message);
36
        $this->getEntityManager()->flush();
37
    }
38
39
    /**
40
     * @return Message[]
41
     */
42
    public function getMessageByUser(User $user, int $type)
43
    {
44
        $qb = $this->addReceiverQueryBuilder($user);
45
        $qb = $this->addMessageTypeQueryBuilder($type, $qb);
46
47
        return $qb->getQuery()->getResult();
48
    }
49
50
    protected function addReceiverQueryBuilder(User $user, QueryBuilder $qb = null): QueryBuilder
51
    {
52
        $qb = $this->getOrCreateQueryBuilder($qb, 'm');
53
        $qb
54
            ->join('m.receivers', 'r')
55
        ;
56
        $qb
57
            ->andWhere('r.receiver = :user')
58
            ->setParameter('user', $user)
59
        ;
60
61
        return $qb;
62
    }
63
64
    protected function addMessageTypeQueryBuilder(int $type, QueryBuilder $qb = null): QueryBuilder
65
    {
66
        $qb = $this->getOrCreateQueryBuilder($qb, 'm');
67
        $qb
68
            ->andWhere('m.msgType = :type')
69
            ->setParameter('type', $type)
70
        ;
71
72
        return $qb;
73
    }
74
}
75