mirror of
https://github.com/R0m1k3/PleinR.git
synced 2026-10-23 15:18: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
@@ -13,6 +13,10 @@ export const SITE_SETTING_DEFAULTS = {
|
||||
association_email: "",
|
||||
association_phone: "",
|
||||
association_website: "",
|
||||
association_facebook:
|
||||
"https://www.facebook.com/search/top?q=pleinr%20-%20les%20bons%20plan%20du%20bassin%20de%20pompey",
|
||||
association_linkedin:
|
||||
"https://www.linkedin.com/company/association-plein-r-bassin-de-pompey/",
|
||||
association_siret: "",
|
||||
association_rna: "",
|
||||
association_contact: "",
|
||||
@@ -46,6 +50,37 @@ export async function getSiteSettings(): Promise<SiteSettings> {
|
||||
return merged;
|
||||
}
|
||||
|
||||
export type SocialLink = {
|
||||
network: "facebook" | "linkedin";
|
||||
label: string;
|
||||
handle: string;
|
||||
href: string;
|
||||
};
|
||||
|
||||
/** Réseaux sociaux publics de l'association, dans l'ordre d'affichage. */
|
||||
export function socialLinks(settings: SiteSettings): SocialLink[] {
|
||||
const links: SocialLink[] = [];
|
||||
const facebook = settings.association_facebook.trim();
|
||||
const linkedin = settings.association_linkedin.trim();
|
||||
if (facebook) {
|
||||
links.push({
|
||||
network: "facebook",
|
||||
label: "Facebook",
|
||||
handle: "Plein R — Les bons plans du Bassin de Pompey",
|
||||
href: facebook,
|
||||
});
|
||||
}
|
||||
if (linkedin) {
|
||||
links.push({
|
||||
network: "linkedin",
|
||||
label: "LinkedIn",
|
||||
handle: "Association Plein R — Bassin de Pompey",
|
||||
href: linkedin,
|
||||
});
|
||||
}
|
||||
return links;
|
||||
}
|
||||
|
||||
export function splitLines(value: string) {
|
||||
return value
|
||||
.split(/\r?\n/)
|
||||
|
||||
Reference in new issue
Block a user