Vue d'ensemble de l'architecture
Vue d’ensemble des modules
Section intitulée « Vue d’ensemble des modules »Le plugin suit une architecture PHP modulaire organisée en quatre espaces de noms :
Irisolaris\Map\├── Core\Plugin → Orchestrateur principal (CPT/taxonomie, scripts, AJAX)├── Admin\Admin → Interface d'administration (menus, meta boxes, imports, paramètres)├── API\API → REST API (GeoJSON, géocodage, éligibilité, HubSpot)├── API\DensityController → Endpoints REST pour les recherches de densité└── Frontend\Frontend → Rendu frontend (shortcodes, chargement des scripts, GeoJSON)Point d’entrée : irisolaris-map.php — fichier d’amorçage procédural qui initialise tous les modules.
Responsabilités des composants
Section intitulée « Responsabilités des composants »| Module | Responsabilité |
|---|---|
Core\Plugin | Enregistrement des CPT/taxonomies, chargement des scripts, gestionnaires AJAX éligibilité/géocodage, création de leads, notifications par e-mail |
Admin\Admin | Menus d’administration, meta boxes, import de centrales (CSV/XLSX), import de densité, cron RGPD, paramètres, colonnes/filtres admin, opérations en masse |
API\API | Endpoints REST pour GeoJSON, proxy de géocodage, vérification d’éligibilité, soumission de formulaire HubSpot, gestion du cache |
API\DensityController | Endpoints REST pour la recherche de densité (par codgeo, par code postal) |
Frontend\Frontend | Chargement des scripts frontend, gestionnaire de shortcode, génération GeoJSON |
Classes de support
Section intitulée « Classes de support »| Classe | Fichier | Rôle |
|---|---|---|
Irisolaris_Map_Activator | includes/class-irisolaris-map-activator.php | Création des tables de base de données, options par défaut, termes de taxonomie par défaut, capacités de rôle |
Irisolaris_Map_Uninstaller | includes/class-irisolaris-map-uninstaller.php | Nettoyage : suppression des tables, retrait des capacités, suppression optionnelle des données de densité |
Séquence d’initialisation
Section intitulée « Séquence d’initialisation »1. plugins_loaded → irisolaris_map_init() ├── new Core\Plugin() → Plugin::init() │ ├── add_action('init', 'register_post_types') │ ├── add_action('init', 'register_taxonomies') │ ├── add_action('wp_enqueue_scripts', 'register_scripts') │ ├── add_action('admin_enqueue_scripts', 'register_admin_scripts') │ └── AJAX handlers (eligibility, geocode) ├── new Admin\Admin() → Admin::init() [if is_admin()] │ ├── add_action('admin_menu', 'add_admin_menu') │ ├── add_action('add_meta_boxes', 'add_meta_boxes') │ ├── add_action('save_post_irisolaris_plant', 'save_plant_meta') │ ├── Admin columns/filters/sorting hooks │ ├── wp_schedule_event('daily', 'irisolaris_map_gdpr_cleanup') │ └── 16 AJAX handlers (import, density, cache, bulk ops) ├── new Frontend\Frontend() → Frontend::init() │ ├── add_action('wp_enqueue_scripts', 'enqueue_scripts') │ ├── add_shortcode('irisolaris_map', 'map_shortcode') │ └── add_filter('irisolaris_map_plants_data', 'filter_plants_data') └── new API\API() → API::init() ├── add_action('rest_api_init', 'register_routes') └── Cache invalidation hooks (save_post, delete_post, set_object_terms)
2. init → irisolaris_map_register_blocks() └── register_block_type_from_metadata('irisolaris-map/map')Graphe de dépendances
Section intitulée « Graphe de dépendances »Browser │ ├── MapLibre GL JS (CDN) ─── Map rendering ├── BAN API ─────────────── Address geocoding (direct) │ └── WordPress ├── REST API │ ├── /plants ──────── GeoJSON (cached via transients) │ ├── /density/{code} ─ INSEE density lookup │ ├── /geocode ──────── BAN API proxy │ ├── /check-eligibility │ └── /submit-join-form ──► HubSpot Forms API │ ├── AJAX (admin) │ ├── Import (plants) ─── PhpSpreadsheet │ ├── Import (density) │ └── Bulk operations │ └── Cron └── GDPR cleanup (daily)Décisions architecturales clés
Section intitulée « Décisions architecturales clés »- Cache basé sur les transients — Les réponses GeoJSON sont mises en cache sous forme de transients WordPress avec invalidation par incrémentation de version, plutôt que d’utiliser une couche de cache dédiée
- Soumission HubSpot côté serveur — Les métadonnées sensibles des centrales (identifiant chantier, SPV, PRM) ne sont jamais exposées via l’API publique ; elles sont récupérées côté serveur lors de la soumission du formulaire
- Éligibilité côté client — La vérification initiale d’éligibilité (distance + niveaux de densité) s’exécute dans le navigateur pour un retour instantané ; le serveur effectue une vérification définitive lors de la soumission du formulaire
- Autoloading PSR-4 — Les classes PHP utilisent l’autoloading Composer avec l’espace de noms
Irisolaris\Map - JS modulaire compilé en bundle — Le code source frontend est organisé en fichiers ES6+ modulaires (
assets/src/js/), compilés via Webpack en un unique bundlefrontend.js