mirror of
https://github.com/R0m1k3/PleinR.git
synced 2026-10-21 22:28:04 +02:00
Refonte du bloc infos pratiques, suspension des promos et publication réseaux
Bloc « Informations pratiques » (fiche adhérent) - Suppression des dégradés hors palette (radial doré de la section, dégradés crème/bleu des deux sous-cartes) au profit du vocabulaire visuel du site : carte blanche bordée, sous-cartes plates sur le fond de champ, variables CSS. - La pastille « Préparer votre visite » devient une puce arrondie identique aux badges du reste du site ; le chip d'ouverture reprend les teintes de statut. - Les glyphes texte ◷ et ↗ sont remplacés par des icônes SVG cohérentes. Suspension des promotions - Nouveau statut `suspended` + colonnes `suspended_by` / `suspended_by_id` / `suspended_at`. - L'adhérent suspend et réactive ses propres promotions depuis Mon espace ; l'association suspend et réactive n'importe laquelle depuis le backoffice. - Une suspension décidée par l'association ne peut pas être levée par l'adhérent : le motif est affiché dans son espace. - Les lectures publiques filtrant déjà sur `live`, une promo suspendue quitte immédiatement l'accueil, l'annuaire et la fiche. Publication Facebook / LinkedIn - `src/lib/social.ts` : publication d'une promo en ligne sur la page Facebook (Graph API, upload multipart car les images sont en data-URI) et sur la page LinkedIn (Posts API + Images API en trois étapes). - Jetons d'accès exclusivement en variables d'environnement ; un réseau non configuré masque son bouton. - Table `social_posts` : chaque tentative est tracée, un échec est rattrapé et affiché sur la carte de la promo sans interrompre le backoffice. - Nouvelle capacité RBAC `publishSocial` (admin + modérateur). Liens sociaux publics - Réglages `association_facebook` / `association_linkedin` éditables dans Paramètres, préremplis avec les pages de l'association. - Section « Plein R sur les réseaux » sur l'accueil et icônes dans le pied de page, masquées si le réglage est vide. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QXNXRC4j5VLfKvpyyisrnb
This commit is contained in:
20 files changed
+2370
-109
No files matched your search
@@ -62,11 +62,43 @@ charge des données de démonstration. Ensuite :
|
||||
| Tableau de bord | ✅ | ✅ | ✅ | — |
|
||||
| Adhérents (CRUD) | ✅ | ✅ | ✅ | — |
|
||||
| Modération des promotions | ✅ | ✅ | — | — |
|
||||
| Publication réseaux sociaux | ✅ | ✅ | — | — |
|
||||
| Administrateurs | ✅ | — | — | — |
|
||||
| Mon espace (publier une promo) | — | — | — | ✅ |
|
||||
|
||||
`/backend` est protégé par le middleware ; chaque vue affine l'accès selon le rôle.
|
||||
|
||||
## Cycle de vie d'une promotion
|
||||
|
||||
`pending` → `live` → `suspended` ⇄ `live`, ou suppression.
|
||||
|
||||
- L'adhérent soumet la promotion depuis **Mon espace** : elle part en `pending`.
|
||||
- L'association la valide dans **Backend › Promotions** : elle passe `live` et
|
||||
s'affiche sur l'accueil, l'annuaire et la fiche de l'adhérent.
|
||||
- **Suspension** : l'adhérent peut suspendre *ses* promotions depuis Mon espace,
|
||||
l'association peut suspendre n'importe laquelle. Une promotion suspendue sort
|
||||
immédiatement du site public et peut être remise en ligne à tout moment.
|
||||
Nuance importante : une suspension décidée par l'association ne peut pas être
|
||||
levée par l'adhérent (`promotions.suspended_by` mémorise l'auteur).
|
||||
|
||||
## Publication sur Facebook / LinkedIn
|
||||
|
||||
Depuis **Backend › Promotions**, une promotion `live` peut être publiée sur la
|
||||
page Facebook et/ou la page LinkedIn de l'association (image + texte + lien vers
|
||||
la fiche adhérent). Chaque tentative est tracée dans la table `social_posts`
|
||||
(succès avec le lien du post, ou échec avec le message d'erreur affiché sur la
|
||||
carte).
|
||||
|
||||
Les jetons d'accès sont des **secrets** : ils se configurent uniquement par
|
||||
variables d'environnement (`FACEBOOK_PAGE_ID`, `FACEBOOK_PAGE_ACCESS_TOKEN`,
|
||||
`LINKEDIN_ORGANIZATION_URN` ou `LINKEDIN_ORGANIZATION_ID`,
|
||||
`LINKEDIN_ACCESS_TOKEN`), jamais depuis le backoffice. Voir
|
||||
[`.env.example`](./.env.example) pour la marche à suivre côté Meta et LinkedIn.
|
||||
Si un réseau n'est pas configuré, son bouton n'apparaît simplement pas.
|
||||
|
||||
Les **liens publics** vers les deux pages (affichés sur l'accueil et dans le pied
|
||||
de page) se règlent, eux, dans **Backend › Paramètres**.
|
||||
|
||||
## Développement local (sans Docker)
|
||||
|
||||
```bash
|
||||
@@ -98,6 +130,9 @@ Voir [`.env.example`](./.env.example). Les principales :
|
||||
- `AUTH_URL` — URL publique de l'application
|
||||
- `SEED_ON_START` — `true` pour seeder au démarrage du conteneur
|
||||
- `SEED_ADMIN_EMAIL` / `SEED_ADMIN_PASSWORD` / `SEED_ADMIN_NAME` — premier admin
|
||||
- `NEXT_PUBLIC_SITE_URL` — URL publique reprise dans les posts réseaux sociaux
|
||||
- `FACEBOOK_PAGE_ID` / `FACEBOOK_PAGE_ACCESS_TOKEN` — publication Facebook (optionnel)
|
||||
- `LINKEDIN_ORGANIZATION_URN` / `LINKEDIN_ACCESS_TOKEN` — publication LinkedIn (optionnel)
|
||||
|
||||
## Note sur le logo
|
||||
|
||||
|
||||
Reference in new issue
Block a user