Files
akademiawodociagowca/backend/src/main/resources/templates/mail/registration-confirmation.html
T
debian 1dadc6f6c4
Deploy PROD / deploy (push) Successful in 20s
Link do sali w mailu i na stronie zgloszenia
Uczestnik przy dostawcy z wlasnymi pokojami (LiveKit, Jitsi, Daily, Zoom)
nie mial ZADNEJ drogi na sale:

- mail potwierdzajacy prowadzil na /w/{slug}, czyli formularz zapisu,
- strona zgloszenia renderowala przycisk "Dolacz do spotkania" wylacznie
  gdy `webinars.join_url` nie bylo puste, a przy LiveKit pokoj jest
  wewnetrzny i to pole zostaje NULL,
- mail obiecywal przy tym wprost "link do spotkania znajdziesz na stronie
  swojego zgloszenia".

Adres sklada teraz `VideoProviderFactory.meetingUrlFor`, bo tylko backend
zna token zapisu. Tryb NONE oddaje `join_url` wklejony przez organizatora,
kazdy inny dostawca wlasna trase /spotkanie/{token}. Ta sama wartosc zasila
widok zgloszenia i szablony maili, wiec nie ma dwoch miejsc do poprawiania.

Szablon potwierdzenia dostaje przycisk wejscia jako pierwszy, nad odnosnikiem
do strony webinaru, oraz zdanie o tym, ze sala otwiera sie przed startem:
bez niego uczestnik klikajacy tydzien wczesniej widzi odliczanie i nie wie,
czy tak ma byc. Szablon przypomnienia mial obsluge `joinUrl` od poczatku,
wiec naprawia sie sam.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-04 07:53:09 +02:00

142 lines
7.3 KiB
HTML

<!doctype html>
<html xmlns:th="http://www.thymeleaf.org" lang="pl">
<head>
<meta charset="UTF-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
<title th:text="${webinarTitle}">Potwierdzenie zapisu</title>
</head>
<!--
Uklad tabelami i style w atrybutach, bo klienci pocztowi nie obsluguja
arkuszy zewnetrznych ani wiekszosci nowoczesnego CSS.
Tresc jest widoczna dla uczestnika, wiec pisana z polskimi znakami.
-->
<body style="margin:0; padding:0; background-color:#f1f5f9; font-family:'Segoe UI',Tahoma,Arial,sans-serif; color:#0f172a;">
<!-- podglad w skrzynce odbiorczej, niewidoczny w tresci wiadomosci -->
<div style="display:none; max-height:0; overflow:hidden; opacity:0;">
Potwierdzamy zapis na webinar. W załączniku znajdziesz zaproszenie do kalendarza.
</div>
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0"
style="background-color:#f1f5f9; padding:24px 12px;">
<tr>
<td align="center">
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0"
style="max-width:560px; background-color:#ffffff; border-radius:12px; overflow:hidden;">
<!-- pasek marki -->
<tr>
<td style="background-color:#1d4ed8; padding:16px 32px;">
<span style="color:#ffffff; font-size:15px; font-weight:600;"
th:text="${brandName}">Marka</span>
</td>
</tr>
<tr>
<td style="padding:32px;">
<h1 style="margin:0 0 20px; font-size:24px; line-height:1.3; font-weight:700; color:#0f172a;">
Potwierdzenie zapisu
</h1>
<p style="margin:0 0 12px; font-size:16px; line-height:1.6; color:#334155;">
Dzień dobry <span th:text="${firstName}">Imię</span>,
</p>
<p style="margin:0 0 24px; font-size:16px; line-height:1.6; color:#334155;">
potwierdzamy Twój zapis na webinar
<strong style="color:#0f172a;" th:text="${webinarTitle}">Tytuł webinaru</strong>.
</p>
<!-- termin -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0"
style="background-color:#f8fafc; border-left:3px solid #1d4ed8; border-radius:6px; margin-bottom:28px;">
<tr>
<td style="padding:16px 20px;">
<p style="margin:0 0 4px; font-size:12px; font-weight:600; letter-spacing:0.06em; color:#64748b;">
TERMIN
</p>
<p style="margin:0; font-size:17px; font-weight:600; color:#0f172a;"
th:text="${startsAt}">termin</p>
<p style="margin:4px 0 0; font-size:14px; color:#64748b;">
strefa czasowa <span th:text="${timezone}">Europe/Warsaw</span>
</p>
</td>
</tr>
</table>
<!--
Link do sali. Pierwszy, bo to po niego uczestnik wraca do tej
wiadomosci w dniu szkolenia. Przycisk w tabeli, bo Outlook
ignoruje marginesy na znaczniku a.
-->
<table th:if="${joinUrl}" role="presentation" cellpadding="0" cellspacing="0" border="0"
style="margin:0 0 12px;">
<tr>
<td style="background-color:#1d4ed8; border-radius:8px;">
<a th:href="${joinUrl}"
style="display:inline-block; padding:14px 28px; font-size:16px; font-weight:600; color:#ffffff; text-decoration:none;">
Dołącz do spotkania
</a>
</td>
</tr>
</table>
<!--
Sala otwiera sie dopiero przed startem. Bez tego zdania uczestnik
klikajacy tydzien wczesniej widzi odliczanie i nie wie, czy to
tak ma byc, czy cos jest zepsute.
-->
<p th:if="${joinUrl}"
style="margin:0 0 28px; font-size:14px; line-height:1.6; color:#64748b;">
Spotkanie otworzy się na krótko przed rozpoczęciem. Jeśli otworzysz
link wcześniej, zobaczysz odliczanie do startu.
</p>
<!-- przycisk w tabeli, bo Outlook ignoruje marginesy na znaczniku a -->
<table role="presentation" cellpadding="0" cellspacing="0" border="0" style="margin:0 0 28px;">
<tr>
<td style="background-color:#ffffff; border:1px solid #cbd5e1; border-radius:8px;">
<a th:href="${webinarUrl}"
style="display:inline-block; padding:13px 27px; font-size:16px; font-weight:600; color:#1d4ed8; text-decoration:none;">
Otwórz stronę webinaru
</a>
</td>
</tr>
</table>
<!-- zalacznik kalendarza -->
<table role="presentation" width="100%" cellpadding="0" cellspacing="0" border="0"
style="background-color:#eff6ff; border-radius:8px;">
<tr>
<td style="padding:14px 18px; font-size:14px; line-height:1.6; color:#1e40af;">
Do wiadomości dołączyliśmy plik <strong>invite.ics</strong>.
Otwórz go, aby dodać wydarzenie do swojego kalendarza.
</td>
</tr>
</table>
</td>
</tr>
<!-- stopka -->
<tr>
<td style="border-top:1px solid #e2e8f0; padding:20px 32px; background-color:#f8fafc;">
<p style="margin:0; font-size:13px; line-height:1.6; color:#64748b;">
Swój zapis, link do spotkania i rezygnację znajdziesz na
<a th:href="${cancelUrl}" style="color:#1d4ed8;">stronie swojego zgłoszenia</a>.
</p>
</td>
</tr>
</table>
<p style="max-width:560px; margin:16px auto 0; font-size:12px; color:#94a3b8; text-align:center;">
Wiadomość wysłana automatycznie przez <span th:text="${brandName}">markę</span>.
</p>
</td>
</tr>
</table>
</body>
</html>