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( |
|||
20 | private readonly EntityManager $entityManager, |
||||
21 | private readonly MessageRenderer $messageRenderer, |
||||
22 | private readonly array $config, |
||||
23 | 15 | ) {} |
|||
24 | |||||
25 | 3 | public function queueRegister(User $user): Message |
|||
26 | { |
||||
27 | 3 | $subject = 'Demande de création de compte Les artisans de la transition'; |
|||
28 | 3 | $mailParams = [ |
|||
29 | 3 | 'token' => $user->createToken(), |
|||
30 | 3 | ]; |
|||
31 | |||||
32 | 3 | $message = $this->createMessage($user, $user->getEmail(), $subject, MessageTypeType::REGISTER, $mailParams); |
|||
0 ignored issues
–
show
Bug
introduced
by
![]() |
|||||
33 | |||||
34 | 3 | return $message; |
|||
35 | } |
||||
36 | |||||
37 | 1 | public function queueConfirmedRegistration(string $adminEmail, User $registeredUser): Message |
|||
38 | { |
||||
39 | 1 | $subject = 'Nouvel utilisateur'; |
|||
40 | 1 | $mailParams = [ |
|||
41 | 1 | 'registeredUser' => $registeredUser, |
|||
42 | 1 | ]; |
|||
43 | |||||
44 | 1 | $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::CONFIRMED_REGISTRATION, $mailParams); |
|||
45 | |||||
46 | 1 | return $message; |
|||
47 | } |
||||
48 | |||||
49 | /** |
||||
50 | * Queue a reset password email to specified user. |
||||
51 | * |
||||
52 | * @param User $user The user for which a password reset will be done |
||||
53 | * @param string $email the address to send the email to. Might be different than the user's email |
||||
54 | */ |
||||
55 | 2 | public function queueResetPassword(User $user, string $email): Message |
|||
56 | { |
||||
57 | 2 | $subject = 'Demande de modification de mot de passe'; |
|||
58 | 2 | $mailParams = [ |
|||
59 | 2 | 'token' => $user->createToken(), |
|||
60 | 2 | ]; |
|||
61 | |||||
62 | 2 | $message = $this->createMessage($user, $email, $subject, MessageTypeType::RESET_PASSWORD, $mailParams); |
|||
63 | |||||
64 | 2 | return $message; |
|||
65 | } |
||||
66 | |||||
67 | 1 | public function queueUpdatedUser(string $adminEmail, User $updatedUser, array $before, array $after): Message |
|||
68 | { |
||||
69 | 1 | $subject = 'Un utilisateur a modifié ses données personnelles'; |
|||
70 | 1 | $mailParams = [ |
|||
71 | 1 | 'updatedUser' => $updatedUser, |
|||
72 | 1 | 'before' => $before, |
|||
73 | 1 | 'after' => $after, |
|||
74 | 1 | ]; |
|||
75 | |||||
76 | 1 | $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::UPDATED_USER, $mailParams); |
|||
77 | |||||
78 | 1 | return $message; |
|||
79 | } |
||||
80 | |||||
81 | 5 | public function queueUserPendingOrder(User $user, Order $order): Message |
|||
82 | { |
||||
83 | 5 | $subject = 'Votre commande est en cours de traitement'; |
|||
84 | 5 | $mailParams = [ |
|||
85 | 5 | 'order' => $order, |
|||
86 | 5 | ]; |
|||
87 | |||||
88 | 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
![]() |
|||||
89 | |||||
90 | 5 | return $message; |
|||
91 | } |
||||
92 | |||||
93 | 2 | public function queueUserValidatedOrder(User $user, Order $order): Message |
|||
94 | { |
||||
95 | 2 | $subject = 'Votre commande a été validée'; |
|||
96 | 2 | $mailParams = [ |
|||
97 | 2 | 'order' => $order, |
|||
98 | 2 | ]; |
|||
99 | |||||
100 | 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
![]() |
|||||
101 | |||||
102 | 2 | return $message; |
|||
103 | } |
||||
104 | |||||
105 | 2 | public function queueAdminPendingOrder(string $adminEmail, Order $order): Message |
|||
106 | { |
||||
107 | 2 | $subject = 'Une commande a besoin d\'un BVR'; |
|||
108 | 2 | $mailParams = [ |
|||
109 | 2 | 'order' => $order, |
|||
110 | 2 | ]; |
|||
111 | |||||
112 | 2 | $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::ADMIN_PENDING_ORDER, $mailParams); |
|||
113 | |||||
114 | 2 | return $message; |
|||
115 | } |
||||
116 | |||||
117 | 3 | public function queueAdminValidatedOrder(string $email, Order $order): Message |
|||
118 | { |
||||
119 | 3 | $subject = 'Commande à comptabiliser'; |
|||
120 | 3 | $mailParams = [ |
|||
121 | 3 | 'order' => $order, |
|||
122 | 3 | ]; |
|||
123 | |||||
124 | 3 | $message = $this->createMessage(null, $email, $subject, MessageTypeType::ADMIN_VALIDATED_ORDER, $mailParams); |
|||
125 | |||||
126 | 3 | return $message; |
|||
127 | } |
||||
128 | |||||
129 | 1 | public function queueRequestMembershipEnd(string $adminEmail, User $member): Message |
|||
130 | { |
||||
131 | 1 | $subject = 'Demande d\'arrêt de cotisations'; |
|||
132 | 1 | $mailParams = [ |
|||
133 | 1 | 'member' => $member, |
|||
134 | 1 | ]; |
|||
135 | |||||
136 | 1 | $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::REQUEST_MEMBERSHIP_END, $mailParams); |
|||
137 | |||||
138 | 1 | return $message; |
|||
139 | } |
||||
140 | |||||
141 | 1 | public function queueNewsletterSubscription(string $adminEmail, string $email): Message |
|||
142 | { |
||||
143 | 1 | $subject = 'Demande d\'inscription à la newsletter'; |
|||
144 | 1 | $mailParams = [ |
|||
145 | 1 | 'newsletterEmail' => $email, |
|||
146 | 1 | ]; |
|||
147 | |||||
148 | 1 | $message = $this->createMessage(null, $adminEmail, $subject, MessageTypeType::NEWSLETTER_SUBSCRIPTION, $mailParams); |
|||
149 | |||||
150 | 1 | return $message; |
|||
151 | } |
||||
152 | |||||
153 | /** |
||||
154 | * Get all admin emails to notify. |
||||
155 | */ |
||||
156 | 9 | public function getAllEmailsToNotify(): array |
|||
157 | { |
||||
158 | 9 | return $this->config['email']['admins']; |
|||
159 | } |
||||
160 | |||||
161 | /** |
||||
162 | * Create a message by rendering the template. |
||||
163 | */ |
||||
164 | 20 | private function createMessage(?User $user, string $email, string $subject, string $type, array $mailParams): Message |
|||
165 | { |
||||
166 | 20 | $content = $this->messageRenderer->render($user, $email, $subject, $type, $mailParams); |
|||
167 | |||||
168 | 20 | $message = new Message(); |
|||
169 | 20 | $message->setType($type); |
|||
170 | 20 | $message->setRecipient($user); |
|||
171 | 20 | $message->setSubject($subject); |
|||
172 | 20 | $message->setBody($content); |
|||
173 | 20 | $message->setEmail($email); |
|||
174 | 20 | $this->entityManager->persist($message); |
|||
175 | |||||
176 | 20 | return $message; |
|||
177 | } |
||||
178 | } |
||||
179 |