WP Manifestindependent plugin directory
manifest / ecommerce / wc-tb-web-parrainage

WC TB-Web Parrainage

Plugin WordPress WooCommerce pour système de parrainage TB Web

by TB-Web · github.com/srgabrysh/wc-tb-web-parrainage

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/srgabrysh/wc-tb-web-parrainage/archive/refs/heads/main.zip

Version: 2.21.4 Auteur: TB-Web
Compatible: WordPress 6.0+, PHP 8.1+, WooCommerce 3.0+

Description

Plugin de parrainage WooCommerce avec webhooks enrichis. Ce plugin combine cinq fonctionnalités principales :

  1. Système de code parrain au checkout - Permet aux clients de saisir un code parrain lors de la commande avec validation en temps réel
  2. Calcul automatique des dates de fin de remise - Calcule et stocke automatiquement les dates de fin de période de remise parrainage (12 mois + marge de sécurité)
  3. Masquage conditionnel des codes promo - Masque automatiquement les champs de codes promo pour les produits configurés
  4. Webhooks enrichis - Ajoute automatiquement les métadonnées d'abonnement et de tarification parrainage dans les webhooks
  5. Onglet "Mes parrainages" côté client - Interface utilisateur dédiée dans Mon Compte pour consulter ses parrainages

Fonctionnalités

✨ Système de Parrainage

  • Champ "Code parrain" au checkout WooCommerce (conditionnel selon produits configurés)
  • Validation en temps réel via AJAX (format et existence en BDD)
  • Messages dynamiques selon les produits du panier
  • Prévention de l'auto-parrainage
  • Stockage complet des informations dans les commandes
  • Affichage enrichi dans l'administration des commandes

📅 Calcul Automatique des Dates de Fin de Remise

  • Calcul automatique de la date de fin de période de remise parrainage (12 mois + 2 jours de marge)
  • Stockage des dates dans les métadonnées des commandes et abonnements
  • Intégration aux webhooks avec la clé parrainage_pricing
  • Logs de traçabilité pour toutes les opérations de calcul

🚫 Masquage Conditionnel des Codes Promo

  • Masquage automatique des champs codes promo au panier et checkout
  • Activation selon les produits configurés dans l'interface d'administration
  • Désactivation complète des fonctionnalités de coupons pour les produits concernés

NOUVEAU v2.6.0 - Workflow Asynchrone et Données Réelles

Le système de remises parrain dispose maintenant d'un workflow asynchrone complet qui traite les remises en arrière-plan pour optimiser les performances du checkout :

🔄 Workflow en 3 Phases

  1. Marquage Synchrone - Identification rapide des commandes avec parrainage (< 50ms)
  2. Programmation Asynchrone - Planification automatique lors de l'activation de l'abonnement filleul
  3. Traitement Différé - Calculs réels des remises via le système CRON WordPress

📊 Données Calculées en Temps Réel

  • Remplacement des données mockées par de vrais calculs basés sur les classes techniques v2.5.0
  • Statuts de workflow visibles : CALCULÉ (v2.6.0), EN COURS, PROGRAMMÉ, ERREUR
  • Monitoring complet via les logs avec canal spécialisé discount-processor
  • Gestion d'erreurs robuste avec retry automatique (max 3 tentatives)

⚠️ Mode Simulation v2.6.0

Les remises sont calculées mais non appliquées aux abonnements WooCommerce. Cette version permet de :

  • Valider le workflow complet en sécurité
  • Visualiser les calculs réels dans les interfaces
  • Tester la robustesse du système asynchrone

🔧 Activation et Vérification du Workflow

Prérequis obligatoires :

  1. CRON WordPress activé : Vérifier que DISABLE_WP_CRON n'est pas défini ou = false
  2. WooCommerce Subscriptions : Plugin actif et fonctionnel
  3. Parrainage activé : Dans Réglages > TB-Web Parrainage > Paramètres

Vérification du workflow :

// Via code PHP - Vérifier la santé du système
global $wc_tb_parrainage_plugin;

// Validation de l'état de préparation
$readiness = $wc_tb_parrainage_plugin->validate_system_readiness();
if ( $readiness['is_ready'] ) {
    echo "✅ Système prêt pour le workflow asynchrone\n";
} else {
    echo "❌ Erreurs détectées:\n";
    foreach ( $readiness['errors'] as $error ) {
        echo "- $error\n";
    }
}

// Rapport de diagnostic complet
$diagnostic = $wc_tb_parrainage_plugin->generate_diagnostic_report();
echo "📊 Statistiques workflow:\n";
print_r( $diagnostic['workflow_statistics'] );

// Logs à surveiller
// Canal 'discount-processor' dans Réglages > TB-Web Parrainage > Logs

Test du workflow complet :

  1. Créer une commande avec code parrain valide
  2. Activer l'abonnement filleul correspondant
  3. Attendre 5 minutes (délai de sécurité)
  4. Vérifier les logs pour "Remise parrainage calculée avec succès"
  5. Contrôler les statuts dans les interfaces admin/client

🧪 Tests de Validation Recommandés

Test de Conformité :

// Validation complète du système
global $wc_tb_parrainage_plugin;
$validation = $wc_tb_parrainage_plugin->validate_system_readiness();

