Passed
Push — develop ( f73276...7860e1 )
by BENARD
08:41
created

MessageRepository::getNbNewMessage()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12
Code Lines 9

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 9
dl 0
loc 12
rs 9.9666
c 0
b 0
f 0
cc 1
nc 1
nop 1
1
<?php
2
3
namespace ProjetNormandie\MessageBundle\Repository;
4
5
use DateInterval;
6
use DateTime;
7
use Doctrine\ORM\EntityRepository;
8
use Doctrine\ORM\NonUniqueResultException;
9
use Doctrine\ORM\NoResultException;
10
11
class MessageRepository extends EntityRepository
12
{
13
    /**
14
     *
15
     */
16
    public function purge(): void
17
    {
18
        //----- delete 1
19
        $query = $this->_em->createQuery(
20
            'DELETE projetNormandie\MessageBundle\Entity\Message m 
21
            WHERE m.isDeletedSender = :isDeletedSender
22
            AND m.isDeletedRecipient = :isDeletedRecipient'
23
        );
24
        $query->setParameter('isDeletedSender', true);
25
        $query->setParameter('isDeletedRecipient', true);
26
        $query->execute();
27
28
        //----- delete 2
29
        $date = new DateTime();
30
        $date = $date->sub(DateInterval::createFromDateString('2 years'));
31
        $query = $this->_em->createQuery(
32
            'DELETE projetNormandie\MessageBundle\Entity\Message m WHERE m.createdAt < :date'
33
        );
34
        $query->setParameter('date', $date->format('Y-m-d'));
35
        $query->execute();
36
    }
37
38
    /**
39
     * @param $user
40
     * @return mixed
41
     */
42
    public function getRecipients($user)
43
    {
44
        $query = $this->createQueryBuilder('m')
45
            ->join('m.recipient', 'u')
46
            ->select('DISTINCT u.id,u.username')
47
            ->where('m.sender = :user')
48
            ->setParameter('user', $user)
49
            ->andWhere('m.isDeletedSender = :isDeletedSender')
50
            ->setParameter('isDeletedSender', false)
51
            ->orderBy("u.username", 'ASC');
52
53
        return $query->getQuery()->getResult();
54
    }
55
56
    /**
57
     * @param $user
58
     * @return mixed
59
     */
60
    public function getSenders($user)
61
    {
62
        $query = $this->createQueryBuilder('m')
63
            ->join('m.sender', 'u')
64
            ->select('DISTINCT u.id,u.username')
65
            ->where('m.recipient = :user')
66
            ->setParameter('user', $user)
67
            ->andWhere('m.isDeletedRecipient = :isDeletedRecipient')
68
            ->setParameter('isDeletedRecipient', false)
69
            ->orderBy("u.username", 'ASC');
70
71
        return $query->getQuery()->getResult();
72
    }
73
74
    /**
75
     * @param $user
76
     * @return float|int
77
     * @throws NoResultException
78
     * @throws NonUniqueResultException
79
     */
80
    public function getNbNewMessage($user)
81
    {
82
        $qb = $this->createQueryBuilder('m')
83
             ->select('COUNT(m.id)')
84
             ->where('m.recipient = :recipient')
85
             ->andWhere('m.isOpened = :isOpened')
86
             ->andWhere('m.isDeletedRecipient = :isDeletedRecipient')
87
             ->setParameter('recipient', $user)
88
             ->setParameter('isOpened', false)
89
             ->setParameter('isDeletedRecipient', false);
90
91
        return (int) $qb->getQuery()->getSingleScalarResult();
92
    }
93
}
94