WP Manifestindependent plugin directory
manifest / analytics / hamanalyst-stats

HamAnalyst Stats

WordPress GA4 dashboard plugin – OAuth2, zero dependencies

by HamAnalyst · github.com/albertm-hub/hamanalyst-stats · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/albertm-hub/hamanalyst-stats/archive/refs/heads/main.zip

Tableau de bord Google Analytics 4 pour WordPress — authentification OAuth2, zéro dépendance externe.

Dashboard HamAnalyst Stats


Fonctionnalités

Widget Description
Compteurs KPI Visiteurs uniques · Sessions · Pages vues sur 30 jours avec comparaison mois précédent
Activité quotidienne Courbe Chart.js des sessions sur les 30 derniers jours
OS / Plateformes Camembert Windows / Linux / Android / iOS / Macintosh
Top 10 pages Tableau titre + vues + tendance vs mois précédent
Provenance pays Drapeaux emoji + barre de progression relative
Temps réel Utilisateurs actifs, rafraîchi toutes les 60 secondes

Points techniques

  • Authentification OAuth2 Authorization Code Flow (aucun Service Account requis)
  • Refresh token chiffré AES-256-CBC dans wp_options
  • Appels API via wp_remote_postaucune bibliothèque PHP externe
  • Cache WP transients 1 heure, bouton "Vider le cache"
  • Thème sombre natif — fonctionne dans l'admin WP sans conflit CSS
  • Nonces WP sur tous les formulaires et requêtes AJAX
  • Compatible PHP 7.4+ et WordPress 5.6+

Captures d'écran

Dashboard (cliquer pour voir)

Le dashboard affiche les 6 widgets en temps réel avec thème sombre.

Page Settings

Upload du fichier JSON OAuth2, bouton "Connecter avec Google", statut de connexion.


Prérequis

  • WordPress ≥ 5.6
  • PHP ≥ 7.4 avec extensions openssl, json, mbstring
  • Un projet Google Cloud avec l'API Google Analytics Data API activée
  • Une propriété Google Analytics 4 (GA4)

Installation

1. Télécharger le plugin

Via Git

cd wp-content/plugins/
git clone https://github.com/hamanalyst/hamanalyst-stats.git

Via ZIP

Téléchargez la dernière release et décompressez dans wp-content/plugins/hamanalyst-stats/.

Aucun composer install requis — le plugin utilise uniquement les fonctions natives WordPress.

2. Activer le plugin

Extensions → Activer sur HamAnalyst Stats.

À l'activation, le répertoire wp-content/uploads/hamanalyst/ est créé avec un .htaccess bloquant tout accès HTTP direct.


Configuration OAuth2

Étape 1 — Créer les credentials Google

  1. Ouvrez Google Cloud Console et sélectionnez votre projet.
  2. APIs & Services → Bibliothèque → recherchez Google Analytics Data API → Activer.
  3. APIs & Services → Identifiants → Créer des identifiants → ID client OAuth 2.0.
  4. Type d'application : Application Web.
  5. Nom : HamAnalyst Stats (ou autre).
  6. URI de redirection autorisée — ajoutez exactement :
    https://votre-site.com/wp-admin/admin.php?page=hamanalyst-stats-settings
  7. Cliquez Créer puis Télécharger JSON.

Si l'écran de consentement OAuth n'est pas configuré, Google vous demandera de le faire avant. En mode "Test", ajoutez votre adresse Gmail en tant qu'utilisateur test.

Étape 2 — Configurer le plugin

  1. HamAnalyst Stats → Settings dans l'admin WordPress.
  2. Renseignez le GA4 Property ID (ex : 518606718).
    (Trouvable dans Google Analytics → Admin → Détails de la propriété)
  3. Uploadez le fichier JSON téléchargé à l'étape précédente.
  4. Cliquez Sauvegarder.

Étape 3 — Connecter Google

  1. Cliquez Connecter avec Google.
  2. Choisissez le compte Google qui a accès à votre propriété GA4.
  3. Autorisez l'accès en lecture à Google Analytics.
  4. Vous êtes redirigé vers Settings avec le message "Connexion Google réussie !".

Étape 4 — Voir les statistiques

HamAnalyst Stats → Dashboard — les données s'affichent immédiatement.


Structure du projet

hamanalyst-stats/
├── hamanalyst-stats.php          # Point d'entrée WordPress
├── composer.json                 # Métadonnées (aucune dépendance externe)
│
├── includes/
│   ├── class-ga4-oauth.php       # OAuth2 : auth URL, callback, refresh, chiffrement
│   ├── class-ga4-client.php      # GA4 Data API v1beta (REST pur via wp_remote_post)
│   └── class-cache.php           # Cache WP transients
│
├── admin/
│   ├── settings.php              # Page paramètres : upload JSON, connexion OAuth
│   └── dashboard.php             # Dashboard : 6 widgets
│
└── assets/
    ├── css/style.css             # Thème sombre
    └── js/charts.js              # Chart.js + polling temps réel

