Ajoute un lien vers le mur depuis la page upload + corrige la mention RGPD

Lien "Voir le mur" dans l'en-tête (permanent) et sur l'écran de succès,
demandé par Kévin. href posé dès que le slug est connu, sans attendre la
réponse de get_public_event.

Corrige un oubli réel : la mention RGPD disait encore "mise à disposition
de l'organisateur" alors que la décision du 2026-09-18 (galerie invité
visible par tous) avait été consignée dans docs/decisions.md sans que le
texte affiché aux invités soit réellement mis à jour. Corrigé dans
docs/rgpd.md et dans la modale de bienvenue réelle.
This commit is contained in:
2026-09-18 09:33:44 +02:00
parent ea3e49cc04
commit c714316974
4 changed files with 75 additions and 16 deletions
+13 -6
View File
@@ -11,12 +11,13 @@ Texte à afficher, de façon visible, sur la page d'upload avant que l'invité
ne dépose une photo : ne dépose une photo :
> En déposant une photo, vous acceptez qu'elle soit stockée temporairement > En déposant une photo, vous acceptez qu'elle soit stockée temporairement
> dans le cadre de cet événement et mise à disposition de l'organisateur. > dans le cadre de cet événement et **visible par les autres invités de
> Vos photos sont automatiquement supprimées **7 jours après la date de > l'événement ainsi que par l'organisateur** (galerie commune accessible via
> l'événement**, sans action de votre part. Aucune photo n'est utilisée à > le même lien/QR code). Vos photos sont automatiquement supprimées
> d'autres fins, ni transmise à des tiers. Vous pouvez demander la > **7 jours après la date de l'événement**, sans action de votre part.
> suppression anticipée d'une photo en contactant l'organisateur de > Aucune photo n'est utilisée à d'autres fins, ni transmise à des tiers en
> l'événement. > dehors des invités de l'événement. Vous pouvez demander la suppression
> anticipée d'une photo en contactant l'organisateur de l'événement.
## Politique de conservation ## Politique de conservation
@@ -38,6 +39,12 @@ ne dépose une photo :
## Points à valider avec Kévin (et si besoin un juriste) avant V2/V3 ## Points à valider avec Kévin (et si besoin un juriste) avant V2/V3
- **Galerie invité (2026-09-18)** : les photos/prénoms/messages sont
désormais visibles par tous les invités d'un même événement (pas
seulement par l'organisateur), cf. `docs/decisions.md`. Mention légale
mise à jour en conséquence — à faire valider par un juriste avant V2/V3
comme le reste de cette page, ce changement rend le sujet plus sensible
(données visibles par un groupe plus large que prévu initialement).
- Rédaction définitive des CGU/mentions légales pour un usage commercial - Rédaction définitive des CGU/mentions légales pour un usage commercial
auprès de clients externes (mariages, événementiel pro). auprès de clients externes (mariages, événementiel pro).
- Statut du client (organisateur) comme responsable de traitement, et de - Statut du client (organisateur) comme responsable de traitement, et de
+20 -9
View File
@@ -31,6 +31,11 @@
</p> </p>
<h1 id="event-name">Ajouter une photo</h1> <h1 id="event-name">Ajouter une photo</h1>
<p class="page__kicker">Une photo, un petit mot, et hop dans l'album&nbsp;!</p> <p class="page__kicker">Une photo, un petit mot, et hop dans l'album&nbsp;!</p>
<!-- href posé par upload.js une fois le slug connu (getSlugFromPath) ;
"#" par défaut pour ne jamais pointer nulle part avant ça. Lien
permanent vers le mur, accessible même sans avoir uploadé — ajouté
suite à la demande de Kévin le 2026-09-18. -->
<a href="#" id="wall-link" class="wall-link">Voir le mur&nbsp;</a>
</header> </header>
<!-- Mot de bienvenue + mention légale RGPD condensée, affiché une seule <!-- Mot de bienvenue + mention légale RGPD condensée, affiché une seule
@@ -50,8 +55,8 @@
</p> </p>
<p class="welcome-modal__title" id="welcome-modal-title">Bienvenue&nbsp;!</p> <p class="welcome-modal__title" id="welcome-modal-title">Bienvenue&nbsp;!</p>
<p class="welcome-modal__text"> <p class="welcome-modal__text">
Scanne, souris, dépose ta photo — elle rejoint l'album de l'événement Scanne, souris, dépose ta photo — elle rejoint le mur de l'événement
en quelques secondes. en quelques secondes, visible par tous les invités.
</p> </p>
<p class="legal-notice welcome-modal__legal"> <p class="legal-notice welcome-modal__legal">
<svg class="legal-notice__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false"> <svg class="legal-notice__icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.8" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true" focusable="false">
@@ -60,15 +65,18 @@
</svg> </svg>
<!-- Texte légal complet, identique à docs/rgpd.md (mention <!-- Texte légal complet, identique à docs/rgpd.md (mention
obligatoire) — seule la présentation change (modale au premier obligatoire) — seule la présentation change (modale au premier
passage + lien de rappel), pas le contenu. --> passage + lien de rappel), pas le contenu. Mis à jour le
2026-09-18 : mentionne explicitement la visibilité par les
autres invités (galerie commune), cf. docs/decisions.md. -->
<span> <span>
En déposant une photo, tu acceptes qu'elle soit stockée temporairement En déposant une photo, tu acceptes qu'elle soit stockée temporairement
dans le cadre de cet événement et mise à disposition de l'organisateur. dans le cadre de cet événement et visible par les autres invités de
Tes photos sont automatiquement supprimées 7 jours après la date de l'événement ainsi que par l'organisateur. Tes photos sont
l'événement, sans action de ta part. Aucune photo n'est utilisée à automatiquement supprimées 7 jours après la date de l'événement,
d'autres fins, ni transmise à des tiers. Tu peux demander la sans action de ta part. Aucune photo n'est utilisée à d'autres
suppression anticipée d'une photo en contactant l'organisateur de fins, ni transmise à des tiers en dehors des invités de
l'événement. l'événement. Tu peux demander la suppression anticipée d'une
photo en contactant l'organisateur de l'événement.
</span> </span>
</p> </p>
<button type="button" id="welcome-modal-dismiss">C'est parti&nbsp;!</button> <button type="button" id="welcome-modal-dismiss">C'est parti&nbsp;!</button>
@@ -109,7 +117,10 @@
</div> </div>
<p class="success-title">C'est envoyé&nbsp;!</p> <p class="success-title">C'est envoyé&nbsp;!</p>
<p class="success-text">Ta photo vient de rejoindre la fête. Merci d'avoir été là&nbsp;!</p> <p class="success-text">Ta photo vient de rejoindre la fête. Merci d'avoir été là&nbsp;!</p>
<div class="success-actions">
<button type="button" id="add-another-btn">Ajouter une autre photo</button> <button type="button" id="add-another-btn">Ajouter une autre photo</button>
<a href="#" id="wall-link-success" class="btn-secondary-link">Voir le mur&nbsp;</a>
</div>
</section> </section>
<form id="upload-form" class="upload-form" hidden novalidate> <form id="upload-form" class="upload-form" hidden novalidate>
+33
View File
@@ -171,6 +171,20 @@ body {
margin: 0; margin: 0;
} }
.wall-link {
display: inline-flex;
margin-top: 0.7rem;
font-family: var(--font-ui);
font-weight: 700;
font-size: 0.85rem;
color: var(--color-coral);
text-decoration: none;
}
.wall-link:active {
opacity: 0.7;
}
.page__kicker { .page__kicker {
color: var(--color-muted); color: var(--color-muted);
font-size: 0.95rem; font-size: 0.95rem;
@@ -644,6 +658,25 @@ button {
background: #ff7673; background: #ff7673;
} }
.success-actions {
display: flex;
flex-direction: column;
align-items: center;
gap: 0.7rem;
}
.btn-secondary-link {
font-family: var(--font-ui);
font-weight: 700;
font-size: 0.9rem;
color: var(--color-muted);
text-decoration: none;
}
.btn-secondary-link:active {
opacity: 0.7;
}
#submit-btn:disabled { #submit-btn:disabled {
opacity: 0.5; opacity: 0.5;
cursor: not-allowed; cursor: not-allowed;
+8
View File
@@ -51,6 +51,8 @@ const submitBtnLabel = document.getElementById("submit-btn-label");
const welcomeModal = document.getElementById("welcome-modal"); const welcomeModal = document.getElementById("welcome-modal");
const welcomeModalTitle = document.getElementById("welcome-modal-title"); const welcomeModalTitle = document.getElementById("welcome-modal-title");
const welcomeModalDismiss = document.getElementById("welcome-modal-dismiss"); const welcomeModalDismiss = document.getElementById("welcome-modal-dismiss");
const wallLink = document.getElementById("wall-link");
const wallLinkSuccess = document.getElementById("wall-link-success");
const legalLink = document.getElementById("legal-link"); const legalLink = document.getElementById("legal-link");
// --------------------------------------------------------------------------- // ---------------------------------------------------------------------------
@@ -410,6 +412,12 @@ async function initEventCheck() {
showError(appError("event-not-found")); showError(appError("event-not-found"));
return; return;
} }
// Lien vers le mur posé dès que le slug est connu, sans attendre la
// réponse de get_public_event : /galerie/<slug> fait sa propre
// vérification (event inconnu/clos), pas besoin de la dupliquer ici.
const wallHref = `/galerie/${encodeURIComponent(slug)}`;
wallLink.href = wallHref;
wallLinkSuccess.href = wallHref;
try { try {
const event = await fetchEventPublicInfo(slug); const event = await fetchEventPublicInfo(slug);
if (!isEventActive(event)) throw appError("event-closed"); if (!isEventActive(event)) throw appError("event-closed");