1111use App \Repositories \WidgetRepository ;
1212use App \Services \ApiWrapper ;
1313use Exception ;
14+ use MailchimpTransactional \ApiClient ;
1415use Psr \Http \Message \ResponseInterface as Response ;
1516use Psr \Http \Message \ServerRequestInterface as Request ;
1617use Slim \Flash \Messages ;
@@ -30,6 +31,7 @@ public function __construct(
3031 private ApiWrapper $ apiWrapper ,
3132 private AccessTokenRepository $ accessTokenRepository ,
3233 private AuthorizationCodeRepository $ authorizationCodeRepository ,
34+ private ApiClient $ mailchimp ,
3335 ) {}
3436
3537 /**
@@ -102,11 +104,54 @@ public function newUser(Request $request, Response $response): Response
102104 return $ this ->redirectToRoute ($ request , $ response , 'app_admin_index ' );
103105 }
104106
105- $ this ->userRepository ->insert ($ email );
106- $ this ->messages ->addMessage ('success ' , 'Utilisateur créé : ' . $ email );
107+ $ user = $ this ->userRepository ->insert ($ email );
108+ $ user = $ this ->userRepository ->insertResetToken ($ user );
109+
110+ $ routeParser = RouteContext::fromRequest ($ request )->getRouteParser ();
111+ $ resetUrl = $ _SERVER ['WEBSITE_DOMAIN ' ] . $ routeParser ->urlFor ('app_reset_password ' , ["token " => $ user ->reset_token ]);
112+
113+ $ this ->mailchimp ->messages ->send ([
114+ "message " => [
115+ "from_email " => "contact@helloasso.io " ,
116+ "from_name " => "HelloAsso " ,
117+ "subject " => "Bienvenue sur HelloAsso Stream ! " ,
118+ "html " => $ this ->buildWelcomeEmail ($ resetUrl ),
119+ "to " => [["email " => $ user ->email ]],
120+ ],
121+ ]);
122+
123+ $ this ->messages ->addMessage ('success ' , 'Utilisateur créé : ' . $ email . ' — un email de bienvenue a été envoyé. ' );
107124 return $ this ->redirectToRoute ($ request , $ response , 'app_admin_index ' );
108125 }
109126
127+ /**
128+ * Génère le contenu HTML de l'email de bienvenue envoyé aux nouveaux utilisateurs.
129+ */
130+ private function buildWelcomeEmail (string $ resetUrl ): string
131+ {
132+ return <<<HTML
133+ <div style="font-family: Arial, sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; color: #333;">
134+ <h1 style="color: #2C88D9;">Bienvenue sur HelloAsso Stream ! 🎉</h1>
135+ <p>Bonjour,</p>
136+ <p>Un compte vient d'être créé pour vous sur <strong>HelloAsso Stream</strong>, l'outil qui vous permet de suivre vos collectes en temps réel.</p>
137+ <p>Pour commencer, définissez votre mot de passe en cliquant sur le bouton ci-dessous :</p>
138+ <p style="text-align: center; margin: 30px 0;">
139+ <a href=" {$ resetUrl }" style="background-color: #2C88D9; color: #fff; padding: 12px 24px; text-decoration: none; border-radius: 6px; font-weight: bold;">Définir mon mot de passe</a>
140+ </p>
141+ <p style="font-size: 12px; color: #888;">Ou copiez ce lien dans votre navigateur : {$ resetUrl }</p>
142+ <hr style="border: none; border-top: 1px solid #eee; margin: 30px 0;" />
143+ <h2 style="color: #2C88D9;">Que pourrez-vous faire une fois connecté ?</h2>
144+ <h3>📊 Créer un Stream</h3>
145+ <p>Un <strong>stream</strong> vous permet d'avoir un <strong>compteur en temps réel</strong> lié à un formulaire de don HelloAsso. Idéal pour afficher la progression d'une collecte lors d'un live ou sur votre site.</p>
146+ <h3>🎯 Créer un Évènement</h3>
147+ <p>Un <strong>évènement</strong> vous permet d'avoir un <strong>compteur en temps réel</strong> qui agrège <strong>plusieurs streams</strong> (et donc plusieurs formulaires de don). Parfait pour suivre une campagne de collecte globale composée de plusieurs initiatives.</p>
148+ <hr style="border: none; border-top: 1px solid #eee; margin: 30px 0;" />
149+ <p>À très vite sur la plateforme ! 🚀</p>
150+ <p>L'équipe HelloAsso</p>
151+ </div>
152+ HTML ;
153+ }
154+
110155 public function newEvent (Request $ request , Response $ response ): Response
111156 {
112157 $ user = $ request ->getAttribute ('user ' );
0 commit comments