MessageQueuer::queueRequestMembershipEnd()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 7
CRAP Score 1

Importance

Changes 0
Metric Value
eloc 5
dl 0
loc 10
ccs 7
cts 7
cp 1
rs 10
c 0
b 0
f 0
cc 1
nc 1
nop 2
crap 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Application\Service;
6
7
use Application\DBAL\Types\MessageTypeType;
8
use Application\Model\Message;
9
use Application\Model\Order;
10
use Application\Model\User;
11
use Doctrine\ORM\EntityManager;
12
use Ecodev\Felix\Service\MessageRenderer;
13
14
/**
15
 * Service to queue new message for pre-defined purposes.
16
 */
17
class MessageQueuer
18
{
19 15
    public function __construct(private readonly EntityManager $entityManager, private readonly MessageRenderer $messageRenderer, private readonly array $config)
20
    {
21 15
    }
22
23 3
    public function queueRegister(User $user): Message
24
    {
25 3
        $subject = 'Demande de création de compte Les artisans de la transition';
26 3
        $mailParams = [
27 3
            'token' => $user->createToken(),
28 3
        ];
29
30 3
        $message = $this->createMessage($user, $user->getEmail(), $subject, MessageTypeType::REGISTER, $mailParams);
0 ignored issues
show
Bug introduced by
It seems like $user->getEmail() can also be of type null; however, parameter $email of Application\Service\MessageQueuer::createMessage() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

30
        $message = $this->createMessage($user, /** @scrutinizer ignore-type */ $user->getEmail(), $subject, MessageTypeType::REGISTER, $mailParams);
Loading history...
31
32 3
        return $message;
33
    }
34
35 1
    public function queueConfirmedRegistration(string $adminEmail, User $registeredUser): Message
36
    {
37 1
        $subject = 'Nouvel utilisateur';
38 1
        $mailParams = [
39 1
            'registeredUser' => $registeredUser,
40 1
        ];
41
42 1
        $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::CONFIRMED_REGISTRATION, $mailParams);
43
44 1
        return $message;
45
    }
46
47
    /**
48
     * Queue a reset password email to specified user.
49
     *
50
     * @param User $user The user for which a password reset will be done
51
     * @param string $email the address to send the email to. Might be different than the user's email
52
     */
53 2
    public function queueResetPassword(User $user, string $email): Message
54
    {
55 2
        $subject = 'Demande de modification de mot de passe';
56 2
        $mailParams = [
57 2
            'token' => $user->createToken(),
58 2
        ];
59
60 2
        $message = $this->createMessage($user, $email, $subject, MessageTypeType::RESET_PASSWORD, $mailParams);
61
62 2
        return $message;
63
    }
64
65 1
    public function queueUpdatedUser(string $adminEmail, User $updatedUser, array $before, array $after): Message
66
    {
67 1
        $subject = 'Un utilisateur a modifié ses données personnelles';
68 1
        $mailParams = [
69 1
            'updatedUser' => $updatedUser,
70 1
            'before' => $before,
71 1
            'after' => $after,
72 1
        ];
73
74 1
        $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::UPDATED_USER, $mailParams);
75
76 1
        return $message;
77
    }
78
79 5
    public function queueUserPendingOrder(User $user, Order $order): Message
80
    {
81 5
        $subject = 'Votre commande est en cours de traitement';
82 5
        $mailParams = [
83 5
            'order' => $order,
84 5
        ];
85
86 5
        $message = $this->createMessage($user, $user->getEmail(), $subject, MessageTypeType::USER_PENDING_ORDER, $mailParams);
0 ignored issues
show
Bug introduced by
It seems like $user->getEmail() can also be of type null; however, parameter $email of Application\Service\MessageQueuer::createMessage() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

86
        $message = $this->createMessage($user, /** @scrutinizer ignore-type */ $user->getEmail(), $subject, MessageTypeType::USER_PENDING_ORDER, $mailParams);
Loading history...
87
88 5
        return $message;
89
    }
90
91 2
    public function queueUserValidatedOrder(User $user, Order $order): Message
92
    {
93 2
        $subject = 'Votre commande a été validée';
94 2
        $mailParams = [
95 2
            'order' => $order,
96 2
        ];
97
98 2
        $message = $this->createMessage($user, $user->getEmail(), $subject, MessageTypeType::USER_VALIDATED_ORDER, $mailParams);
0 ignored issues
show
Bug introduced by
It seems like $user->getEmail() can also be of type null; however, parameter $email of Application\Service\MessageQueuer::createMessage() does only seem to accept string, maybe add an additional type check? ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-type  annotation

98
        $message = $this->createMessage($user, /** @scrutinizer ignore-type */ $user->getEmail(), $subject, MessageTypeType::USER_VALIDATED_ORDER, $mailParams);
Loading history...
99
100 2
        return $message;
101
    }
102
103 2
    public function queueAdminPendingOrder(string $adminEmail, Order $order): Message
104
    {
105 2
        $subject = 'Une commande a besoin d\'un BVR';
106 2
        $mailParams = [
107 2
            'order' => $order,
108 2
        ];
109
110 2
        $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::ADMIN_PENDING_ORDER, $mailParams);
111
112 2
        return $message;
113
    }
114
115 3
    public function queueAdminValidatedOrder(string $email, Order $order): Message
116
    {
117 3
        $subject = 'Commande à comptabiliser';
118 3
        $mailParams = [
119 3
            'order' => $order,
120 3
        ];
121
122 3
        $message = $this->createMessage(null, $email, $subject, MessageTypeType::ADMIN_VALIDATED_ORDER, $mailParams);
123
124 3
        return $message;
125
    }
126
127 1
    public function queueRequestMembershipEnd(string $adminEmail, User $member): Message
128
    {
129 1
        $subject = 'Demande d\'arrêt de cotisations';
130 1
        $mailParams = [
131 1
            'member' => $member,
132 1
        ];
133
134 1
        $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::REQUEST_MEMBERSHIP_END, $mailParams);
135
136 1
        return $message;
137
    }
138
139 1
    public function queueNewsletterSubscription(string $adminEmail, string $email): Message
140
    {
141 1
        $subject = 'Demande d\'inscription à la newsletter';
142 1
        $mailParams = [
143 1
            'newsletterEmail' => $email,
144 1
        ];
145
146 1
        $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::NEWSLETTER_SUBSCRIPTION, $mailParams);
147
148 1
        return $message;
149
    }
150
151
    /**
152
     * Get all admin emails to notify.
153
     */
154 9
    public function getAllEmailsToNotify(): array
155
    {
156 9
        return $this->config['email']['admins'];
157
    }
158
159
    /**
160
     * Create a message by rendering the template.
161
     */
162 20
    private function createMessage(?User $user, string $email, string $subject, string $type, array $mailParams): Message
163
    {
164 20
        $content = $this->messageRenderer->render($user, $email, $subject, $type, $mailParams);
165
166 20
        $message = new Message();
167 20
        $message->setType($type);
168 20
        $message->setRecipient($user);
169 20
        $message->setSubject($subject);
170 20
        $message->setBody($content);
171 20
        $message->setEmail($email);
172 20
        $this->entityManager->persist($message);
173
174 20
        return $message;
175
    }
176
}
177