diff --git a/server/src/emailTemplate.js b/server/src/emailTemplate.js
index 46814ff..21e4d13 100644
--- a/server/src/emailTemplate.js
+++ b/server/src/emailTemplate.js
@@ -10,8 +10,38 @@ function esc(v) {
.replace(/"/g, '"');
}
-export function buildInvitationEmail({ rencontre, baseUrl }) {
+// Multi-line text zones (intro, outro, signature) keep their line breaks.
+function escML(v) {
+ return esc(v).replace(/\r?\n/g, '
');
+}
+
+// Default wording of each editable zone. The admin can rewrite any of
+// them in the composer; clearing a field removes the block entirely.
+export function defaultEmailTexts() {
+ return {
+ greeting: 'Chère membre, cher membre,',
+ intro:
+ "Nous avons le plaisir de vous convier à notre prochaine rencontre du Business Club. "
+ + "Networking, échanges et convivialité : nous vous attendons nombreux, dans l'esprit "
+ + "d'équipe qui fait la force du Club.",
+ outro:
+ "Les places sont limitées — pensez à vous inscrire dès maintenant. N'hésitez pas à "
+ + "transférer cette invitation à un dirigeant de votre réseau qui souhaiterait découvrir le Club.",
+ signature: "À très bientôt,\nL'équipe du Business Club SLUC Nancy",
+ };
+}
+
+export function buildInvitationEmail({ rencontre, baseUrl, texts = {} }) {
const r = rencontre;
+ const defaults = defaultEmailTexts();
+ // undefined -> default wording; '' (cleared by the admin) -> block hidden
+ const t = {
+ greeting: texts.greeting ?? defaults.greeting,
+ intro: texts.intro ?? defaults.intro,
+ outro: texts.outro ?? defaults.outro,
+ signature: texts.signature ?? defaults.signature,
+ };
+
const dateStr = new Date(r.date_renc).toLocaleDateString('fr-FR', {
weekday: 'long',
day: 'numeric',
@@ -25,9 +55,16 @@ export function buildInvitationEmail({ rencontre, baseUrl }) {
const infoLines = [
`${esc(dateStr.charAt(0).toUpperCase() + dateStr.slice(1))}`,
- [r.heure && esc(r.heure), esc(r.lieu)].filter(Boolean).join(' — '),
- restantes > 0 ? `${restantes} place${restantes > 1 ? 's' : ''} restante${restantes > 1 ? 's' : ''}` : 'Complet — liste d’attente',
- ];
+ [r.heure && esc(r.heure), esc(r.lieu)].filter(Boolean).join(' — '),
+ restantes > 0
+ ? `${restantes} place${restantes > 1 ? 's' : ''} restante${restantes > 1 ? 's' : ''}`
+ : 'Complet — liste d’attente',
+ ].filter(Boolean);
+
+ const para = (text, extra = '') =>
+ text
+ ? `
| - |