CLEO - Application de gestion de devis
Vue d'ensemble
CLEO est une application web de gestion de devis développée en PHP 8.3 pour les PME. Elle utilise une architecture MVC classique avec un framework maison appelé "d6".
Version actuelle : 2.0.3 (gestion multi-contacts complétée le 21 octobre 2025)
Architecture technique
Stack technologique
- Langage : PHP 8.3
- Architecture : MVC (Model-View-Controller)
- Framework : Framework maison "d6"
- Base de données : MariaDB 11.4
- Connexion DB : PDO avec requêtes préparées
- Configuration : Variables d'environnement (.env)
- Gestion des dépendances : Composer
- JavaScript : Vanilla JS uniquement (PAS de jQuery)
- CSS Framework : Bootstrap 3.3.7 (sans jQuery)
- Bibliothèques principales :
- PHPMailer 6.8 (envoi d'emails)
- PHPSpreadsheet 1.28 (export/import Excel)
- phpseclib 3.0 (fonctions de sécurité)
Structure des dossiers
cleo/
├── config/ # Configuration de l'application
│ ├── conf.php # Configuration principale (DB, paths, etc.)
│ └── init.php # Initialisation et définition des constantes
├── controllers/ # Contrôleurs MVC
│ ├── cjx*.php # Contrôleurs AJAX
│ └── c*.php # Contrôleurs standards
├── models/ # Modèles de données
├── views/ # Vues et templates
│ └── layouts/ # Layouts réutilisables
├── pub/ # Ressources publiques
│ └── res/
│ └── d6/ # Framework d6
├── vendor/ # Dépendances Composer
└── index.php # Point d'entrée principal
Fonctionnalités métier
Modules principaux
-
Gestion des devis (
cdevis.php,mdevis.php,vdevis.php)- Création, modification, duplication de devis
- Workflow de validation multi-niveaux
- Historisation des modifications
- Calcul automatique des marges
- Gestion des remises par paliers de quantité
-
Gestion des clients (
cclients.php)- Base clients avec contacts multiples (table
clients_contacts) - Gestion des contacts via modale Bootstrap intégrée aux devis
- Contact principal automatique avec indicateur visuel
- Segmentation par secteur géographique
- Types de clients paramétrables
- Import/export de données
- Base clients avec contacts multiples (table
-
Gestion des marchés (
cmarches.php)- Catalogue de marchés
- Association aux devis
- Visibilité paramétrable par rôle
-
Administration (
cusers.php,csap.php)- Gestion des utilisateurs
- Système de rôles et permissions
- Interface d'administration
Système de rôles
- DIR-CO (Direction commerciale) : Accès complet, vision globale
- DV (Directeur des ventes) : Gestion de son équipe de RR
- RR (Responsable régional) : Gestion de ses propres devis
- Admin (rôle 90) : Administration système
Base de données
Architecture actuelle
- Base unique :
cleosur le containermaria3 - Connexion : PDO avec pattern Singleton
- Sécurité : Requêtes préparées systématiques
Tables principales
devis: Table principale des devis (champfk_contactdepuis v2.0.3)devis_produits: Lignes de produits des devisdevis_histo: Historique des modificationsclients: Base clientsclients_contacts: Contacts multiples par client (v2.0.3)produits: Catalogue produitsproduits_familles: Familles de produits avec margesmarches: Référentiel des marchésusers: Utilisateurs et hiérarchiex_*: Tables de référence (statuts, types, etc.)y_pages: Configuration des pages/routes
Points de sécurité
Vulnérabilités corrigées
✅ v2.0.1 - Stockage des mots de passe
- Credentials externalisés dans
.env - Variables d'environnement utilisées systématiquement
✅ v2.0.1 - Protection contre les injections SQL
- Migration complète vers PDO
- Requêtes préparées dans la classe
Database - Pattern Singleton pour la connexion
✅ v2.0.1 - Gestion des erreurs sécurisée
- Classe
Databaseavec gestion d'erreurs centralisée - Logging contrôlé par variables d'environnement
- Mode debug désactivable en production
✅ v2.0.2 - Corrections critiques
- Sanitisation stricte des entrées utilisateur
- Validation des paramètres AJAX
- Fonction
nettoie_input()utilisée systématiquement
✅ v2.0.3 - Gestion multi-contacts sécurisée
- Contrôleur AJAX
cjxcontacts.phpavec requêtes préparées - Validation des foreign keys et soft delete
- Prévention de suppression du dernier contact actif
Vulnérabilités restantes à traiter
1. Injections SQL résiduelles
- Localisation : Certains contrôleurs (
controllers/cjx*.php) - Problème : Concaténations directes dans certaines requêtes complexes
- Recommandation : Audit complet et migration progressive
2. Configuration IP en dur
- Localisation :
config/conf.php - Problème : Certaines IPs encore hardcodées
- Recommandation : Migration complète vers
.env
Points positifs de sécurité
- Utilisation de
password_hash()avec bcrypt pour les mots de passe utilisateurs - Fonction
nettoie_input()pour la sanitisation des entrées - Gestion des sessions PHP native
- Contrôle d'accès basé sur les rôles
Performances et optimisations
Points d'attention
- Requêtes non optimisées : Pas de pagination visible dans les listes
- Absence de cache : Requêtes répétitives non mises en cache
- Chargement des données : Chargement complet des listes sans limite
Recommandations
- Implémenter une pagination côté serveur
- Ajouter un système de cache (Redis/Memcached)
- Optimiser les requêtes avec des index appropriés
- Utiliser le lazy loading pour les données volumineuses
Qualité du code
Points forts
- Structure MVC claire et cohérente
- Séparation des responsabilités respectée
- Nommage cohérent des fichiers et fonctions
- Utilisation de Composer pour les dépendances
- JavaScript Vanilla (pas de dépendance jQuery)
Axes d'amélioration
-
Standards PHP modernes
- Absence de namespaces
- Pas d'autoloading PSR-4
- Manque de typage strict PHP 8.3
-
Documentation
- Peu de commentaires PHPDoc
- Absence de documentation API
- Pas de README technique
-
Tests
- Aucun test unitaire visible
- Pas de tests d'intégration
- Absence de CI/CD
-
Gestion des erreurs
- Try/catch non systématiques
- Logging basique via
eLog() - Pas de monitoring applicatif
Plan d'amélioration recommandé
Court terme (Sécurité - En cours)
- ✅ Migrer les credentials vers des variables d'environnement
- ✅ Remplacer les requêtes SQL par des requêtes préparées (classe Database)
- ✅ Implémenter une gestion d'erreurs sécurisée
- ⏳ Auditer et corriger les failles XSS potentielles
Moyen terme (Qualité et maintenabilité)
- Migrer vers une structure PSR-4 avec namespaces
- Implémenter des tests unitaires (PHPUnit)
- Ajouter une documentation PHPDoc complète
- Mettre en place un système de logging structuré (Monolog)
Long terme (Evolution et performance)
- Considérer la migration vers un framework moderne (Symfony/Laravel)
- Implémenter une API REST pour découpler front/back
- Ajouter un système de cache performant
- Mettre en place un pipeline CI/CD
Architecture de déploiement
Environnement DEV (Actuel - IN3)
- Container
dva-front: Application PHP 8.3 + Nginx (Alpine Linux)- IP : 13.23.33.42
- MariaDB : Supprimé (12/09/2025)
- Container
maria3: Base de données MariaDB 11.4- IP : 13.23.33.4
- Base :
cleo
Environnement PROD (Futur - IN4)
- Container
nx4: Application PHP - Container
maria4: Base de données
Conclusion
CLEO v2.0.3 représente l'aboutissement de trois itérations majeures d'amélioration :
v2.0.1 - Architecture sécurisée
- Base de données unique et centralisée
- Connexions PDO avec requêtes préparées
- Configuration externalisée
- Séparation application/base de données
v2.0.2 - Sécurité renforcée
- Sanitisation systématique des entrées
- Validation stricte des paramètres AJAX
- Corrections de vulnérabilités critiques
v2.0.3 - Gestion multi-contacts
- Migration vers table relationnelle
clients_contacts - Interface modale intégrée dans les devis
- CRUD complet avec soft delete
- Gestion automatique du contact principal
L'application dispose maintenant d'une base solide pour évoluer vers des standards modernes tout en maintenant sa stabilité opérationnelle.
Document mis à jour le 21 octobre 2025 Version 2.0.3 - Gestion multi-contacts