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
![]() |
|||||
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
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
![]() |
|||||
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
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
![]() |
|||||
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 |