Passed
Pull Request — develop (#12)
by BENARD
02:49
created

MessageRepository::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

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