if ( $validation['is_ready'] ) {
    echo "✅ Système validé - Prêt pour tests\n";

    // Générer rapport de diagnostic
    $report = $wc_tb_parrainage_plugin->generate_diagnostic_report();
    echo "📊 Commandes traitées 24h: " . $report['workflow_statistics']['processed_24h'] . "\n";

} else {
    echo "❌ Problèmes détectés:\n";
    foreach ( $validation['errors'] as $error ) {
        echo "- " . $error . "\n";
    }

    echo "\n💡 Recommandations:\n";
    foreach ( $validation['recommendations'] as $rec ) {
        echo "- " . $rec . "\n";
    }
}

Tests de Robustesse :

  1. Test avec code parrain invalide : Vérifier les logs d'erreur
  2. Test sans WooCommerce Subscriptions : Valider les alertes système
  3. Test avec CRON désactivé : Contrôler les recommandations
  4. Test de charge : 50+ commandes simultanées avec codes parrain

💰 v2.10.0 - Garantie Montants Facturés avec Remise

  • Correction critique : Force synchronisation _order_total après calculate_totals()
  • Garantie facturation : WooCommerce facture toujours les montants avec remise
  • Tests unitaires complets : Validation cohérence totale des données
  • Robustesse système : Protection contre désynchronisation montants
  • Monitoring renforcé : Logs détaillés pour traçabilité des corrections

💰 v2.4.0 - Interfaces Mockées pour Remises Parrain

  • Nouvelles colonnes admin : "Remise Appliquée" et "Statut Remise" dans l'interface de parrainage
  • Popups interactifs : Détails complets des remises au survol des badges de statut
  • Section résumé côté client : Dashboard des économies avec cartes animées
  • Données simulées : Génération intelligente de statuts variés pour validation UX
  • Animations et interactions : Interface moderne avec tooltips et transitions fluides
  • Responsive design : Adaptation parfaite sur mobile et tablette
  • Logs des actions de masquage pour le suivi

🔗 Webhooks Enrichis

  • Ajout automatique des métadonnées d'abonnement dans les webhooks
  • Nouvelles données de tarification parrainage via la clé parrainage_pricing
  • Informations complètes : ID, statut, dates, articles, facturation
  • Support WooCommerce Subscriptions
  • Logs détaillés de tous les traitements

🎛️ Interface d'Administration

  • Nouvel onglet "Parrainage" - Interface complète de consultation des données de parrainage
  • Consultation en temps réel des logs (avec filtres et recherche)
  • Statistiques de parrainage
  • Paramètres configurables
  • Configuration des produits par interface graphique
  • Nettoyage automatique des anciens logs

📊 Interface de Parrainage (Admin)

  • Tableau groupé par parrain - Visualisation claire des parrains et leurs filleuls
  • Système de filtres avancé - Filtrage par date, parrain, produit, statut d'abonnement
  • Export CSV et Excel - Export complet des données avec statistiques
  • Édition inline - Modification des avantages directement dans le tableau
  • Pagination optimisée - Gestion performante de gros volumes de données
  • Interface responsive - Adaptée mobile et tablette
  • Liens directs - Accès rapide aux profils utilisateurs, commandes et abonnements

👤 Onglet "Mes parrainages" côté client (Nouveau v1.3.0)

  • Onglet dédié dans Mon Compte - Interface utilisateur intuitive et sécurisée
  • Contrôle d'accès strict - Visible uniquement pour les abonnés actifs WooCommerce Subscriptions
  • Tableau des filleuls - Affichage des parrainages avec email masqué pour confidentialité
  • Message d'invitation personnalisé - Code parrain et lien de parrainage si aucun filleul
  • Interface responsive - Design adaptatif mobile/tablette avec masquage intelligent des colonnes
  • Badges de statut colorés - Statuts d'abonnement visuellement distincts
  • Limite de performance - Affichage des 10 derniers parrainages pour un chargement rapide
  • CSS natif WooCommerce - Intégration parfaite avec tous les thèmes compatibles

📦 Nouveautés Version 2.4.0 (26-07-25 à 17h54)

🎯 Interfaces Mockées pour Remises Parrain

Cette version introduit des interfaces utilisateur enrichies avec des données simulées pour valider l'ergonomie des futures fonctionnalités de remise avant l'implémentation de la logique métier réelle.

🏗️ Architecture Ajoutée

Nouvelles méthodes mockées :

  • ParrainageDataProvider::get_mock_discount_data() - Génération de données de remise simulées
  • MyAccountDataProvider::get_client_mock_discount_data() - Données côté client
  • MyAccountDataProvider::get_savings_summary() - Calcul du résumé global des économies

Nouveaux fichiers :

  • assets/parrainage-admin-discount.js - Interactions admin (popups, animations)
  • assets/my-account-discount.js - Interactions client (tooltips, animations)

📊 Interface Administration Enrichie

Nouvelles colonnes dans le tableau de parrainage :

  • "Remise Appliquée" : Montant de la remise avec date d'application
  • "Statut Remise" : Badge interactif (ACTIVE, EN ATTENTE, ÉCHEC, SUSPENDUE)

