📝 v3.5.25-alpha — Help text wizard contact : champ organisation

✅ Fix

  • class-wizard-schema.php — champ frnix_organization_id : help text remplacé par « Recherchez votre organisation, ou laissez vide. ».
  • Bump frnix-manager v3.5.24-alpha → v3.5.25-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.25-alpha'

🧾 Justification

  • Ancien help text invitait à cocher frnix_is_individuel, mais ce champ est verrouillé admin-only depuis v3.5.24 → instruction obsolète.
  • Beaucoup de contacts FRNIX existants n'ont pas d'orga (consultants indépendants, étudiants, externes). L'absence d'orga est un état légitime, pas une exception à signaler.
🔐 v3.5.24-alpha — Fix sécurité : 4 switchers wizard contact gatés + can_write_field corrigé

🛡️ Audit sécurité (résumé v3.5.23-alpha)

  • 4 switchers (frnix_is_individuel, contact_organisation, contact_votant, contact_facturation) étaient modifiables côté serveur par un membre non-admin éditant son propre profil via /mon-profil/.
  • Cause : aucune clé writable_by dans le schéma + bug dans can_write_field qui ne vérifiait pas le rôle réel (juste mode='membre' + valeur dans liste).
  • Vecteur d'attaque : aucun outil custom requis. Membre clique sur les switchers de son wizard, ajax accepte. Self-promotion Principal/Votant/Facturation/Individuel possible.

✅ Fix v3.5.24 (Option B audit)

  • class-wizard-schema.php — ajout writable_by sur 4 champs :
    • frnix_is_individuel['admin'] (statut administratif)
    • contact_organisation['admin', 'org_editor'] (Principal délègue)
    • contact_votant['admin', 'org_editor']
    • contact_facturation['admin', 'org_editor']
  • class-wizard-ajax.php::can_write_field() — réécrite pour vérifier le rôle réel :
    • self : exige $current_uid === $entity_id (type=contact)
    • org_editor : exige manage_options OU is_principal_of_same_org()
    • Default fallthrough changé : truefalse (plus défensif)
    • Signature étendue : can_write_field($field, $mode, $entity_id, $type='contact')
  • Nouveau helper FRNIX_Wizard_Ajax::is_principal_of_same_org($current_uid, $entity_id, $type) — vérifie meta contact_organisation='true' + matching frnix_organization_id. Gère type=contact (compare orgas) et type=org (compare directement).
  • Bump frnix-manager v3.5.23-alpha → v3.5.24-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.24-alpha'

🧾 Validation 6 cas (mental + code review)

  • Membre lambda → son profil : 4 champs sensibles DENY ✅
  • Principal → son propre profil : contact_* ALLOW (org_editor match), frnix_is_individuel DENY (admin only) ✅
  • Principal → autre membre de son orga : contact_* ALLOW ✅
  • Principal orga A → membre orga B : can_edit rejette au niveau entité (avant champ) ✅
  • Admin → n'importe quel profil : ALLOW ✅
  • Membre forge mode='membre'/'admin' via curl : DENY (vrais checks de rôle) ✅

📋 TODO reporté (non bloquant sécu)

  • UX lecture-seule : afficher les switchers verrouillés en disabled + help text contextuel (« Statut administratif géré par l'équipe FRNIX », « Désigné par décision de l'organisation », etc.). Estimé : 2-3 fichiers + JS state Alpine + template switcher conditionnel. Non trivial → reporté en session ultérieure. Le fix serveur (writable_by + can_write_field) suffit pour la sécurité ; sans UX, le membre voit le switcher cliquable et l'ajax retourne silencieusement (skip + 200, pas d'erreur visible).
  • Refactor mineur : can_edit et can_write_field dupliquent partiellement la logique « is principal of same org ». Pourrait factoriser via le nouveau helper is_principal_of_same_org.
🎨 v3.5.23-alpha — UI : bouton médiathèque admin (texte court + tooltip)

✅ Fix UI mineur

  • render-wizard.php:455 — Texte du bouton médiathèque admin (état vide) raccourci de « Choisir depuis la médiathèque FRNIX (admin) » → « Médiathèque FRNIX (admin) ».
  • Ajout d'un attribut title="Choisir depuis la médiathèque FRNIX (admin)" sur le bouton (tooltip au hover) pour conserver le texte explicite en accessibilité.
  • Bump frnix-manager v3.5.22-alpha → v3.5.23-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.23-alpha' (cache-bust assets, pour cohérence)

