Skip to content

Francois-Louis/cookychef

Repository files navigation

🍪 Cooky'Chef - Module RGPD PrestaShop 9

PrestaShop PHP License Build

Module professionnel de gestion du consentement cookies conforme RGPD pour PrestaShop 9. Offre une interface utilisateur moderne, une journalisation complète des consentements et une intégration transparente avec les outils d'analyse et de marketing.

Fonctionnalités

🎯 Conformité RGPD

  • ✅ Journalisation pseudonymisée des consentements
  • ✅ Gestion des versions de politique de confidentialité
  • ✅ Conservation configurable des logs (défaut: 6 mois)
  • ✅ Preuve de consentement avec horodatage

🎨 Interface Moderne

  • ✅ Modal responsive avec design adaptatif
  • ✅ Support du mode sombre automatique
  • ✅ Animations fluides et accessibilité
  • ✅ Compatible mobile/tablette

⚙️ Gestion Granulaire

  • ✅ Cookies essentiels (toujours actifs)
  • ✅ Analytics (Google Analytics, Matomo...)
  • ✅ Marketing (Facebook Pixel, Google Ads...)
  • ✅ Activation conditionnelle des scripts

🛠️ Développement Moderne

  • ✅ JavaScript ES6+ avec Webpack
  • ✅ SCSS modulaire et variables CSS
  • ✅ Tests unitaires et d'intégration PHPUnit
  • ✅ Code documenté et typé (PHP 8.3+)

🚀 Installation

1. Installation du module

# Copier le module dans /modules/
cp -r cookychef /var/www/html/modules/

# Activer depuis le back-office PrestaShop
# Modules > Gestionnaire de modules > Rechercher "Cookychef"

2. Configuration des assets

cd modules/cookychef/_dev

# Installation des dépendances
npm install

# Development (watch mode)
npm run dev

# Production (minification)
npm run build

3. Configuration du module

  1. Back-office → Modules → Cookychef → Configurer
  2. Définir le titre et la description
  3. Configurer le lien vers la politique de confidentialité
  4. Ajuster la version de politique si nécessaire

📋 Configuration Avancée

Intégration Google Analytics

<!-- Dans votre template, différer GA avec data-consent -->
<script type="text/plain" data-consent="analytics" data-src="https://www.googletagmanager.com/gtag/js?id=GA_MEASUREMENT_ID"></script>
<script type="text/plain" data-consent="analytics">
  window.dataLayer = window.dataLayer || [];
  function gtag(){dataLayer.push(arguments);}
  gtag('js', new Date());
  gtag('config', 'GA_MEASUREMENT_ID');
</script>

Intégration Facebook Pixel

<script type="text/plain" data-consent="marketing">
  !function(f,b,e,v,n,t,s)
  {if(f.fbq)return;n=f.fbq=function(){n.callMethod?
  n.callMethod.apply(n,arguments):n.queue.push(arguments)};
  if(!f._fbq)f._fbq=n;n.push=n;n.loaded=!0;n.version='2.0';
  n.queue=[];t=b.createElement(e);t.async=!0;
  t.src=v;s=b.getElementsByTagName(e)[0];
  s.parentNode.insertBefore(t,s)}(window,document,'script',
  'https://connect.facebook.net/en_US/fbevents.js');
  fbq('init', 'YOUR_PIXEL_ID');
  fbq('track', 'PageView');
</script>

Intégration iframes (YouTube, etc.)

<iframe data-consent="marketing" 
        data-src="https://www.youtube.com/embed/VIDEO_ID" 
        width="560" 
        height="315">
  <p>Veuillez accepter les cookies marketing pour voir cette vidéo.</p>
</iframe>

🎛️ API JavaScript

Événements personnalisés

// Écouter les changements de consentement
window.addEventListener('cookychef:consent:change', function(event) {
    const preferences = event.detail.preferences;
    console.log('Analytics:', preferences.analytics);
    console.log('Marketing:', preferences.marketing);
    
    // Votre logique personnalisée
    if (preferences.analytics) {
        // Activer tracking analytics
    }
});

// Callback legacy (compatibilité)
window.cookychefOnConsentChange = function(preferences) {
    // Votre code...
};

API avancée

// Accès à l'API du module
const api = window.CookychefConsent;

// Activation manuelle de scripts
api.ContentManager.activateScriptsFor('analytics');

// Émission d'événements personnalisés  
api.Events.emitConsentChange({analytics: true, marketing: false});

// Fermeture manuelle de la modal
api.ModalManager.close();

🏗️ Structure du Projet

