JoeCMS
Le CMS PHP sur lequel tournent les autres projets : un moteur open source à l'arrêt depuis des années, remis en marche sous PHP 8 et transformé en un paquet qui s'installe depuis le navigateur.
Le problème
Chaque nouveau projet repartait des mêmes fondations : utilisateurs, droits, e-mails, langues, cache, back-office. Le moteur sur lequel je travaillais depuis des années, VGallery, était resté à PHP 7 et ne démarrait même pas sous PHP 8 : des constructions retirées du langage et des centaines d'appels sur des valeurs nulles devenus des erreurs fatales.
Les alternatives étaient un CMS générique plié à chaque projet, ou un framework sur lequel tout reconstruire. J'ai choisi de récupérer le moteur : une migration prudente, qui reproduit le comportement de PHP 7 au lieu de le réécrire, et un installateur qui transforme une archive ZIP en un site qui fonctionne.
Comment ça marche
Structure
Les contenus sont des nœuds typés avec des champs dynamiques : il n'y a pas une table par type de contenu, et en ajouter un relève de la configuration, pas du code. Autour, un routage déclaratif en XML, des gabarits à balises et à blocs, et un back-office dont les grilles et formulaires sont générés à partir de la base de données.
Parcours d'usage
On décompresse le ZIP dans le dossier du site et on ouvre le navigateur. Un assistant en dix étapes vérifie les prérequis, crée la base de données, teste l'envoi d'e-mails, recueille les informations de l'entreprise et laisse un site multilingue déjà rempli, avec pages légales, robots.txt et règles Apache liées au vrai domaine.
Choix techniques
Des corrections prudentes plutôt que des réécritures, sur un code sans tests : conversions de type et contrôles, et un lint après chaque modification de masse. L'installateur est indépendant du framework, car il doit fonctionner quand le CMS ne démarre pas encore. Une erreur fatale devient une page 500 avec un code à chercher dans les journaux, jamais un fichier et une ligne à l'écran.
Limites connues
C'est un moteur qui a presque vingt ans d'histoire : il cohabite avec quelques classes dupliquées du framework et des parties héritées laissées inertes. Le nouvel espace de gestion des contenus est encore en développement, et la validation complète sur d'autres hébergements que le mien reste à terminer.
Chiffres
| Fichiers PHP au point de départ, environ | 14 400 |
|---|---|
| Fichiers corrigés lors de la migration vers PHP 8 | 913 |
| Tables du schéma | 218 |
| Étapes de l'assistant d'installation | 10 |
| Intégrations tierces configurables | 31 |
| Langues du paquet de base | 4 |
Stack
- PHP 8
- MySQL / MariaDB
- Apache
- SCSS
- JavaScript
- Linux
JoeCMS dérive de VGallery (GPL-3) d'Alessandro Stucchi.