📎 Détails techniques

  • Patch via 2 str_replace ciblés avec anchors ASCII (@click.stop="openMediaPickerAdmin(field.key)"> pour la position d'insertion ; préfixe ASCII <i class="fas fa-photo-film"></i> Choisir depuis la m pour le texte). Aucun byte UTF-8 transité via MCP, accents préservés.
  • Title attribute en HTML entities (m&eacute;diath&egrave;que) plutôt qu'UTF-8 brut, par sécurité transport. Render navigateur identique.
  • Line ending CRLF détecté et préservé pour la ligne insérée.
🛡️ v3.5.22-alpha — Bug fix : URL admin TBB FRNIX hardcodée (403)

🐞 Bug

  • /wp-admin/admin.php?page=frnix renvoyait 403 pour les admins (ex : Frédéric Eppendahl, login studio, role administrator).
  • Diagnostic : ce n'était PAS un problème de capability. Toutes les pages admin du plugin utilisent manage_options (cap WP standard), aucune cap custom n'existe. Frédéric a bien manage_options.
  • Cause racine : URL hardcodée fausse. Le menu slug réel est frnix-manager (cf. class-admin-page.php:1497-1505), pas frnix. WP renvoie 403 générique pour tout slug non enregistré.

✅ Fix

  • render-wizard.php:178admin.php?page=frnixadmin.php?page=frnix-manager (bouton « TBB FRNIX » du wizard frontend, admin only)
  • frnix-mon-compte/includes/public-pages.php:432 — même str_replace (origine du copy-paste vers render-wizard.php).
  • Vérification post-patch : grep page=frnix(?![a-z-]) sur tout le plugin → 0 occurrence restante.
  • Bump frnix-manager v3.5.21-alpha → v3.5.22-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.22-alpha' (cache-bust assets, par cohérence même si wizard.js inchangé)
🔗 v3.5.21-alpha — Lien « Mon tableau de bord » context-aware (admin impersonation)

🐞 Bug

  • Sur /mon-profil/?admin_user_id=X ou /mon-organisation/?admin_org_id=Y (admin impersonation), le bouton « Mon tableau de bord » en haut du wizard pointait toujours vers le TBB de l'admin connecté, pas vers le TBB du contact/orga édité.

✅ Fix

  • render-wizard.php:155-166 — logique de calcul de l'URL TBB refaite, basée sur $type et $entity_id (déjà en scope) au lieu du seul $_GET['admin_user_id'] legacy.
  • Cas gérés : (a) admin sur contact X → /mon-compte/?admin_user_id=X + label « TBB de [Prénom Nom] » ; (b) admin sur orga Y → /mon-organisation/?admin_org_id=Y + label « TBB de [titre orga] » ; (c) admin sur son propre profil → defaults inchangés ; (d) membre normal → defaults inchangés.
  • Bump frnix-manager v3.5.20-alpha → v3.5.21-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.21-alpha' (cache-bust assets)

⚙️ Détails techniques

  • Patch via substr_replace par anchors ASCII pour préserver le line ending CRLF du fichier (détecté runtime).
  • Block remplacé : 760 bytes → 1 192 bytes (+432).
  • Le legacy check $_GET['admin_user_id'] est supprimé : couvert par $entity_id qui est déjà mappé depuis ce param par class-wizard.php:121-122. Pas de régression.
👑 v3.5.20-alpha — Sidebar HappyFiles dans wp.media (frontend wizard, admin only)

✅ Fait

  • class-wizard.php::enqueue_wizard_assets() — ajout d'un appel \HappyFiles\Init::run()->setup->just_enqueue() après wp_enqueue_media(), gaté par current_user_can('edit_users') + triple guard (class_exists / isset / method_exists).
  • Bump frnix-manager v3.5.19-alpha → v3.5.20-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.20-alpha' (cache-bust assets)

🎯 Problème résolu

  • HappyFiles ne hooke que admin_enqueue_scripts. En frontend, sa méthode has_media_modal() ne tourne pas → sidebar HappyFiles invisible dans le modal wp.media du wizard frontend.
  • Solution : utiliser le pattern HappyFiles natif just_enqueue() (même hook que celui déjà prévu pour Beaver Builder, BeTheme, Cornerstone — voir setup.php constructeur L25-31).
  • Avantage : wp_localize_script('happyfilesData') + tous les enqueues dépendants (dashicons, jquery) gérés automatiquement.

🚫 Hors-scope

  • Pas touche à wp.media({...}) dans wizard.js — les frame: 'select' + state: 'library' de v3.5.19 restent.
  • Choix de edit_users (et non upload_files) pour rester cohérent avec le gate admin existant L314.
🎯 v3.5.19-alpha — HappyFiles dans wp.media picker admin

✅ Fait

  • wizard.jsopenMediaPickerAdmin() : ajout de frame: 'select' + state: 'library' dans l'objet wp.media({...}) pour activer la sidebar HappyFiles dans le modal admin.
  • Bump frnix-manager v3.5.18-alpha → v3.5.19-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.19-alpha' (cache-bust assets wizard.js)

🎯 Problème résolu

  • Avant : library: { type: 'image' } seul désactivait les intégrations tierces → sidebar HappyFiles invisible → impossible de retrouver un logo parmi 2000+ médias.
  • Après : le state library explicite réactive les onglets HappyFiles dans le picker.

⚠️ Si le fix ne suffit pas (test à faire en local)

  • Fallback documenté : retirer entièrement library de l'objet et filtrer après frame.open() via frame.state().get('library').props.set({type:'image'}).
📦 v3.5.18-alpha — Wizard contact : last_name required (PROD)

✅ Fait

  • schema_contact() : champ last_name passe en required = true
  • Help text reformulé : Pour un contact de type service, utilisez par exemple first_name='Service' et last_name='Facturation'.
  • Bump frnix-manager v3.5.17-alpha → v3.5.18-alpha (header + define FRNIX_VERSION)
  • Bump FRNIX_Wizard::VERSION = '3.5.18-alpha' (cache-bust assets wizard.js / wizard.css)

⚠️ Écart documenté (TODO refonte registrations)

  • class-pending-registrations.php:805if (empty($first_name) && empty($last_name)) laisse passer last_name vide si first_name présent. Concerne le formulaire public d'inscription, pas le wizard admin.
  • À aligner lors de la session refonte email / pending.
Session 18 avril 2026 — Wizard FRNIX v1.0.11-alpha — Sprint majeur (BIS uniquement)

Module wizard complet déployé sur BIS

  • Mode admin/membre : 100% fonctionnel
  • Mirroring rôles validé (5/5 scénarios)
  • Étape 7 Contacts rattachés (list/attach/detach/create)
  • Cycle retour orga après édition contact (save + redirect étape 7)
  • Clic libre sur puces en mode admin
  • Lien parent_org dans header contact
  • last_name auto-fill NC pour entités morales

Fix bugs

  • UTF-8 encoding, unicode escapes, autocomplete org, MIME FontAwesome, validation média legacy

À faire next

  • Mode qualification pour Samuel (460 orgas)
  • NON déployé sur PROD — validation BIS en cours
đŸ—“ïž Session 16 avril 2026 — frnix-manager v3.2.3 → v3.2.7

Versions déployées

  • frnix-manager v3.2.3 → v3.2.7 (prod + bis)
  • frnix-events-manager : inchangĂ© v1.3.71

Corrections critiques

  • Fix enable-app-passwords.php manquant sur BIS → routes REST restaurĂ©es (569 routes vs 48)
  • render-unified-tables.php corrompu (handler frnix_bulk_invite avec CSS injectĂ©) → fichier reconstruit complet

Nouvelles fonctionnalités

  • Fiche orga publique : tous les contacts rattachĂ©s affichĂ©s (plus de filtre sur les rĂŽles)
  • Email sous le nom dans la fiche orga (14px) pour identifier les doublons
  • Modale admin « Contacts » refaite from scratch : tableau avec avatar, P/F/V checkboxes, Contacter/Voir/DĂ©tacher, ajout contact, tri alphabĂ©tique
  • Colonne « Inscrit le » triable dans tableau contacts admin
  • Colonne « Créée le » triable dans tableau organisations admin
  • Bouton « ← Tableau de bord FRNIX » sur toutes les pages admin
  • Lien « Gestion des Ă©vĂ©nements » pointe vers frnix-manager&tab=events
  • Widget « Comptes Ă  valider » ajoutĂ© sur l’onglet stats du dashboard
  • Suppression page frnix-administration (add_submenu_page commentĂ©, redirections mises Ă  jour)

Corrections comportement

  • Contact principal : requĂȘte corrigĂ©e pour lire contact_organisation=’true’ (au lieu de frnix_role_principal=’1′)
  • Notifications rĂŽles P/F/V : dĂ©sactivĂ©es quand modification par admin, actives quand modification par membre orga
  • Nouvelles orgas créées via « Comptes Ă  valider » : catĂ©gorie non_membre par dĂ©faut + jamais masquĂ©es
  • Anti-doublon crĂ©ation orga : bouton dĂ©sactivĂ© immĂ©diatement au clic
  • Redirections frnix-administration remplacĂ©es par frnix-organisations dans tous les fichiers
  • Orgas sans catĂ©gorie en base : 33 mises Ă  jour → non_membre
  • Alan Chollet IELO : entrĂ©e pending #649 rĂ©solue (dĂ©jĂ  rattachĂ© Ă  org)
  • Hook updated_user_meta : nettoyage auto des pending quand frnix_organization_id est mis Ă  jour
  • Scan wp_user : rattachement auto des users dont le domaine email correspond Ă  une orga existante
  • Inscription Ă©vĂ©nement : fallback domaine email pour dĂ©terminer statut membre
  • Filtre get_pending() : exclut les emails dĂ©jĂ  rattachĂ©s Ă  une organisation
  • 9 organisations masquĂ©es (_frnix_hidden) dĂ©masquĂ©es (dont doublons AIRBUS, Etherlinx)

Fichiers modifiés

  • frnix-manager/frnix-manager.php
  • frnix-manager/includes/modules/admin/render-unified-tables.php
  • frnix-manager/includes/modules/admin/class-admin-page.php
  • frnix-manager/includes/modules/admin/class-dashboard-entries.php
  • frnix-manager/includes/modules/admin/class-admin-administration.php
  • frnix-manager/includes/modules/admin/render-inscrits.php
  • frnix-manager/includes/modules/admin/render-new-contact.php
  • frnix-manager/includes/modules/admin/render-new-org.php
  • frnix-manager/includes/class-pending-registrations.php
  • frnix-manager/includes/class-official-contact.php
  • frnix-manager/frnix-mon-compte/includes/render-organisation.php
  • frnix-manager/frnix-mon-compte/includes/ajax-handlers.php
  • frnix-events-manager/includes/class-form-handler.php
  • frnix-events-manager/includes/class-admin-page.php
  • frnix-events-manager/includes/class-history-page.php
đŸ—“ïž Session 12 avril 2026 — frnix-manager v3.1.3 → v3.2.1

Versions déployées

  • frnix-manager v3.1.3 → v3.2.1 (prod)
  • frnix-events-manager : inchangĂ© v1.3.71

Corrections bugs (v3.1.4 → v3.1.9)

  • Emails +tag@ acceptĂ©s tels quels Ă  l’inscription
  • Cycle de validation des comptes supprimĂ© — class-account-validation.php vraiment dĂ©chargĂ©e (chargement rĂ©siduel dans class-plugin.php commentĂ©)
  • Restriction emails gĂ©nĂ©riques supprimĂ©e dans class-elementor-handler.php — tous les emails crĂ©ent un compte
  • Fallback +tag dans class-magic-login.php
  • Bouton inline « Éditer » sous le nom supprimĂ© dans shortcode-dashboard.php
  • detect_organization() et consolidate() dĂ©sactivĂ©s — plus d’auto-rattachement ni de fusion automatique de comptes

Nouvelles fonctionnalitĂ©s (v3.2.0 → v3.2.1)

  • Onglet « Mon organisation » masquĂ© quand aucune orga liĂ©e
  • Onglet RGPD toujours visible pour tous les utilisateurs (correction condition trop restrictive)
  • Comptes de test exclus de la recherche contacts admin via meta frnix_is_test_account
  • Cap rĂ©sultats recherche contacts portĂ© de 10 Ă  20

Corrections de données

  • gmail.com retirĂ© de frnix_associated_domains de Zayo Europe — 5 users gmail dĂ©tachĂ©s
  • outlook.com (BoumIT) et hotmail.co.uk (HOTMAIL) nettoyĂ©s — 2 users dĂ©tachĂ©s
  • Victoria Eppendahl (ID 2572) dĂ©tachĂ©e d’ARAPEDE

Prochaines étapes

  1. Répercuter corrections v3.2.1 sur BIS
  2. Email one-shot contacts principaux
  3. Bug responsivité single page event
  4. Colonne « Société déclarée » (frnix_company_name) dans tableau contacts admin
12 avril 2026 — Suppression workflow validation — crĂ©ation directe des comptes Ă  l’inscription

Catégories : feature, workflow

Actions :

  • frnix-manager v3.1.4 → v3.1.5
  • class-elementor-handler.php : suppression du branchement needs_validation() / create_pending() — tous les emails pro crĂ©ent dĂ©sormais le compte WP directement sans passer par la file d’attente
  • Vidage manuel des 20 comptes pending et 2 comptes confirmed restants → validated via SQL (phpMyAdmin bis + Claude Code prod)
  • Liste « En attente » vide sur bis et prod
  • DĂ©ployĂ© sur bis puis prod + purge caches LiteSpeed + OPcache
12 avril 2026 — Refonte workflow inscriptions — suppression validation comptes + acceptation emails +tag

Catégories : feature, workflow

Actions :

  • frnix-manager v3.1.3 → v3.1.4
  • Suppression du cycle de validation des comptes (cron frnix_check_pending_accounts J+7/J+30, suspension automatique)
  • DĂ©sactivation de class-account-validation.php (dĂ©chargĂ©e du plugin principal)
  • Suppression du filtre frnix_inscription_email dans class-email-consolidation.php — les emails +tag@ sont dĂ©sormais acceptĂ©s tels quels Ă  l’inscription, sans conversion vers l’email principal
  • Nettoyage automatique du cron au premier chargement post-mise Ă  jour (via version-flush)
  • DĂ©ployĂ© sur BIS puis PROD
frnix-manager — 10/04/2026 — Fix accĂšs pages admin cachĂ©es + lien fiche contact dashboard

Catégorie : bug-fix

Actions effectuées :

  • Bug 1 (reorder_menu) : les pages cachĂ©es du sidebar (frnix-administration, frnix-account-validation, etc.) Ă©taient exclues de $submenu lors du reorder — WordPress refusait l’accĂšs par URL directe. Fix : re-ajout des pages cachĂ©es en fin de $result avant $submenu['frnix-manager'] = $result.
  • Bug 2 (dropdown quick search) : le lien contact pointait vers frnix-administration&search_contact= au lieu de la fiche /mon-compte/. CorrigĂ© vers home_url('/mon-compte/?admin_user_id=' . $user->ID . '&nocache=1') — nocache=1 nĂ©cessaire car LiteSpeed Cache servait la page sans exĂ©cuter le PHP.

Version : frnix-manager 3.1.3 (BIS + PROD)

frnix-manager — 09/04/2026 (suite 3) — Tableaux Contacts + Organisations — fonctionnalitĂ©s avancĂ©es

Fichiers modifiés :

  • includes/modules/admin/render-unified-tables.php (60KB+)
  • assets/js/pending-actions.js

Fonctionnalités livrées :

  1. Tableau Organisations : popover « Nb contacts » avec ronds colorés P/F/V/B/A + nom + email + cliquables
  2. Bouton Â«Â đŸ” Contacts » par orga : modal recherche contacts similaires avec Levenshtein
  3. Modal contacts similaires : contacts déjà rattachés + checkboxes P/F/V inline auto-save + Voir/Masquer + ajout manuel + création nouveau contact
  4. Pastilles rĂŽle par lettre (P/F/V/B/A/?) avec couleurs
  5. Bouton changer catĂ©gorie orga inline (✏ + select)
  6. Bouton Supprimer orga → frnix_org_hidden=1 + filtre « Orgas supprimĂ©es » + Restaurer
  7. Compteur Nb contacts exclut contacts masqués
  8. Export CSV filtré « Exporter la sélection en CSV » sur ligne filtres Contacts + Organisations
  9. Export sélection groupée renommé « Exporter la sélection »
  10. Contacts masqués exclus des recherches similaires et du popover Nb contacts
  11. Fiche orga dĂ©diĂ©e class-fiche-org.php créée mais commentĂ©e (bouton Éditer → /mon-compte/?tab=organisation&org_id=)
frnix-manager — 09/04/2026 (suite) — Onglet « En attente » — fusion inscriptions + comptes WP, actions fonctionnelles

Fichiers modifiés :

  • includes/modules/admin/render-unified-tables.php — frnix_render_pending_view() fusionnĂ©e, wp_enqueue_script dĂ©placĂ© dans la fonction, handlers validate/reject account
  • assets/js/pending-actions.js — handlers frnix-p-validate-account et frnix-p-reject-account ajoutĂ©s

Fonctionnalités livrées :

  1. Onglet « En attente » fusionne 2 sources : wp_frnix_pending_registrations (inscriptions) + comptes WP avec frnix_account_status IN (pending/confirmed)
  2. Badge Source : Inscription=orange / Compte=bleu
  3. Valider compte → frnix_account_status=validated → ligne disparaüt du tableau
  4. Rejeter compte → frnix_hidden=1 → ligne disparaĂźt, visible dans filtre « Emails masquĂ©s »
  5. JS pending-actions.js chargé via wp_enqueue_script dans frnix_render_pending_view() (FRNIX_PLUGIN_URL)
  6. Filtres mutuellement exclusifs rĂŽle/statut dans tableau Contacts
  7. Compteur Admins TBB : fusion WP administrators + frnix_role_admin=1
  8. Samuel (ID2) + Amandine (ID351) + Philippe (ID348) : frnix_organization_id=23761 + frnix_role_admin=1 sur BIS
frnix-manager — 09/04/2026 — Connexion TBB → tableaux unifiĂ©s + filtres mutuellement exclusifs

Fichiers modifiés :

  • includes/modules/admin/class-admin-page.php — liens TBB → frnix-contacts/frnix-organisations, compteur Admins Ă©tendu (WP + frnix_role_admin)
  • includes/modules/admin/render-unified-tables.php — filtre role_filter=admin Ă©tendu Ă  frnix_role_admin=1, filtres mutuellement exclusifs (role/statut auto-reset)

Fonctionnalités livrées :

  1. Liens TBB cliquables → tableaux unifiĂ©s : Admins/Board/Principaux/Facturation/Votants → frnix-contacts&role_filter=... / Actifs/Partenaires/Individuels/Non-membres → frnix-organisations&cat_filter=...
  2. Compteur Admins TBB : fusion WP administrators + frnix_role_admin=1 (Samuel ID2, Amandine ID351, Philippe ID348 ajoutés)
  3. Filtre role_filter=admin dans tableau Contacts : détecte WP administrator OU frnix_role_admin=1
  4. Filtres mutuellement exclusifs : changer rĂŽle reset statut et vice versa, form auto-submit

Notes BIS :

  • Samuel (ID2), Amandine (ID351) : frnix_organization_id=23761 + frnix_role_admin=1 (Ă  rĂ©pliquer sur PROD)
  • Philippe Duby (ID348) : frnix_role_board vidĂ© + frnix_role_admin=1 (Ă  rĂ©pliquer sur PROD)
frnix-manager — 08/04/2026 (suite 2) — Tableau Contacts unifiĂ© — En attente, filtres, tri, masquage

Fichiers modifiés :

  • includes/modules/admin/render-unified-tables.php (43 134 octets) — tableau contacts complet
  • assets/js/pending-actions.js (4 511 octets) — handlers JS modals pending

Fonctionnalités livrées :

  1. Onglet « En attente » dans le tableau Contacts : fusion wp_frnix_pending_registrations (inscriptions) + comptes WP frnix_account_status IN (pending/confirmed)
  2. Badges Source : Inscription=orange / Compte=bleu
  3. Actions Inscription : Valider / Rattacher / Ignorer / Rejeter (handlers frnix_pending_*)
  4. Actions Compte : Valider → frnix_account_status=validated / Rejeter → frnix_hidden=1 (masquĂ©)
  5. Colonnes triables : Date / Nom / Email / Organisation / Source / Statut (â–Č▌⇅)
  6. Filtre « Emails masqués » : affiche tous les contacts avec frnix_hidden=1 (suspendus, rejetés, masqués manuellement)
  7. Bouton « Supprimer » → masque (frnix_hidden=1), bouton « Restaurer » dans filtre masquĂ©s
  8. Filtre « Emails persos » : contacts avec domaine Gmail/Hotmail/Outlook/etc
  9. Badge « Associé » : contacts avec frnix_is_alias_of non vide
  10. Bouton « Rattacher à un contact » pour emails persos / « Rattacher à une orga » pour emails pro
  11. JS pending-actions.js sĂ©parĂ© (plus de heredoc PHP→JS)

Notes :

  • Rejeter un compte = frnix_hidden=1 (pas suspended) — comportement unifiĂ© avec bouton Supprimer
  • Tableau Organisations : bouton Éditer pointe vers /membres/$slug (page front)
  • Crashes BIS Ă©vitĂ©s : goto supprimĂ©, JS externalisĂ© en .js sĂ©parĂ©
frnix-manager — 08/04/2026 (suite) — Tableaux unifiĂ©s Contacts + Organisations — render-unified-tables.php

Fichiers créés/modifiés :

  • includes/modules/admin/render-unified-tables.php (nouveau, ~28KB) — frnix_render_contacts_unified() + frnix_render_organisations_unified() + 6 handlers AJAX + JS inline
  • includes/modules/admin/class-admin-page.php — render_contacts_page() remplacĂ© par appel unifiĂ©, render_organisations_page() ajoutĂ©, submenu frnix-organisations enregistrĂ©
  • frnix-manager.php — require_once render-unified-tables.php ajoutĂ©

Fonctionnalités livrées :

  1. Tableau Contacts unifiĂ© : colonnes ☐/Nom/Email/ORGANISATION/RÔLE(S)/Statut/Actions — 992 contacts, pagination 50/page
  2. Filtres : recherche texte + rÎle + statut (Validé/En attente/Confirmé/Suspendu/Contacts uniques/Comptes persos) + bouton Réinitialiser
  3. Badges rÎles colorés : Principal=#0099FF, Votant=#FF9800, Facturation=#64CA8C, Board=#9C27B0, Admin=#888
  4. Actions par ligne : Voir (/mon-compte/?admin_user_id=) + Inviter + Rattacher (détection auto email perso/pro)
  5. Rattacher email pro → modal autocomplete orga (frnix_pending_search_org)
  6. Rattacher email perso → modal autocomplete contact (frnix_search_contact_for_alias) + frnix_set_alias
  7. Barre actions groupées : Demande de mise à jour CONTACT + Exporter CSV avec page HTML intermédiaire
  8. Export CSV : page HTML avec textarea + bouton télécharger (séparateur ; Excel FR)
  9. Comptes persos rattachés (frnix_is_alias_of) masqués par défaut, visibles via filtre Comptes persos
  10. Tableau Organisations unifié : colonnes ☐/Logo/Nom/Catégorie/Contact principal/Email principal/Nb contacts/Actions

Notes techniques :

  • Nonce dual : frnix_pending_nonce pour search org, frnix_admin_nonce pour les autres handlers
  • Exclusion comptes test via FRNIX_Test_Accounts::get_test_user_ids()
  • Garde-fou BIS sur frnix_bulk_invite (FRNIX_BIS_NO_EMAIL_USERS)
  • class-fiches.php créé puis supprimĂ© (approche abandonnĂ©e au profit des tableaux)

nn

frnix-manager — 08/04/2026 — Module invitations — templates, UI 3 modes, anti-spam

Fichiers modifiés :

  • includes/class-invitation-email.php (nouveau) — FRNIX_Invitation_Email::send_invitation()
  • includes/class-frnix-email-template.php — template invitation_member enregistrĂ© dans init_templates()
  • includes/modules/admin/class-admin-page.php — UI invitations 3 modes + 6 handlers AJAX
  • includes/class-gdpr-export.php — fix double-wrap HTML (bypass FRNIX_Email_Template::send(), wp_mail() direct)
  • wp-config.php BIS — define('FRNIX_BIS_NO_EMAIL_USERS', true)

Fonctionnalités livrées :

  1. Fix rapport RGPD : HTML brut corrigĂ© — generate_html_report() bypasse wrap() via wp_mail() direct
  2. Template invitation éditable : slug invitation_member, variables {{first_name}} {{last_name}} {{magic_url}} {{site_name}}, visible dans /wp-admin/admin.php?page=frnix-email-templates
  3. Module invitations — panneau Â«Â đŸ“š Envoi d’invitations » dans onglet Administration avec 3 modes :
    • Test sur moi : envoie Ă  current_user, pas de garde-fou BIS
    • SĂ©lection manuelle : autocomplete avec recherche SQL sur first_name/last_name/user_email, tags supprimables
    • Par catĂ©gorie : 2 axes (catĂ©gorie orga / rĂŽle contact), count en live
  4. Anti-spam : exclusion systématique des contacts avec _last_login / wfls-last-login / frnix_last_modified non vide
  5. Garde-fou BIS : FRNIX_BIS_NO_EMAIL_USERS bloque les modes 2 et 3, UI bouton disabled + label « Envoi désactivé (BIS) »
  6. Fix Comptes test : retirĂ© de frnix_cleanup_submenus() qui cassait l’accĂšs admin

Notes techniques :

  • frnix_account_status filter : pending/confirmed uniquement (validated/active/suspended exclus dĂ©fensivement)
  • Taxonomie member_category : nettoyage Ă  planifier (ELEM/NL inutiles, doublons membre-actif/membre-electeur/membre-individuel)
  • CatĂ©gories orga hardcodĂ©es : membre_actif / membre_partenaire / membre_individuel / non_membre (post_meta frnix_org_category)
Session 08/04/2026 — Migration rîles multi-flags + nettoyage orgas/contacts [Feature, Refactor, Migration]

Refactor modĂšle rĂŽles contacts :

  • Abandon de frnix_contact_role (single value) au profit de 4 metas binaires frnix_role_principal/votant/facturation/board permettant le multi-rĂŽles
  • Migration des metas legacy contact_organisation/facturation/votant (string « true ») vers les nouveaux flags
  • BIS : 475 principaux / 81 votants / 103 facturation / 8 board
  • PROD : 451 principaux / 38 votants / 48 facturation / 8 board
  • Nettoyage votants non-rattachĂ©s Ă  une orga ACTIF (BIS: 381 / PROD: 376 supprimĂ©s)
  • Nettoyage facturation rattachĂ©s Ă  des non-membres
  • Auto-marquage des single-contact orgas (actif/partenaire/individuel/non-membre)

Dashboard FRNIX patché :

  • $user_counts basculĂ© sur frnix_role_* au lieu des metas legacy
  • Compteur « Contacts » filtrĂ© sur frnix_member + frnix_contact (au lieu de tous les wp_users)
  • Tuile « Nouveaux (30j) » supprimĂ©e — grille passĂ©e Ă  3 colonnes
  • frnix_org_category peuplĂ© sur les 579 orgas PROD via frnix_get_organization_type()
  • Cases admins et board dans les filtres dashboard aligĂ©s sur le nouveau modĂšle

Création/migration utilisateurs :

  • 3 admins créés sur BIS avec IDs PROD via SQL direct (Striolet 2, Estrade 351, Duby 348)
  • 25 contacts facturation créés sur PROD depuis email_de_facturation des orgas actives
  • 13+19 contacts créés via script externe (PROD/BIS) pour FOLIATEAM, I3D.NET, KYXAR, NETALIS, RETELIT, KYXAR, POST LUX, VERISIGN, WORLDLINE

  • HUB ONE : email avec point-virgule sanitisĂ© incorrectement par WP — corrigĂ© manuellement via SQL

Fusion FAIR :

  • 5 doublons FAIR fusionnĂ©s vers FAIR Conseil et Services (25818) sur BIS et PROD
  • FAIR Conseil basculĂ© en actif, RaphaĂ«l Boukris (2820) rattachĂ© comme principal/facturation/votant

UI dashboard mon-compte :

  • Bouton « Éditer » inopĂ©rant corrigĂ© : frnixSetMode(window.frnixEditMode || 'admin')
  • Bandeau preview activĂ© pour les admins ($show_banners=true) avec retrait CSS de frnix-preview-mode
  • RĂšgle CSS .frnix-preview-mode .frnix-banner { display:none } commentĂ©e

Maintenance CSS :

  • Mu-plugin frnix-header-css-fix.php : regen complet (page/post/jet-engine) sur init si critique manquant + clear_cache hook
  • Cron horaire frnix_css_regen ajoutĂ© sur BIS et PROD
  • Carte « Maintenance CSS » + AJAX frnix_regen_css dans onglet Outils

TODO :

  • FrnixCore_EmailManager (toujours en attente)
  • 57 orgas actives sans contact (export CSV dispo : uploads/orgas-sans-contact.csv)
  • Tuile « Membres » du dashboard compte des organisations, pas des users — Ă  clarifier
Session 07/04/2026 — Templates emails + migration PROD v3.0.8 [Feature, Deploy, UI]

Feature :

  • class-email-templates.php : Ă©diteur TinyMCE (Visuel), suppression tabs HTML/Aperçu, generate_preview() lit les overrides, bouton Éditer ouvre en Aperçu, bouton Aperçu ouvre version sauvegardĂ©e dans nouvel onglet
  • class-unsubscribe.php : nouveau module, token sĂ©curisĂ© bin2hex/sha256, page /desinscription/, suspension compte, footer email avec lien « Se dĂ©sinscrire » (conditionnel user_id)
  • 1019 comptes existants migrĂ©s en statut « validated »
  • Menu admin nettoyĂ© (frnix_cleanup_submenus) sur BIS et PROD
  • CSS JetEngine ID 14878 ajoutĂ© au mu-plugin frnix-header-css-fix.php

Deploy :

  • Migration PROD complĂšte : 7 modules v3.0.8 + 9 fichiers sync BIS→PROD
  • Table wp_frnix_unsubscribe_tokens créée sur BIS et PROD
  • Page /desinscription/ créée sur BIS (ID 26205) et PROD (ID 26189)

TODO :

  • FrnixCore_EmailManager pour centraliser wp_mail() avec user_id
  • Nettoyage emails : +tag, restructuration 3 champs, suppression alias
  • Navigation admin style Apple avec sous-onglets conditionnels

Connexion Ă  votre espace membre

Inscription
Tu es déjà inscrit, on se voit bientÎt !

Souscrivez Ă  la Newsletter FRNIX

En souscrivant la newsletter de FRNIX, vous serez réguliÚrement informé sur :

De plus, vous recevrez réguliÚrement des informations techniques, financiÚres, et organisationnelles concernant tout ce qui intéresse la communauté de l'interconnexion.