✨(back) add invitation email templates
Add HTML and text email templates for calendar invitations, updates, cancellations and attendee reply notifications. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
145
src/backend/core/templates/emails/calendar_invitation.html
Normal file
145
src/backend/core/templates/emails/calendar_invitation.html
Normal file
@@ -0,0 +1,145 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Invitation à un événement</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #333;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
border-bottom: 2px solid #0066cc;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.header h1 {
|
||||||
|
color: #0066cc;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
.event-title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
margin: 15px 0;
|
||||||
|
}
|
||||||
|
.event-details {
|
||||||
|
background-color: #f8f9fa;
|
||||||
|
border-left: 4px solid #0066cc;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.event-details table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
.event-details td {
|
||||||
|
padding: 8px 0;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
.event-details td:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
.event-details td:last-child {
|
||||||
|
color: #333;
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.description h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.instructions {
|
||||||
|
background-color: #e7f3ff;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.instructions p {
|
||||||
|
margin: 0;
|
||||||
|
color: #0066cc;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
padding-top: 15px;
|
||||||
|
margin-top: 20px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.icon {
|
||||||
|
vertical-align: middle;
|
||||||
|
margin-right: 8px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="header">
|
||||||
|
<h1>Invitation à un événement</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>{{ organizer_display }} vous invite à un événement</p>
|
||||||
|
|
||||||
|
<div class="event-title">{{ event.summary }}</div>
|
||||||
|
|
||||||
|
<div class="event-details">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Quand</td>
|
||||||
|
<td>
|
||||||
|
{{ start_date }}<br>
|
||||||
|
<strong>{{ time_str }}</strong>
|
||||||
|
{% if start_date != end_date %}<br>jusqu'au {{ end_date }}{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% if event.location %}
|
||||||
|
<tr>
|
||||||
|
<td>Lieu</td>
|
||||||
|
<td>{{ event.location }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
<tr>
|
||||||
|
<td>Organisateur</td>
|
||||||
|
<td>{{ organizer_display }} <{{ event.organizer_email }}></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if event.description %}
|
||||||
|
<div class="description">
|
||||||
|
<h3>Description</h3>
|
||||||
|
<p>{{ event.description|linebreaks }}</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="instructions">
|
||||||
|
<p>Pour répondre à cette invitation, veuillez ouvrir le fichier .ics en pièce jointe avec votre application de calendrier ou répondre directement depuis votre client de messagerie.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<p>Cette invitation a été envoyée via {{ app_name }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
19
src/backend/core/templates/emails/calendar_invitation.txt
Normal file
19
src/backend/core/templates/emails/calendar_invitation.txt
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
{{ organizer_display }} vous invite à un événement
|
||||||
|
|
||||||
|
Détails de l'événement
|
||||||
|
======================
|
||||||
|
|
||||||
|
Titre : {{ event.summary }}
|
||||||
|
Quand : {{ start_date }} {{ time_str }}{% if start_date != end_date %} - {{ end_date }}{% endif %}
|
||||||
|
{% if event.location %}Lieu : {{ event.location }}
|
||||||
|
{% endif %}Organisateur : {{ organizer_display }} <{{ event.organizer_email }}>
|
||||||
|
|
||||||
|
{% if event.description %}
|
||||||
|
Description :
|
||||||
|
{{ event.description }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
Pour répondre à cette invitation, veuillez ouvrir le fichier .ics en pièce jointe avec votre application de calendrier ou répondre directement depuis votre client de messagerie.
|
||||||
|
|
||||||
|
---
|
||||||
|
Cette invitation a été envoyée via {{ app_name }}
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Événement annulé</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #333;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
border-bottom: 2px solid #dc3545;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.header h1 {
|
||||||
|
color: #dc3545;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
.cancel-badge {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #dc3545;
|
||||||
|
color: white;
|
||||||
|
padding: 4px 12px;
|
||||||
|
border-radius: 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.event-title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #999;
|
||||||
|
margin: 15px 0;
|
||||||
|
text-decoration: line-through;
|
||||||
|
}
|
||||||
|
.event-details {
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border-left: 4px solid #dc3545;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.event-details table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
.event-details td {
|
||||||
|
padding: 8px 0;
|
||||||
|
vertical-align: top;
|
||||||
|
color: #721c24;
|
||||||
|
}
|
||||||
|
.event-details td:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
width: 150px;
|
||||||
|
}
|
||||||
|
.instructions {
|
||||||
|
background-color: #f8d7da;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.instructions p {
|
||||||
|
margin: 0;
|
||||||
|
color: #721c24;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
padding-top: 15px;
|
||||||
|
margin-top: 20px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="header">
|
||||||
|
<h1>Événement annulé</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="cancel-badge">ANNULÉ</span>
|
||||||
|
|
||||||
|
<p>{{ organizer_display }} a annulé l'événement suivant</p>
|
||||||
|
|
||||||
|
<div class="event-title">{{ event.summary }}</div>
|
||||||
|
|
||||||
|
<div class="event-details">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Était prévu le</td>
|
||||||
|
<td>
|
||||||
|
{{ start_date }}<br>
|
||||||
|
<strong>{{ time_str }}</strong>
|
||||||
|
{% if start_date != end_date %}<br>jusqu'au {{ end_date }}{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% if event.location %}
|
||||||
|
<tr>
|
||||||
|
<td>Lieu</td>
|
||||||
|
<td>{{ event.location }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
<tr>
|
||||||
|
<td>Organisateur</td>
|
||||||
|
<td>{{ organizer_display }} <{{ event.organizer_email }}></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="instructions">
|
||||||
|
<p>Cet événement a été annulé. Ouvrez le fichier .ics en pièce jointe pour le supprimer de votre calendrier.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<p>Cette notification a été envoyée via {{ app_name }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{{ organizer_display }} a annulé l'événement : {{ event.summary }}
|
||||||
|
|
||||||
|
Détails de l'événement annulé
|
||||||
|
=============================
|
||||||
|
|
||||||
|
Titre : {{ event.summary }}
|
||||||
|
Était prévu le : {{ start_date }} {{ time_str }}{% if start_date != end_date %} - {{ end_date }}{% endif %}
|
||||||
|
{% if event.location %}Lieu : {{ event.location }}
|
||||||
|
{% endif %}Organisateur : {{ organizer_display }} <{{ event.organizer_email }}>
|
||||||
|
|
||||||
|
Cet événement a été annulé. Vous pouvez le supprimer de votre calendrier en ouvrant le fichier .ics en pièce jointe.
|
||||||
|
|
||||||
|
---
|
||||||
|
Cette notification a été envoyée via {{ app_name }}
|
||||||
120
src/backend/core/templates/emails/calendar_invitation_reply.html
Normal file
120
src/backend/core/templates/emails/calendar_invitation_reply.html
Normal file
@@ -0,0 +1,120 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Réponse à l'événement</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #333;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
border-bottom: 2px solid #28a745;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.header h1 {
|
||||||
|
color: #28a745;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
.event-title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
margin: 15px 0;
|
||||||
|
}
|
||||||
|
.event-details {
|
||||||
|
background-color: #d4edda;
|
||||||
|
border-left: 4px solid #28a745;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.event-details table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
.event-details td {
|
||||||
|
padding: 8px 0;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
.event-details td:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
.instructions {
|
||||||
|
background-color: #d4edda;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.instructions p {
|
||||||
|
margin: 0;
|
||||||
|
color: #155724;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
padding-top: 15px;
|
||||||
|
margin-top: 20px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="header">
|
||||||
|
<h1>Réponse reçue</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<p>{{ attendee_display }} a répondu à votre événement</p>
|
||||||
|
|
||||||
|
<div class="event-title">{{ event.summary }}</div>
|
||||||
|
|
||||||
|
<div class="event-details">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Quand</td>
|
||||||
|
<td>
|
||||||
|
{{ start_date }}<br>
|
||||||
|
<strong>{{ time_str }}</strong>
|
||||||
|
{% if start_date != end_date %}<br>jusqu'au {{ end_date }}{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% if event.location %}
|
||||||
|
<tr>
|
||||||
|
<td>Lieu</td>
|
||||||
|
<td>{{ event.location }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
<tr>
|
||||||
|
<td>Participant</td>
|
||||||
|
<td>{{ attendee_display }} <{{ event.attendee_email }}></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="instructions">
|
||||||
|
<p>La réponse du participant a été enregistrée. Ouvrez le fichier .ics en pièce jointe pour mettre à jour votre calendrier.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<p>Cette notification a été envoyée via {{ app_name }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
{{ attendee_display }} a répondu à votre événement : {{ event.summary }}
|
||||||
|
|
||||||
|
Détails de l'événement
|
||||||
|
======================
|
||||||
|
|
||||||
|
Titre : {{ event.summary }}
|
||||||
|
Quand : {{ start_date }} {{ time_str }}{% if start_date != end_date %} - {{ end_date }}{% endif %}
|
||||||
|
{% if event.location %}Lieu : {{ event.location }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
La réponse du participant a été enregistrée dans le fichier .ics en pièce jointe.
|
||||||
|
|
||||||
|
---
|
||||||
|
Cette notification a été envoyée via {{ app_name }}
|
||||||
@@ -0,0 +1,150 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="fr">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Événement modifié</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;
|
||||||
|
line-height: 1.6;
|
||||||
|
color: #333;
|
||||||
|
max-width: 600px;
|
||||||
|
margin: 0 auto;
|
||||||
|
padding: 20px;
|
||||||
|
background-color: #f5f5f5;
|
||||||
|
}
|
||||||
|
.container {
|
||||||
|
background-color: #ffffff;
|
||||||
|
border-radius: 8px;
|
||||||
|
padding: 30px;
|
||||||
|
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
|
||||||
|
}
|
||||||
|
.header {
|
||||||
|
border-bottom: 2px solid #ff9800;
|
||||||
|
padding-bottom: 15px;
|
||||||
|
margin-bottom: 20px;
|
||||||
|
}
|
||||||
|
.header h1 {
|
||||||
|
color: #ff9800;
|
||||||
|
margin: 0;
|
||||||
|
font-size: 24px;
|
||||||
|
}
|
||||||
|
.update-badge {
|
||||||
|
display: inline-block;
|
||||||
|
background-color: #ff9800;
|
||||||
|
color: white;
|
||||||
|
padding: 4px 12px;
|
||||||
|
border-radius: 12px;
|
||||||
|
font-size: 12px;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
.event-title {
|
||||||
|
font-size: 20px;
|
||||||
|
font-weight: bold;
|
||||||
|
color: #333;
|
||||||
|
margin: 15px 0;
|
||||||
|
}
|
||||||
|
.event-details {
|
||||||
|
background-color: #fff8e1;
|
||||||
|
border-left: 4px solid #ff9800;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.event-details table {
|
||||||
|
width: 100%;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
.event-details td {
|
||||||
|
padding: 8px 0;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
.event-details td:first-child {
|
||||||
|
font-weight: bold;
|
||||||
|
color: #666;
|
||||||
|
width: 120px;
|
||||||
|
}
|
||||||
|
.description {
|
||||||
|
background-color: #fff;
|
||||||
|
border: 1px solid #eee;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
border-radius: 4px;
|
||||||
|
}
|
||||||
|
.description h3 {
|
||||||
|
margin-top: 0;
|
||||||
|
color: #666;
|
||||||
|
}
|
||||||
|
.instructions {
|
||||||
|
background-color: #fff8e1;
|
||||||
|
border-radius: 4px;
|
||||||
|
padding: 15px;
|
||||||
|
margin: 20px 0;
|
||||||
|
}
|
||||||
|
.instructions p {
|
||||||
|
margin: 0;
|
||||||
|
color: #e65100;
|
||||||
|
}
|
||||||
|
.footer {
|
||||||
|
border-top: 1px solid #eee;
|
||||||
|
padding-top: 15px;
|
||||||
|
margin-top: 20px;
|
||||||
|
font-size: 12px;
|
||||||
|
color: #999;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="container">
|
||||||
|
<div class="header">
|
||||||
|
<h1>Événement modifié</h1>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<span class="update-badge">MODIFIÉ</span>
|
||||||
|
|
||||||
|
<p>{{ organizer_display }} a modifié un événement auquel vous êtes invité(e)</p>
|
||||||
|
|
||||||
|
<div class="event-title">{{ event.summary }}</div>
|
||||||
|
|
||||||
|
<div class="event-details">
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<td>Quand</td>
|
||||||
|
<td>
|
||||||
|
{{ start_date }}<br>
|
||||||
|
<strong>{{ time_str }}</strong>
|
||||||
|
{% if start_date != end_date %}<br>jusqu'au {{ end_date }}{% endif %}
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{% if event.location %}
|
||||||
|
<tr>
|
||||||
|
<td>Lieu</td>
|
||||||
|
<td>{{ event.location }}</td>
|
||||||
|
</tr>
|
||||||
|
{% endif %}
|
||||||
|
<tr>
|
||||||
|
<td>Organisateur</td>
|
||||||
|
<td>{{ organizer_display }} <{{ event.organizer_email }}></td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% if event.description %}
|
||||||
|
<div class="description">
|
||||||
|
<h3>Description</h3>
|
||||||
|
<p>{{ event.description|linebreaks }}</p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
<div class="instructions">
|
||||||
|
<p>Cet événement a été modifié. Veuillez ouvrir le fichier .ics en pièce jointe pour mettre à jour votre calendrier.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="footer">
|
||||||
|
<p>Cette notification a été envoyée via {{ app_name }}</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
{{ organizer_display }} a modifié l'événement
|
||||||
|
|
||||||
|
Détails de l'événement mis à jour
|
||||||
|
=================================
|
||||||
|
|
||||||
|
Titre : {{ event.summary }}
|
||||||
|
Quand : {{ start_date }} {{ time_str }}{% if start_date != end_date %} - {{ end_date }}{% endif %}
|
||||||
|
{% if event.location %}Lieu : {{ event.location }}
|
||||||
|
{% endif %}Organisateur : {{ organizer_display }} <{{ event.organizer_email }}>
|
||||||
|
|
||||||
|
{% if event.description %}
|
||||||
|
Description :
|
||||||
|
{{ event.description }}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
Cet événement a été modifié. Veuillez vérifier les changements et mettre à jour votre calendrier en conséquence.
|
||||||
|
|
||||||
|
---
|
||||||
|
Cette notification a été envoyée via {{ app_name }}
|
||||||
Reference in New Issue
Block a user