cookychef/
├── 📁 _dev/                          # Développement
│   ├── 📁 js/                        # Sources JavaScript
│   │   ├── front.js                  # Script principal ES6+
│   │   └── admin.js                  # Interface admin
│   ├── 📁 scss/                      # Sources SCSS
│   │   ├── front.scss                # Styles modal front
│   │   └── admin.scss                # Styles admin
│   ├── 📁 tests/                     # Tests unitaires
│   │   ├── 📁 Unit/                  # Tests unitaires
│   │   ├── 📁 Integration/           # Tests d'intégration
│   │   └── phpunit.xml.dist          # Config PHPUnit
│   ├── package.json                  # Dépendances Node.js
│   └── webpack.config.js             # Configuration build
├── 📁 classes/                       # Classes métier
│   ├── CookieConsentLogger.php       # Journalisation RGPD
│   └── cookychef_status.class.php
├── 📁 controllers/                   # Contrôleurs
│   ├── 📁 admin/                     # Back-office
│   └── 📁 front/                     # Front-office + AJAX
├── 📁 translations/                  # Traductions i18n
│   └── 📁 fr-FR/                     # Français
│       ├── Modules.Cookychef.Admin.fr-FR.xlf
│       └── Modules.Cookychef.Shop.fr-FR.xlf
├── 📁 views/                         # Assets compilés + Templates
│   ├── 📁 css/                       # CSS compilés
│   ├── 📁 js/                        # JS compilés  
│   └── 📁 templates/                 # Templates Smarty
├── cookychef.php            # Module principal
└── README.md                         # Documentation

🧪 Tests

Exécution des tests

cd _dev/tests

# Installation PHPUnit (si nécessaire)
composer install

# Tous les tests
./vendor/bin/phpunit

# Tests spécifiques
./vendor/bin/phpunit --filter="CookieConsentFlowTest"

# Couverture de code
./vendor/bin/phpunit --coverage-html coverage-html/

Types de tests inclus

  • Tests unitaires : Logique métier isolée
  • Tests d'intégration : Flux complets utilisateur
  • Tests de compatibilité : Système legacy
  • Tests RGPD : Journalisation et conformité

📊 Base de Données

Le module crée automatiquement la table cookychef_cookie_consent_log :

CREATE TABLE `ps_cookychef_cookie_consent_log` (
  `id_cookychef_cookie_consent_log` INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
  `consent_uid` VARCHAR(64) NOT NULL,        -- Identifiant pseudonyme
  `id_customer` INT UNSIGNED NULL,           -- Client connecté (optionnel)  
  `id_shop` INT UNSIGNED NOT NULL,           -- Boutique
  `policy_version` INT UNSIGNED DEFAULT 1,   -- Version politique
  `event` VARCHAR(16) NOT NULL,              -- accept_all|refuse_all|save_prefs
  `choices_json` TEXT NOT NULL,              -- Choix détaillés JSON
  `ip_hash` CHAR(64) NULL,                   -- IP hachée (pseudonymisation)
  `ua_hash` CHAR(64) NULL,                   -- User-Agent haché  
  `country_iso` CHAR(2) NULL,                -- Code pays (si détectable)
  `date_add` DATETIME DEFAULT CURRENT_TIMESTAMP,
  KEY `idx_consent_uid` (`consent_uid`),
  KEY `idx_date_add` (`date_add`)
);

Performance

Optimisations incluses

  • Cache intelligent : Modal en cache jusqu'à changement config
  • Chargement asynchrone : Scripts différés conditionnellement
  • Bundle minifié : Webpack avec Terser + CSSNano
  • Lazy loading : Iframes et contenus tiers
  • CDN ready : Assets compatibles CDN

Métriques typiques

  • 📦 JS minifié : ~8KB gzipped
  • 🎨 CSS minifié : ~4KB gzipped
  • Time to Interactive : < 100ms
  • 📱 Mobile-first : Responsive natif

🔧 Personnalisation

Styles CSS

// Surcharge des variables dans votre thème
$modal-primary-color: #your-brand-color;
$modal-border-radius: 8px;

// Import du module  
@import "modules/cookychef/views/css/front.css";

Templates Smarty

{* Surcharge dans themes/your-theme/modules/cookychef/ *}
{extends file='modules/cookychef/views/templates/front/modal.tpl'}

{block name="consent_title"}
    <h2>🍪 {l s='Notre politique cookies' mod='cookychef'}</h2>
{/block}

🛠️ Développement

Standards respectés

Workflow de contribution

# Clone et setup
git clone https://github.com/votre-repo/cookychef.git
cd cookychef/_dev && npm install

# Développement avec hot reload
npm run dev

# Tests avant commit
./vendor/bin/phpunit && npm test

# Build production
npm run build

📚 Documentation

🤝 Support

Signaler un bug

  1. Vérifier les issues existantes
  2. Créer une nouvelle issue avec :
    • Version PrestaShop
    • Version PHP
    • Navigateur et version
    • Console browser (erreurs JS)
    • Log PrestaShop (erreurs PHP)

Demander une fonctionnalité

📄 Licence

Ce module est distribué sous licence Academic Free License 3.0 (AFL-3.0).


🏆 Contributeurs

  • Atelier-Legoff - Développement initial et maintenance
  • ThemeVolty - Design et UX
  • Communauté PrestaShop - Feedback et tests

⭐ Si ce module vous aide, n'hésitez pas à laisser une étoile !

Conçu avec ❤️ pour la communauté PrestaShop

About

Cookies banner for Prestashop

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published