Fonctionnalités interactives :

  • Popups détaillés au survol des badges de statut
  • Animations : Pulsation pour statuts "pending", transitions fluides
  • Filtrage rapide par statut de remise
  • Notifications en temps réel lors des changements de statut

🎨 Interface Client Modernisée

Section "Résumé de vos remises" :

  • 4 cartes animées : Remises actives, Économie mensuelle, Économies totales, Prochaine facturation
  • Actions en attente : Notifications des remises en cours de traitement
  • Colonne enrichie : Statuts visuels avec icônes emoji et messages explicites

Expérience utilisateur :

  • Animations d'entrée progressives pour chaque élément
  • Tooltips informatifs au survol des statuts
  • Notifications lors des changements de statut
  • Simulation temps réel : Évolution des statuts pour démonstration

🔧 Données Simulées Intelligentes

Génération cohérente :

  • Utilisation de mt_srand() basée sur les IDs pour des résultats reproductibles
  • 4 statuts variés : active (vert), pending (orange), failed (rouge), suspended (gris)
  • Montants réalistes : Entre 5€ et 15€ de remise mensuelle
  • Dates cohérentes : Application récente, prochaine facturation calculée

Cache optimisé :

  • 5 minutes de cache pour les données mockées
  • Invalidation automatique lors des modifications
  • Performance : Pas d'impact sur les requêtes existantes

🎨 Design System Cohérent

Styles CSS ajoutés :

  • Badges de statut avec couleurs sémantiques et animations
  • Cartes économies avec gradients et ombres modernes
  • Popups responsives avec positionnement intelligent
  • Grille adaptative pour mobile, tablette et desktop

Responsive design :

  • Mobile first : Masquage intelligent des colonnes selon la taille d'écran
  • Touch friendly : Interactions tactiles optimisées
  • Accessibilité : Navigation clavier, lecteurs d'écran, attributs ARIA

Performance et Compatibilité

Optimisations :

  • Chargement conditionnel : CSS/JS uniquement sur les pages concernées
  • Animations performantes : Utilisation de transform plutôt que propriétés coûteuses
  • Dégradation gracieuse : Fonctionnement même si JavaScript désactivé

Compatibilité :

  • WordPress 6.0+ : Utilisation des APIs modernes
  • WooCommerce 3.0+ : Intégration native avec les hooks existants
  • Thèmes standards : Styles isolés pour éviter les conflits

🎯 Objectifs Validés

Validation UX : Interface intuitive pour les administrateurs et clients
Feedback précoce : Démonstration visuelle des futures fonctionnalités
Base technique : Architecture prête pour recevoir les vraies données
Tests visuels : Responsive design testé sur toutes les résolutions

Cette version 2.4.0 pose les fondations visuelles pour les fonctionnalités de remise parrain, permettant de valider l'ergonomie avant l'implémentation de la logique métier dans les prochaines versions.

Installation

1. Installation manuelle

  1. Téléchargez le plugin
  2. Uploadez le dossier wc-tb-web-parrainage dans /wp-content/plugins/
  3. Activez le plugin via l'interface WordPress

2. Via l'interface WordPress

  1. Allez dans Extensions > Ajouter
  2. Uploadez le fichier ZIP du plugin
  3. Activez le plugin

Configuration