Architecture OAuth2

┌─────────────────────────────────────────────────────────────────┐
│                        Flow d'autorisation                       │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  [Settings] ──"Connecter"──► accounts.google.com/o/oauth2/auth  │
│                                         │                        │
│                              scope: analytics.readonly           │
│                              access_type: offline                │
│                              prompt: consent                     │
│                                         │                        │
│  [admin_init] ◄──── redirect ?code=... + state=nonce ──────────  │
│       │                                                          │
│       ├── Vérifie le nonce WP (state)                           │
│       ├── POST oauth2.googleapis.com/token                      │
│       ├── Reçoit access_token + refresh_token                   │
│       ├── Chiffre en AES-256-CBC (clé = AUTH_KEY + SECURE_AUTH_KEY) │
│       └── Stocke dans wp_options (autoload = false)             │
│                                                                  │
│  [Appel API] ──► get_access_token()                             │
│       ├── Token valide ? → utilise access_token en cache        │
│       └── Token expiré ? → POST /token (grant: refresh_token)   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Sécurité

Mesure Détail
Nonces WP Tous les formulaires et requêtes AJAX
Capability check manage_options requis sur chaque page et handler AJAX
Chiffrement tokens AES-256-CBC, clé dérivée des WP secret keys (AUTH_KEY + SECURE_AUTH_KEY)
JSON protégé Stocké dans wp-content/uploads/hamanalyst/ avec .htaccess Deny from all
State OAuth2 Nonce WordPress vérifié au retour du flow Google
Output buffering ob_start() sur les handlers AJAX pour éviter toute corruption JSON

Dépannage

Erreur "redirect_uri_mismatch"

L'URI de redirection dans Google Cloud Console ne correspond pas exactement à celle du plugin.

Copiez l'URI affichée dans Settings (section "Comment créer les credentials") et collez-la dans Google Cloud Console → Identifiants → votre client OAuth → URI de redirection autorisée.

Google ne retourne pas de refresh_token

Le refresh_token est uniquement retourné lors de la première autorisation, ou quand prompt=consent est forcé. Si vous avez déjà autorisé l'application :

  1. Allez sur myaccount.google.com/permissions.
  2. Révoquez l'accès à "HamAnalyst Stats".
  3. Cliquez à nouveau sur "Connecter avec Google".
PERMISSION_DENIED sur l'API GA4

Le compte Google utilisé pour l'OAuth n'a pas accès à la propriété GA4.

Google Analytics → Admin → Gestion des accès à la propriété → ajoutez votre adresse email avec le rôle Lecteur.

Le dashboard affiche des données vides
  • Vérifiez que le Property ID correspond bien à une propriété GA4 (pas Universal Analytics).
  • GA4 ne remonte pas de données pour les jours sans trafic — c'est normal.
  • Videz le cache (bouton en haut à droite du dashboard).
Erreur PHP "openssl_encrypt not found"

L'extension OpenSSL PHP n'est pas chargée. Dans ce cas, les tokens sont stockés en base64 non chiffré (fallback automatique). Activez l'extension openssl dans votre php.ini pour un stockage sécurisé.


Développement

# Cloner
git clone https://github.com/hamanalyst/hamanalyst-stats.git
cd hamanalyst-stats

# Aucune installation de dépendance requise
# Le plugin utilise uniquement WordPress core + WP HTTP API

Tests manuels

Scénario Vérification
Premier lancement Page Settings → "Uploadez d'abord le fichier JSON"
JSON uploadé, non connecté Bouton "Connecter avec Google" visible
Flow OAuth complet Message flash "Connexion Google réussie !"
Token expiré Refresh automatique sans action utilisateur
Vider le cache Toast "Cache vidé." + rechargement des données
Déconnecter Statut revient à "Non connecté"

Contribuer

Les contributions sont les bienvenues.

  1. Forkez le dépôt
  2. Créez une branche : git checkout -b feature/ma-fonctionnalite
  3. Committez : git commit -m 'feat: description'
  4. Pushez : git push origin feature/ma-fonctionnalite
  5. Ouvrez une Pull Request

Style de code

  • PSR-12 pour PHP
  • Préfixe hamanalyst_ sur toutes les fonctions globales
  • Classes préfixées HamAnalyst_
  • Nonces WP obligatoires sur tout formulaire / AJAX

Changelog

Voir CHANGELOG.md.


Licence

GPL-2.0-or-later — voir LICENSE.


Développé pour HamAnalyst.org — L'assistant IA pour radioamateurs.