Issues (46)

server/Application/Service/MessageQueuer.php (3 issues)

Labels
Severity
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
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

32
        $message = $this->createMessage($user, /** @scrutinizer ignore-type */ $user->getEmail(), $subject, MessageTypeType::REGISTER, $mailParams);
Loading history...
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 ignore-type  annotation

88
        $message = $this->createMessage($user, /** @scrutinizer ignore-type */ $user->getEmail(), $subject, MessageTypeType::USER_PENDING_ORDER, $mailParams);
Loading history...
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 ignore-type  annotation

100
        $message = $this->createMessage($user, /** @scrutinizer ignore-type */ $user->getEmail(), $subject, MessageTypeType::USER_VALIDATED_ORDER, $mailParams);
Loading history...
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