Prérequis

  • WordPress 6.0 ou supérieur
  • PHP 8.1 ou supérieur
  • WooCommerce installé et activé
  • WooCommerce Subscriptions (requis pour le système de parrainage et l'onglet "Mes parrainages")

Paramètres

Rendez-vous dans Réglages > TB-Web Parrainage pour configurer :

  • Activer les webhooks enrichis - Ajoute les métadonnées d'abonnement
  • Activer le système de parrainage - Affiche le champ code parrain au checkout (conditionnel)
  • Masquer les codes promo - Masque automatiquement les codes promo pour les produits configurés
  • 🕐 Rétention des logs - Durée de conservation (1-365 jours)

Interface de Parrainage

Accédez à l'onglet "Parrainage" pour :

  • Consulter les données - Tableau groupé par parrain avec leurs filleuls
  • Filtrer les résultats - Par période, parrain, produit ou statut d'abonnement
  • Exporter les données - Format CSV ou Excel avec statistiques intégrées
  • Modifier les avantages - Édition inline directement dans le tableau
  • Naviguer rapidement - Liens directs vers les profils et commandes

Utilisation

Codes Parrain

Les codes parrain correspondent aux ID d'abonnements actifs WooCommerce Subscriptions :

  • Format : 4 chiffres (ex: 4896)
  • Validation automatique en base de données
  • Affichage des informations du parrain lors de la validation

Configuration par Produit

Le plugin utilise une interface d'administration pour configurer les produits. Les fonctionnalités suivantes s'appliquent uniquement aux produits configurés :

  • Champ "Code parrain" : Visible et obligatoire seulement pour les produits configurés
  • Masquage codes promo : Les codes promo sont masqués automatiquement
  • Messages personnalisés : Descriptions et avantages spécifiques par produit

Par défaut configuré pour :

  • Produits 6713, 6524, 6519 : "1 mois gratuit supplémentaire"
  • Produit 6354 : "10% de remise"
  • Autres produits : "Avantage parrainage"

Webhooks

Les webhooks WooCommerce de type "order" sont automatiquement enrichis avec :

{
  "has_subscriptions": true,
  "subscriptions_count": 1,
  "subscription_ids": [4896],
  "subscription_metadata": [
    {
      "subscription_id": 4896,
      "subscription_status": "active",
      "subscription_start_date": "2024-01-01",
      "subscription_next_payment": "2024-02-01",
      "subscription_total": "29.99",
      "subscription_currency": "EUR",
      "subscription_items": [...]
    }
  ],
  "parrainage_pricing": {
    "date_fin_remise_parrainage": "2025-07-24",
    "date_debut_parrainage": "2024-07-22",
    "date_fin_remise_parrainage_formatted": "24-07-2025",
    "date_debut_parrainage_formatted": "22-07-2024",
    "jours_marge_parrainage": 2,
    "periode_remise_mois": 12,
    "remise_parrain_montant": 7.50,
    "remise_parrain_unite": "EUR",
    "prix_avant_remise": 89.99,
    "frequence_paiement": "mensuel"
  },
  "parrainage": {
    "actif": true,
    "filleul": {
      "code_parrain_saisi": "6894",
      "avantage": "10% de remise sur la 1ère année d'adhésion"
    },
         "parrain": {
       "user_id": 17,
       "subscription_id": "6894",
       "email": "ga.du@outlook.com",
       "nom_complet": "Charlotte Letest",
       "prenom": "Charlotte"
     },
    "dates": {
      "debut_parrainage": "2024-07-22",
      "fin_remise_parrainage": "2025-07-24",
      "debut_parrainage_formatted": "22-07-2024",
      "fin_remise_parrainage_formatted": "24-07-2025",
      "jours_marge": 2,
      "periode_remise_mois": 12
    },
    "produit": {
      "prix_avant_remise": 89.99,
      "frequence_paiement": "mensuel"
    },
    "remise_parrain": {
      "montant": 7.50,
      "unite": "EUR"
    }
  }
}

Clé parrainage_pricing

Cette nouvelle clé n'apparaît que si la commande contient un code parrain valide :

  • date_fin_remise_parrainage : Date calculée de fin de période de remise au format YYYY-MM-DD
  • date_debut_parrainage : Date de début de l'abonnement avec parrainage au format YYYY-MM-DD
  • date_fin_remise_parrainage_formatted : Date de fin de remise au format DD-MM-YYYY
  • date_debut_parrainage_formatted : Date de début au format DD-MM-YYYY
  • jours_marge_parrainage : Nombre de jours de marge ajoutés (défaut : 2)
  • periode_remise_mois : Durée de la période de remise en mois (12)

Tarification enrichie (v2.2.0)

La section parrainage_pricing inclut désormais des informations complètes sur la tarification parrainage :

  • remise_parrain_montant : Montant fixe configuré de la remise en euros (selon configuration produit)
  • remise_parrain_unite : Unité monétaire ('EUR')
  • prix_avant_remise : Prix standard avant application de la remise parrainage en euros
  • frequence_paiement : Fréquence de facturation ('unique', 'mensuel', 'annuel')

Note : Ces clés ne sont présentes que si le produit a une configuration complète. Dans le cas contraire, les clés remise_parrain_status: 'pending' et remise_parrain_message indiquent que la remise sera appliquée selon la configuration produit.

Objet parrainage unifié restructuré (v2.2.0)

La section parrainage regroupe toutes les données de parrainage dans une structure logique et hiérarchisée :

Structure générale :

  • actif : Boolean indiquant si un parrainage est actif pour cette commande
  • filleul : Informations côté réception du parrainage
  • parrain : Informations d'identification du parrain
  • dates : Données temporelles du système de parrainage
  • produit : Informations tarifaires générales du produit
  • remise_parrain : Calculs de remise spécifiques pour le parrain

Section filleul :

  • code_parrain_saisi : Code parrain tapé par le filleul au checkout
  • avantage : Avantage que reçoit le filleul grâce au parrainage

Section parrain :

  • user_id : ID utilisateur WordPress du parrain
  • subscription_id : ID de l'abonnement du parrain
  • email : Email du parrain
  • nom_complet : Nom complet du parrain
  • prenom : Prénom du parrain (v2.0.6+)

Section dates :

  • debut_parrainage : Date de début du parrainage (YYYY-MM-DD)
  • fin_remise_parrainage : Date de fin de période de remise (YYYY-MM-DD)
  • debut_parrainage_formatted : Date début au format DD-MM-YYYY
  • fin_remise_parrainage_formatted : Date fin au format DD-MM-YYYY
  • jours_marge : Jours de marge ajoutés (défaut: 2)
  • periode_remise_mois : Durée de remise en mois (défaut: 12)

Section produit :

  • prix_avant_remise : Prix standard du produit avant application de remises en euros
  • frequence_paiement : Fréquence de facturation ('unique', 'mensuel', 'annuel')

Section remise_parrain :

  • montant : Montant fixe de la remise en euros (selon configuration produit)
  • unite : Unité monétaire ('EUR')

Ou si le produit n'a pas de configuration complète :

  • status : 'pending'
  • message : 'La remise sera appliquée selon la configuration produit'

Avantages v2.2.0 : Cette structure restructurée améliore la séparation des responsabilités avec une distinction claire entre les informations produit (tarification générale) et les informations de remise parrain (bénéfice spécifique). Cela facilite l'évolutivité et la maintenance du code.

Développement

Structure du Plugin

wc-tb-web-parrainage/
├── wc-tb-web-parrainage.php              # Fichier principal
├── composer.json                         # Autoload PSR-4
├── src/
│   ├── Plugin.php                       # Classe principale
│   ├── Logger.php                       # Système de logs
│   ├── WebhookManager.php               # Gestion webhooks
│   ├── ParrainageManager.php            # Système parrainage
│   ├── CouponManager.php                # Masquage codes promo
│   ├── SubscriptionPricingManager.php   # Calcul dates tarification
│   ├── ParrainageStatsManager.php       # Interface parrainage admin
│   ├── ParrainageDataProvider.php       # Fournisseur données admin
│   ├── ParrainageExporter.php           # Export données
│   ├── ParrainageValidator.php          # Validation données
│   ├── MyAccountParrainageManager.php   # Gestionnaire onglet client
│   ├── MyAccountDataProvider.php        # Fournisseur données client
│   ├── MyAccountAccessValidator.php     # Validateur accès client
│   │   # NOUVEAU v2.5.0 : Classes techniques fondamentales
│   ├── DiscountCalculator.php           # Calculs de remises
│   ├── DiscountValidator.php            # Validation éligibilité
│   ├── DiscountNotificationService.php  # Notifications remises
│   │   # NOUVEAU v2.6.0 : Workflow asynchrone
│   └── AutomaticDiscountProcessor.php   # Processeur workflow asynchrone
├── assets/
│   ├── admin.css                        # Styles administration
│   ├── admin.js                         # Scripts administration
│   ├── parrainage-admin.css             # Styles interface parrainage admin
│   ├── parrainage-admin.js              # Scripts interface parrainage admin
│   └── my-account-parrainage.css        # Styles onglet client (Nouveau v1.3.0)
└── README.md

Hooks Disponibles

Hooks de Configuration

// Personnaliser les messages de parrainage
add_filter( 'tb_parrainage_messages_config', 'custom_parrainage_messages' );

function custom_parrainage_messages( $config ) {
    $config[123] = array(
        'description' => 'Message personnalisé...',
        'message_validation' => 'Code valide ✓ - Avantage spécial',
        'avantage' => 'Avantage spécial'
    );
    return $config;
}

Hooks Workflow Asynchrone v2.6.0

// Hook après calcul d'une remise (simulation v2.6.0)
add_action( 'tb_parrainage_discount_calculated', 'on_discount_calculated', 10, 2 );

function on_discount_calculated( $order_id, $discount_results ) {
    // Actions personnalisées après calcul réussi
    error_log( "Remise calculée pour commande $order_id" );
}

// Hook en cas d'échec définitif de traitement
add_action( 'tb_parrainage_processing_failed', 'on_processing_failed', 10, 2 );

function on_processing_failed( $order_id, $error_message ) {
    // Notification administrateur ou logging spécialisé
    wp_mail( 'admin@site.com', 'Échec remise parrainage', $error_message );
}

// Hook en cas d'échec CRON
add_action( 'tb_parrainage_cron_failure', 'on_cron_failure', 10, 2 );

function on_cron_failure( $order_id, $subscription_id ) {
    // Alerte problème de configuration serveur
    error_log( "CRON WordPress défaillant - Vérifier configuration serveur" );
}

Hooks de Retry et Monitoring

// Hook avant retry automatique
add_action( 'tb_parrainage_retry_discount', 'before_retry', 10, 4 );

function before_retry( $order_id, $subscription_id, $attempt_number, $previous_error ) {
    // Actions avant nouvelle tentative
    if ( $attempt_number >= 2 ) {
        // Alerter après 2ème échec
        error_log( "2ème échec remise parrainage: $previous_error" );
    }
}

// Hook après chargement des services techniques
add_action( 'tb_parrainage_discount_services_loaded', 'on_services_loaded' );

function on_services_loaded( $plugin_instance ) {
    // Accès aux services de calcul après initialisation
    $calculator = $plugin_instance->get_discount_calculator();
    $validator = $plugin_instance->get_discount_validator();
    $processor = $plugin_instance->get_automatic_discount_processor();
}

Statuts de Workflow

Le système v2.6.0 utilise ces statuts dans les métadonnées des commandes :

  • pending : Marqué pour traitement différé
  • scheduled : Programmé via CRON WordPress
  • calculated : Remise calculée avec succès (simulation)
  • error : Échec définitif après retry
  • cron_failed : Problème de programmation CRON

Métadonnées Workflow

// Accès aux métadonnées de workflow
$order = wc_get_order( $order_id );

$workflow_status = $order->get_meta( '_parrainage_workflow_status' );
$marked_date = $order->get_meta( '_parrainage_marked_date' );
$scheduled_time = $order->get_meta( '_parrainage_scheduled_time' );
$calculation_date = $order->get_meta( '_tb_parrainage_calculated' );
$calculated_discounts = $order->get_meta( '_parrainage_calculated_discounts' );
$final_error = $order->get_meta( '_parrainage_final_error' );

Classes Principales

TBWeb\WCParrainage\Plugin

Classe principale qui orchestre le plugin.

TBWeb\WCParrainage\Logger

Système de logs avec stockage en base de données.

TBWeb\WCParrainage\WebhookManager

Gestion des webhooks WooCommerce enrichis.

TBWeb\WCParrainage\ParrainageManager

Système complet de gestion des codes parrain.

TBWeb\WCParrainage\SubscriptionPricingManager

Calcul et gestion des dates de modification tarifaire pour les abonnements avec parrainage.

TBWeb\WCParrainage\CouponManager

Gestion du masquage conditionnel des codes promo.

TBWeb\WCParrainage\ParrainageStatsManager (Nouveau)

Orchestration de l'interface d'administration des données de parrainage.

TBWeb\WCParrainage\ParrainageDataProvider (Nouveau)

Récupération et traitement des données de parrainage depuis la base de données.

TBWeb\WCParrainage\ParrainageExporter (Nouveau)

Export des données de parrainage vers différents formats (CSV, Excel).

TBWeb\WCParrainage\ParrainageValidator (Nouveau)

Validation des données d'entrée et paramètres de l'interface de parrainage.

TBWeb\WCParrainage\MyAccountParrainageManager (Nouveau v1.3.0)

Gestionnaire principal de l'onglet "Mes parrainages" côté client avec endpoint WooCommerce.

TBWeb\WCParrainage\MyAccountDataProvider (Nouveau v1.3.0)

Récupération et formatage des données de parrainage pour l'affichage côté client.

TBWeb\WCParrainage\MyAccountAccessValidator (Nouveau v1.3.0)

Validation de l'accès aux fonctionnalités de parrainage pour les utilisateurs connectés.

Logs et Debugging

Consultation des Logs

Allez dans Réglages > TB-Web Parrainage > Onglet Logs pour :

  • Consulter tous les logs en temps réel
  • Filtrer par niveau (INFO, WARNING, ERROR, DEBUG)
  • Rechercher dans les messages
  • Vider les logs

Types de Logs

  • webhook-subscriptions : Traitement des webhooks
  • parrainage : Validation et enregistrement des codes parrain
  • maintenance : Nettoyage et maintenance automatique

Debug WordPress

Si WP_DEBUG est activé, les logs sont aussi envoyés vers le système WordPress.

FAQ

Comment personnaliser les messages de parrainage ?

Utilisez le filtre tb_parrainage_messages_config (voir section Développement).

Les webhooks ne contiennent pas les métadonnées d'abonnement

Vérifiez que :

  • WooCommerce Subscriptions est installé et actif
  • L'option "Webhooks enrichis" est activée dans les paramètres
  • La commande contient bien des abonnements

Le code parrain n'est pas validé

Vérifiez que :

  • Le code correspond à un ID d'abonnement actif
  • WooCommerce Subscriptions est installé
  • L'utilisateur n'utilise pas son propre code

Problèmes de performance

Le plugin est optimisé pour la performance :

  • Cache des validations AJAX
  • Nettoyage automatique des logs anciens
  • Requêtes optimisées

Support

Pour toute question ou problème :

  1. Consultez les logs dans l'interface d'administration
  2. Vérifiez la configuration des prérequis
  3. Contactez TB-Web pour le support

Licence

GPL v2 or later

Changelog

Version 2.20.5 (2025-01-16) - CORRECTION TEXTE EXPLICATIF REMISES

📝 Correction du Texte Explicatif

🎯 PROBLÈME RÉSOLU : INFORMATIONS INCORRECTES DANS L'INTERFACE CLIENT

Cette version corrige les erreurs factuelles dans le texte explicatif des remises parrain sur la page client /mon-compte/mes-parrainages/.

🔧 CORRECTIONS APPORTÉES

  • Taux correct : Correction de 25% → 20% (taux réel)
  • Base de calcul : Correction de "HT" → "TTC" (base réelle)
  • Structure améliorée : Réorganisation de l'information avec sections claires
  • Exemple concret : Ajout d'un calcul illustratif avec montants réels
  • Lisibilité : Amélioration de la présentation avec listes imbriquées

📊 CONTENU CORRIGÉ

Avant v2.20.5 :

  • ❌ "La remise de 25% s'applique sur le montant hors taxes (HT)"
  • ❌ Informations peu structurées sans exemple

Après v2.20.5 :

  • ✅ "Montant : 20% du prix TTC payé par votre filleul"
  • Exemple concret : 59,99€ HT (71,99€ TTC) → 14,40€/mois d'économie
  • ✅ Structure claire : Montant, Exemple, Application, Durée, Annulation

🎨 AMÉLIORATIONS UX

  • Titre enrichi : "Comment fonctionne votre remise parrain"
  • Sections thématiques : Chaque aspect clairement identifié
  • Exemple pratique : Calcul concret pour meilleure compréhension
  • Cohérence visuelle : Conservation du style existant

🔧 IMPACT TECHNIQUE

  • Fichier modifié : src/MyAccountParrainageManager.php (ligne 404-419)
  • Version commentaire : v2.0.2 → v2.0.3 pour traçabilité
  • Aucun impact : Performance, sécurité ou fonctionnalités
  • Compatibilité : Totale avec versions existantes

MISE À JOUR RECOMMANDÉE pour corriger les informations affichées aux utilisateurs.


Version 2.17.2 (15-01-2025 à 16h15) - FIX DÉFINITIF VISIBILITÉ CONTENU MODAL

🎉 PROBLÈME RÉSOLU DÉFINITIVEMENT : CONTENU MODAL 100% VISIBLE

Cette version corrige définitivement le problème de visibilité du contenu des modals en éliminant les causes racines d'encodage et d'affichage CSS.

🔧 CORRECTIONS TECHNIQUES MAJEURES

  1. Élimination problèmes d'encodage :

    • Suppression totale des emojis (📋, 🔍, 💡, ⚠️) qui causaient la corruption d'affichage
    • Suppression de escapeHtml() qui convertissait le HTML en entités non-affichables
    • Rendu direct du contenu sans transformation qui altère l'affichage
  2. CSS de forçage total :

    • Règles !important sur tous les éléments pour garantir la visibilité
    • Forçage JavaScript post-rendu qui applique display: block; visibility: visible; opacity: 1 sur chaque élément
    • Styles inline systématiques pour outrepasser tout conflit CSS
    • Gestion adaptative des listes (display: list-item pour les <li>)
  3. Temporisation optimisée :

    • Timeout à 100ms au lieu de 50ms pour garantir le rendu AJAX
    • Recalcul forcé avec offsetHeight pour déclencher le re-layout
    • Log de vérification pour confirmer le nombre d'éléments traités

📊 IMPACT UTILISATEUR

  • Avant v2.17.2 : Contenu généré mais invisible (problèmes encodage + CSS)
  • Après v2.17.2 : Contenu 100% visible systématiquement avec structure complète

🎯 GARANTIE DE FONCTIONNEMENT

Sur /mon-compte/mes-parrainages/, chaque icône ? affiche maintenant :

  • ✅ Titre principal : visible en premier
  • ✅ Définition : paragraphe complet sans corruption
  • ✅ Détails : liste à puces avec contenus structurés
  • ✅ Interprétation : sections d'aide contextuelles
  • ✅ Conseils : listes de recommandations
  • ✅ Exemples/Formules : encadrés colorés avec contenus pratiques

Version 2.17.1 (15-01-2025 à 16h00) - CORRECTION AUTOMATIQUE CSS MODALS

🎉 PROBLÈME RÉSOLU : AFFICHAGE AUTOMATIQUE DU CONTENU COMPLET

Cette version corrige définitivement le problème d'affichage des modals en appliquant automatiquement les corrections CSS nécessaires après le rendu du contenu AJAX.

🔧 CORRECTION TECHNIQUE MAJEURE

  1. Correction CSS automatique post-rendu :

    • Timing parfait : Application des styles après le chargement AJAX
    • Hauteur optimale : minHeight: 400px, maxHeight: 800px
    • Overflow intelligent : overflow: visible, overflowY: auto
    • Recalcul forcé : offsetHeight pour garantir l'affichage
    • Debug intégré : Logs de vérification si mode debug activé
  2. Fonctionnement garanti :

    • Titre principal visible en premier
    • Définition complète avec styles
    • Sections structurées (Détails, Interprétation, Conseils)
    • Exemples et formules dans des encadrés colorés
    • Scroll automatique si contenu trop long

📊 IMPACT UTILISATEUR

  • Avant v2.17.1 : Modals vides ou tronquées malgré le contenu présent
  • Après v2.17.1 : Contenu complet systématiquement visible avec mise en forme parfaite

🎯 TEST DE VALIDATION

Sur /mon-compte/mes-parrainages/, toutes les icônes ? affichent maintenant :

  • Titre + Définition + Détails + Conseils + Exemples
  • Hauteur adaptative avec scroll si nécessaire
  • Styles cohérents et professionnels

Version 2.17.0 (15-01-2025 à 15h45) - CORRECTION DÉFINITIVE RENDU MODALS

🎯 PROBLÈME RÉSOLU : CONTENU MODAL COMPLET ENFIN AFFICHÉ

Cette version corrige définitivement le problème des modals qui affichaient seulement la définition au lieu du contenu structuré complet avec détails, conseils et exemples.

🔧 CORRECTIONS TECHNIQUES CRITIQUES

  1. Fonction renderModalContent() entièrement corrigée :

    • Titre principal maintenant affiché en premier avec content.title
    • Définition avec styles améliorés et espacement correct
    • Contenu structuré systématiquement rendu après la définition
    • Container avec padding pour une meilleure présentation
  2. Fonction renderStructuredContent() enrichie :

    • Section Détails avec icône 📋 et styles modernes
    • Section Interprétation avec icône 🔍 et background subtil
    • Section Exemple avec encadré vert et icône 💡
    • Section Conseils avec icône 💡 et liste stylisée
    • Sections Formule/Précision avec encadrés colorés selon le type

🎨 AMÉLIORATIONS VISUELLES

/* Styles intégrés pour une présentation optimale */
- Padding container : 20px pour une respiration visuelle
- Police moderne : -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto
- Couleurs harmonieuses : #2c3e50 (titres), #34495e (sous-titres)
- Encadrés colorés : Vert (exemples), Bleu (formules), Jaune (précisions)
- Espacement cohérent : 15px entre sections, 10px pour sous-éléments

📊 PROBLÈME TECHNIQUE RÉSOLU

Avant v2.17.0 :

// PROBLÈME : Seule la définition était affichée
if (content.definition) {
  html += '<div class="modal-definition"><p>définition...</p></div>';
}
// Les détails, conseils, exemples étaient ignorés dans renderStructuredContent()

Après v2.17.0 :

// SOLUTION : Titre + Définition + Contenu structuré complet
if (content.title) {
  html += "<h3>titre</h3>";
}
if (content.definition) {
  html += "<div>définition</div>";
}
html += this.renderStructuredContent(content); // Détails, conseils, exemples

🎯 RÉSULTAT UTILISATEUR FINAL

Les modals sur /mon-compte/mes-parrainages/ affichent maintenant :

  • Titre complet : "Vos remises actives", "Votre économie mensuelle", etc.
  • Définition claire : Explication de base de la métrique
  • Détails exhaustifs : 3 points d'information détaillés
  • Interprétation : Comment comprendre et utiliser cette information
  • Exemples concrets : Cas pratiques avec chiffres réels
  • Conseils pratiques : 2-3 conseils d'optimisation

🛡️ VALIDATION TECHNIQUE

Tests confirmés sur les 4 modals :

  • active_discounts : Affiche titre + définition + 3 détails + interprétation + exemple + 3 conseils ✅
  • monthly_savings : Affiche titre + définition + formule + interprétation + exemple + 2 conseils ✅
  • total_savings : Affiche titre + définition + 3 détails + interprétation + 2 conseils ✅
  • next_billing : Affiche titre + définition + 3 détails + interprétation + exemple + précision + 2 conseils ✅

MISE À JOUR ESSENTIELLE - Cette version transforme les modals de simple popup de définition en véritables centres d'aide riches et informatifs.


Version 2.16.3 (22-08-2025 à 12h30) - TEMPLATE MODAL SYSTEM DÉFINITIVEMENT OPÉRATIONNEL

🎯 PROBLÈME RÉSOLU : TEMPLATE MODAL SYSTEM DÉFINITIVEMENT OPÉRATIONNEL

Cette version applique la solution technique complète identifiée dans l'analyse approfondie de bug.md, corrigeant les problèmes fondamentaux du Template Modal System et supprimant définitivement l'ancien système.

🔧 CORRECTIONS TECHNIQUES CRITIQUES

  1. TemplateModalManager.php - Méthode get_js_object_name() corrigée :

    // AVANT (INCORRECT)
    return 'tbModal' . ucfirst( $this->namespace );
    // client_account → tbModalClient_account ❌
    
    // APRÈS (CORRECT)
    $parts = explode('_', $this->namespace);
    $camelCase = implode('', array_map('ucfirst', $parts));
    return 'tbModal' . $camelCase;
    // client_account → tbModalClientAccount ✅
  2. Auto-initialisation JavaScript ajoutée :

    • Nouveau fichier : assets/js/template-modals-init.js
    • Auto-détection des objets de configuration tbModal*
    • Initialisation automatique des instances Template Modal System
    • Stockage global des instances pour usage ultérieur
  3. TemplateModalManager.php - enqueue_modal_assets() enrichie :

    • Script d'auto-initialisation automatiquement chargé
    • Dépendances correctes : template-modals-init.js dépend de template-modals.js
    • Logs améliorés avec nom d'objet JavaScript généré
  4. MyAccountParrainageManager.php - Ancien système SUPPRIMÉ :

    • Plus de fallback vers client-help-modals.js/css
    • Template Modal System EXCLUSIF
    • render_help_icon() utilise uniquement le nouveau système
    • Logs explicites "SEUL système actif"
  5. Fichiers obsolètes SUPPRIMÉS définitivement :

    • assets/js/client-help-modals.js SUPPRIMÉ
    • assets/css/client-help-modals.css SUPPRIMÉ

🏗️ ARCHITECTURE TECHNIQUE FINALISÉE

// Auto-initialisation automatique
(function ($) {
  $(document).ready(function () {
    // Rechercher tous les objets tbModal*
    for (let key in window) {
      if (key.startsWith("tbModal") && key !== "TBTemplateModals") {
        const config = window[key];
        if (config && config.namespace) {
          // Créer automatiquement l'instance
          const manager = new window.TBTemplateModals(config);
          // Stocker pour usage global
          window[key + "Instance"] = manager;
        }
      }
    }
  });
})(jQuery);

📊 FLUX D'EXÉCUTION CORRIGÉ

  1. TemplateModalManager enqueue assets avec auto-init
  2. Localisation : tbModalClientAccount object créé avec bonne configuration
  3. Auto-init.js détecte tbModalClientAccount et crée l'instance
  4. Instance stockée : window.tbModalClientAccountInstance
  5. Clics sur icônes gérés automatiquement par l'instance

🎨 VALIDATION TECHNIQUE

Tests de validation automatique :


// Console navigateur sur /mon-compte/mes-parrainages/
console.log("Objet

This README is longer than the copy stored here. Read the rest on GitHub →