Aller au contenu

Vue d'ensemble de l'architecture

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.

ModuleResponsabilité
Core\PluginEnregistrement des CPT/taxonomies, chargement des scripts, gestionnaires AJAX éligibilité/géocodage, création de leads, notifications par e-mail
Admin\AdminMenus d’administration, meta boxes, import de centrales (CSV/XLSX), import de densité, cron RGPD, paramètres, colonnes/filtres admin, opérations en masse
API\APIEndpoints REST pour GeoJSON, proxy de géocodage, vérification d’éligibilité, soumission de formulaire HubSpot, gestion du cache
API\DensityControllerEndpoints REST pour la recherche de densité (par codgeo, par code postal)
Frontend\FrontendChargement des scripts frontend, gestionnaire de shortcode, génération GeoJSON
ClasseFichierRôle
Irisolaris_Map_Activatorincludes/class-irisolaris-map-activator.phpCré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_Uninstallerincludes/class-irisolaris-map-uninstaller.phpNettoyage : suppression des tables, retrait des capacités, suppression optionnelle des données de densité
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')
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)
  1. 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
  2. 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
  3. É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
  4. Autoloading PSR-4 — Les classes PHP utilisent l’autoloading Composer avec l’espace de noms Irisolaris\Map
  5. 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 bundle frontend.js