Matomo Tag Manager pour GLPI : de l'analytique sur chaque page, sans toucher au code

· Convergent · 3 min

GLPI ne dit rien de la façon dont vos équipes utilisent réellement l’outil : quelles pages servent, où l’on passe du temps, ce qui n’est jamais ouvert. Matomo Tag Manager répond à cette question — encore faut-il injecter son conteneur sur chaque page. Notre plugin le fait sans éditer un seul template, depuis le panneau d’administration de GLPI. Voici comment il est construit, et pourquoi nous l’avons fait simple.

Le besoin

On veut mesurer l’usage de GLPI avec une solution respectueuse de la vie privée et auto-hébergeable (Matomo), sans :

  • modifier les templates du cœur (qui sautent à chaque mise à jour) ;
  • créer une table de base de données de plus à maintenir ;
  • exposer une nouvelle surface de configuration au-delà de ce que GLPI protège déjà.

Le plugin tient en une idée : une URL de conteneur, collée une fois, chargée partout.

Fonctionnement

À chaque requête, le plugin se greffe sur le hook d’en-tête natif de GLPI ($PLUGIN_HOOKS) et émet une balise <script> qui pointe vers un petit loader statique (public/js/mtm-loader.js). Ce loader charge à son tour l’URL de votre conteneur Matomo. Le chargement est asynchrone : aucun surcoût perceptible.

Le conteneur est injecté sur toutes les pages — écrans authentifiés et page de connexion — ce qui permet de suivre le parcours complet, dès le login.

L’URL du conteneur est lue dans le magasin de configuration du cœur de GLPI :

Config::getConfigurationValues('plugin:matomo', ['container_url']);

Aucune table de plugin n’est créée, aucune donnée par asset n’est stockée. Le réglage vit dans le contexte plugin:matomo de la configuration GLPI, point.

Sécurité

Un plugin qui injecte du JavaScript sur chaque page — connexion comprise — doit être irréprochable. Nos garde-fous :

  • l’URL du conteneur est validée : elle doit commencer par https:// avant d’être enregistrée ;
  • la sortie est échappée (htmlspecialchars, ENT_QUOTES) au moment du rendu dans la page ;
  • la page de configuration est protégée par le droit cœur config: UPDATE (typiquement le profil super-admin) — le même droit que la configuration générale de GLPI ;
  • le plugin est csrf_compliant : le formulaire passe par le contrôleur protégé contre la CSRF de GLPI 11 ;
  • aucun droit personnalisé n’est enregistré, et le plugin n’écrit que dans le magasin de configuration de GLPI — il ne touche aucune table cœur ou tierce.

Prérequis

ÉlémentVersion
GLPI10.x ou 11.x
PHP≥ 8.1
Matomoune URL de conteneur Tag Manager joignable

Installation

Récupérez la dernière archive depuis la page des releases (ou installez-la directement depuis git avec notre plugin Git Plugin Installer), puis :

# extraire dans plugins/ de sorte que le chemin soit plugins/matomo/
sudo -u apache php bin/console plugin:install matomo
sudo -u apache php bin/console plugin:activate matomo
sudo -u apache php bin/console cache:clear

Mise en route

  1. Réglages → Matomo Tag Manager.
  2. Collez l’URL du conteneur Matomo (ex. https://stats.example.com/js/container_XXXXXXXX.js).
  3. Enregistrer — le conteneur est injecté au prochain chargement, le suivi démarre immédiatement.

Pourquoi si minimal

Le plugin fait une chose et la fait bien. Pas de table, pas de droit custom, pas de template patché : moins de surface, moins de casse aux mises à jour, et un audit de quelques minutes. C’est notre ligne de conduite sur tout l’écosystème GLPI que nous publions.

Version stable 1.0.0, licence GPL v2.0-or-later.

→ Code, releases et issues : https://github.com/FathiBenNasr/glpi-matomo


Cet article fait partie de notre série sur les plugins GLPI open source — voir aussi l’annonce open source de ce plugin. Besoin d’un plugin sur mesure, d’infogérance ou d’un durcissement GLPI ? Parlons-en.