Une boîte à outils complète de conformité RGPD pour votre site Larapen. Affichez un bandeau de cookies personnalisable, enregistrez les décisions de consentement des visiteurs pour la conformité d’audit, et gérez les catégories de cookies depuis le panneau d’administration.

Bandeau de cookies

Un bandeau soigné et responsive avec les options Tout accepter, Tout refuser et Personnaliser. Sept variantes de position, dont le mode modal.

Catégories granulaires

Quatre catégories de cookies (Essentiels, Analytiques, Marketing, Préférences) avec des contrôles de bascule par catégorie pour les visiteurs.

Registre des consentements

Piste d’audit complète de chaque décision de consentement : adresse IP, agent utilisateur, action effectuée et catégories sélectionnées. Conforme à l’article 7 du RGPD.

Auto-injection

Le bandeau est automatiquement injecté dans toutes les pages front-end via un middleware. Aucune modification de gabarit nécessaire. Ignore le panneau d’administration et les requêtes AJAX.

Cas d’utilisation

Conformité des sites web UE/EEE

Votre site sert des visiteurs dans l’Union européenne et doit se conformer au RGPD et à la directive ePrivacy.

  • Activez le bandeau de cookies pour informer les visiteurs de l’utilisation des cookies.
  • Activez le registre des consentements pour maintenir un enregistrement auditable de toutes les décisions de consentement.
  • Liez votre page de politique de confidentialité afin que les visiteurs puissent consulter vos pratiques en matière de données.
  • Configurez les bascules de catégories pour que les visiteurs puissent accepter ou refuser les cookies analytiques et marketing.

Site avec beaucoup d’analyses

Vous utilisez Google Analytics, Hotjar ou des outils similaires et avez besoin du consentement de l’utilisateur avant de charger les scripts de suivi.

  • Activez la bascule de la catégorie Analytiques.
  • Lisez la valeur du cookie de consentement (gdpr_consent) dans votre JavaScript avant de charger les scripts d’analyse.
  • Ne chargez les analyses que lorsque categories.analytics === true.

Marketing & reciblage publicitaire

Vous utilisez Facebook Pixel, Google Ads ou des outils de marketing par e-mail qui déposent des cookies.

  • Activez la bascule de la catégorie Marketing.
  • Conditionnez tous les scripts marketing/publicitaires au drapeau de consentement marketing.
  • Les visiteurs peuvent révoquer leur consentement à tout moment via le point de terminaison de retrait.

Prérequis

  • Larapen CMS v1.0.0 ou ultérieur
  • PHP 8.3+
  • MySQL 8.0+
Note : cet add-on est entièrement autonome : il n’a aucune dépendance envers d’autres add-ons. Il fonctionne dès l’activation.

Installation

Étape 1 : Téléverser l’add-on

Dans le panneau d’administration, allez dans Admin → Extensions → Add-ons et cliquez sur le bouton Télécharger un add-on. Sélectionnez le fichier ZIP de l’add-on : le système le décompresse automatiquement et l’add-on apparaît dans la liste des add-ons installés.

Étape 2 : Activer l’add-on

Repérez RGPD & Consentement aux cookies dans la liste et cliquez sur Activer. Ses migrations, ses seeders (le cas échéant) et ses permissions sont mis en place automatiquement.

Étape 3 : Configurer

Naviguez vers Admin → RGPD → Paramètres pour configurer la position du bandeau, la durée de vie du cookie, le registre des consentements et les catégories de cookies. Voir Configuration.

Code d’achat (clé de licence)

RGPD & Consentement aux cookies est vendu comme un produit séparé, il possède donc son propre code d’achat (clé de licence) — distinct du code d’achat de l’application principale et de celui de chaque autre add-on. Il vous est demandé lorsque vous activez RGPD & Consentement aux cookies dans Panneau d’administration → Add-ons.

Nos produits sont vendus sur trois plateformes. La façon dont vous recevez un code d’achat dépend de l’endroit où vous avez acheté le produit.

Plateforme / Marketplace Comment obtenir le code d’achat Où le retrouver
Boutique bedigit.com
Achat sur le site (Shop)
Généré automatiquement lorsque la commande est payée, puis envoyé par e-mail — soit dans un e-mail de licence dédié, soit dans l’e-mail de confirmation de commande. Mon compte → Mes licences sur bedigit.com
Gumroad Créé dès que Gumroad nous notifie la vente, puis envoyé dans un e-mail séparé, en plus du reçu Gumroad. L’e-mail de licence, votre Bibliothèque Gumroad et Mon compte → Mes licences sur bedigit.com
Envato Market
CodeCanyon
Délivré par Envato, pas par nous, et jamais envoyé par e-mail : vous le téléchargez vous-même depuis votre compte Envato. Compte Envato → DownloadsLicense certificate & purchase code
Vérifiez votre dossier de spam. Pour les achats effectués sur la Boutique bedigit.com et sur Gumroad, le code d’achat est envoyé par e-mail. Les e-mails de licence automatiques sont très souvent filtrés : si le message ne se trouve pas dans votre boîte de réception, regardez dans votre dossier spam / courrier indésirable avant de contacter le support, et ajoutez notre adresse d’expédition à vos contacts ou à votre liste d’autorisation.

1. Boutique bedigit.com (achat sur le site)

  • Dès que le statut de paiement de la commande devient Payée, une clé de licence est générée automatiquement pour chaque article sous licence de la commande (une clé par unité achetée — acheter 3 unités donne 3 clés distinctes).
  • Elle est envoyée par e-mail à l’adresse utilisée pour la commande, soit dans un e-mail de licence dédié, soit dans l’e-mail de confirmation de commande. Vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
  • La clé reste disponible dans votre compte sous Mon compte → Mes licences. Les clés sont masquées dans la liste ; ouvrez la page de détail de la licence pour afficher et copier la clé complète, voir les domaines sur lesquels elle est activée, et désactiver un domaine pour libérer un emplacement d’activation.
  • La facture correspondante se trouve sous Mon compte → Mes commandes.

2. Gumroad

  • Un achat sur Gumroad produit deux e-mails distincts : le reçu Gumroad (envoyé par Gumroad, donnant accès aux fichiers) et un e-mail de clé de licence (envoyé par bedigit.com) qui contient votre code d’achat.
  • L’e-mail de clé de licence est généré dès que Gumroad nous notifie la vente, il arrive donc normalement quelques secondes après le paiement. Ici aussi, vérifiez votre boîte de réception et votre dossier spam / courrier indésirable.
  • Lorsque le produit Gumroad utilise la fonctionnalité de clés de licence propre à Gumroad, la même clé apparaît aussi dans votre reçu Gumroad et sous Bibliothèque → votre achat sur gumroad.com.
  • Utilisez la même adresse e-mail sur bedigit.com que sur Gumroad : vos clés sont alors liées automatiquement à votre compte et listées sous Mon compte → Mes licences, même si vous vous inscrivez après l’achat. Vous pouvez aussi ajouter une clé Gumroad manuellement depuis Mon compte → Mes licences Gumroad.

3. Envato Market (CodeCanyon)

  • Les codes d’achat Envato sont délivrés et fournis par Envato Market, jamais envoyés par e-mail par nous — il n’y a donc rien à chercher dans votre dossier de spam : vous récupérez le code depuis votre compte Envato.
  • Connectez-vous à votre compte Envato / CodeCanyon, ouvrez la page Downloads, trouvez l’article et choisissez License certificate & purchase code dans le menu déroulant Download. Le code est inscrit dans ce certificat.
  • Un code d’achat Envato ressemble à 12345678-90ab-cdef-1234-567890abcdef (8-4-4-4-12 caractères). Il ne change jamais, et le renouvellement du support de l’article n’en délivre pas de nouveau.
  • Article officiel Envato : Where Is My Purchase Code?
Vous avez perdu votre code d’achat ? Recherchez dans votre messagerie (dossier de spam inclus) “licence” ou “code d’achat”, puis consultez Mon compte → Mes licences sur bedigit.com pour les achats Boutique et Gumroad, ou Downloads → License certificate sur Envato. S’il est toujours introuvable, ouvrez un ticket sur notre Centre d’aide avec votre numéro de commande (Boutique), l’ID de vente Gumroad ou l’e-mail de l’acheteur (Gumroad), ou votre nom d’utilisateur Envato et le nom de l’article (Envato).

Configuration

Tous les paramètres sont gérés dans Admin → RGPD → Paramètres (stockés dans la table settings, groupe gdpr). Les valeurs par défaut proviennent de config/gdpr.php.

Paramètre Description Par défaut
gdpr_enabled Activer ou désactiver globalement le bandeau de cookies. true
gdpr_cookie_lifetime Combien de jours le cookie de préférence de consentement est mémorisé (1–3650). 365
gdpr_log_consents Enregistrer chaque décision de consentement du visiteur dans la base de données pour l’audit de conformité. true
gdpr_banner_position Où le bandeau apparaît sur la page (7 positions disponibles). bottom-center
gdpr_privacy_policy_url URL vers votre page de politique de confidentialité, affichée comme lien dans le bandeau. (vide)
gdpr_category_analytics Afficher la bascule de la catégorie de cookies Analytiques dans le panneau de préférences. false
gdpr_category_marketing Afficher la bascule de la catégorie de cookies Marketing dans le panneau de préférences. false
gdpr_category_preferences Afficher la bascule de la catégorie de cookies Préférences dans le panneau de préférences. false
gdpr_log_retention_days Nombre de jours avant la suppression définitive des journaux et des fichiers d’archive (1–7300). 730 (2 ans)
gdpr_archive_enabled Lorsqu’il est activé, les journaux des mois précédents sont compressés (gzip) et déplacés vers le stockage privé ; seul le mois en cours reste en base. false
gdpr_dedup_window_minutes Évite d’écrire un nouveau journal de consentement si un journal identique (même utilisateur/IP, action, catégories) a été enregistré dans cette fenêtre. 0 pour désactiver. 5
gdpr_stats_cache_ttl Durée (en secondes) pendant laquelle les statistiques du tableau de bord restent en cache. 0 pour désactiver complètement le cache. 900 (15 minutes)

Valeurs par défaut du fichier de configuration

Le fichier config/gdpr.php fournit les valeurs par défaut utilisées lorsqu’aucun paramètre de base de données n’existe. Il expose aussi archive_disk (par défaut local) et archive_path (par défaut gdpr) pour contrôler l’emplacement des fichiers d’archive mensuels.

Admin : Paramètres

La page des paramètres (RGPD → Paramètres) est organisée en quatre zones principales :

Paramètres généraux

La colonne de gauche (7/12 de largeur) contient les options de configuration principales :

  • Activer le bandeau de cookies : interrupteur à bascule pour activer/désactiver le bandeau globalement. Lorsqu’il est désactivé, aucun bandeau n’est affiché et aucune injection par middleware n’a lieu.
  • Durée de vie du cookie (jours) : saisie numérique (1–3650 jours) contrôlant combien de temps le cookie de consentement persiste dans le navigateur du visiteur.
  • Position du bandeau : sélecteur visuel de position avec 7 positions affichées sur une maquette de navigateur. Cliquez sur une position pour la sélectionner ; le libellé se met à jour en temps réel.
  • Journaliser les actions de consentement : interrupteur pour activer/désactiver l’enregistrement des consentements dans la base de données. Lorsqu’il est activé, chaque action Accepter/Refuser/Personnaliser/Retirer est enregistrée.
  • URL de la politique de confidentialité : champ texte pour l’URL de votre page de politique de confidentialité. Si elle est fournie, un lien “Politique de confidentialité” apparaît dans le bandeau.

Sélecteur de position du bandeau

Le sélecteur de position est un élément visuel interactif montrant une fenêtre de navigateur miniature. Sept points cliquables représentent les positions disponibles :

Position Disposition Description
top-left Carte compacte Carte flottante dans le coin supérieur gauche (max 420px de large)
top-center Barre pleine largeur Barre horizontale en haut de la page
top-right Carte compacte Carte flottante dans le coin supérieur droit (max 420px de large)
middle-center Boîte de dialogue modale Modale centrée avec un fond semi-transparent
bottom-left Carte compacte Carte flottante dans le coin inférieur gauche (max 420px de large)
bottom-center Barre pleine largeur Barre horizontale en bas de la page (par défaut)
bottom-right Carte compacte Carte flottante dans le coin inférieur droit (max 420px de large)

Catégories de cookies

La colonne de droite (5/12 de largeur) affiche les quatre catégories de cookies avec des interrupteurs à bascule :

  • Essentiels : toujours actifs, ne peuvent pas être désactivés (affichés avec un badge “Toujours actif”). Ce sont les cookies nécessaires au fonctionnement du site (sessions, jetons CSRF, etc.).
  • Analytiques : activable. Lorsqu’il est activé, les visiteurs peuvent accepter ou refuser les cookies analytiques (Google Analytics, Hotjar, etc.).
  • Marketing : activable. Lorsqu’il est activé, les visiteurs peuvent accepter ou refuser les cookies marketing (Facebook Pixel, reciblage publicitaire, etc.).
  • Préférences : activable. Lorsqu’il est activé, les visiteurs peuvent accepter ou refuser les cookies de préférence (langue, thème, personnalisation, etc.).
Note : désactiver une catégorie dans l’administration la supprime entièrement du bandeau : les visiteurs ne verront pas la bascule de cette catégorie dans le panneau de préférences.

Journaux & rétention

Une troisième carte pleine largeur, sous les deux colonnes existantes, pilote la rétention des données et les performances :

  • Archivage mensuel des journaux : interrupteur à bascule. Lorsqu’il est activé, seuls les journaux du mois en cours restent en base ; les mois précédents sont compressés (gzip) et déplacés vers le stockage privé (voir Admin : Archives). Un raccourci vers la page Archives apparaît à côté de la bascule.
  • Rétention des journaux (jours) : entier (1–7300). Les lignes en base et les fichiers d’archive plus anciens sont supprimés définitivement par la tâche quotidienne gdpr:purge-logs. Le RGPD recommande généralement 2–6 ans pour les preuves de consentement.
  • Fenêtre de déduplication : entier en minutes (0–1440). Si un journal de consentement identique existe déjà pour le même utilisateur/IP dans cette fenêtre, la nouvelle écriture est ignorée et l’enregistrement existant est réutilisé. 0 pour désactiver.
  • Durée du cache des statistiques : entier en secondes (0–86400). Durée pendant laquelle les statistiques du tableau de bord restent en cache. Le cache est automatiquement invalidé à chaque création ou suppression de journal de consentement. 0 pour désactiver le cache.
  • Vider le cache des statistiques : bouton qui vide le cache des statistiques à la demande (utile après une suppression en masse ou un import).

Statistiques d’aperçu du consentement

En haut de la page des paramètres, cinq cartes statistiques affichent les métriques de consentement des 30 derniers jours :

  • Total des consentements : nombre total d’actions de consentement enregistrées
  • Tout accepté : visiteurs qui ont cliqué sur “Tout accepter”
  • Tout refusé : visiteurs qui ont cliqué sur “Tout refuser”
  • Personnalisé : visiteurs qui ont enregistré des préférences personnalisées
  • Taux d’acceptation : pourcentage de “Tout accepté” par rapport au total des consentements

Ces statistiques sont mises en cache pendant gdpr_stats_cache_ttl secondes (15 minutes par défaut) pour garder la page fluide sur des bases de plusieurs millions de lignes.

Admin : Registre des consentements

La page du registre des consentements (RGPD → Registre des consentements) fournit une piste d’audit complète de chaque décision de consentement des visiteurs, comme l’exige l’article 7 du RGPD. La page est entièrement pilotée en AJAX : filtres, pagination, suppression en ligne et actions groupées rafraîchissent le tableau sur place sans rechargement complet.

Carte des statistiques

Une carte dédiée en haut de la page affiche quatre mini cartes statistiques pour les 30 derniers jours (indépendantes des filtres du tableau ci-dessous) :

  • Total des consentements (couleur neutre)
  • Tout accepté (couleur succès/vert)
  • Tout refusé (couleur danger/rouge)
  • Taux d’acceptation (couleur accent, affiché en pourcentage)

Ces chiffres sont mis en cache pendant gdpr_stats_cache_ttl secondes et rafraîchis automatiquement lorsqu’un journal est créé ou supprimé.

Actions de la page

L’en-tête de la page expose trois boutons d’action conditionnés par une permission :

  • Archives (visible uniquement lorsque le mode archive est activé) : ouvre le navigateur d’archives mensuelles (voir ci-dessous). Nécessite gdpr.archives.view.
  • Exporter en CSV : télécharge un fichier CSV des lignes actuellement filtrées, avec un BOM UTF-8 pour la compatibilité Excel. Colonnes : id, created_at, user_id, user_name, user_email, ip_address, user_agent, action, categories (JSON). Nécessite gdpr.consent_logs.export.
  • Purger maintenant : met en file PurgeConsentLogsJob pour supprimer immédiatement les lignes en base et les fichiers d’archive au-delà de la période de rétention (demande une confirmation). Nécessite gdpr.consent_logs.delete.

Filtres

Tous les filtres sont alignés sur une seule ligne dans l’en-tête de la carte et déclenchent un rafraîchissement AJAX :

  • Recherche (antirebond de 300 ms) : filtre par adresse IP, nom ou e-mail de l’utilisateur.
  • Action : liste déroulante avec accepted_all, rejected_all, customized, withdrew.
  • Date de début et Date de fin : sélecteurs natifs <input type="date"> qui appliquent une plage whereDate(created_at, …).

Le bouton Exporter en CSV respecte les filtres actuellement appliqués.

Table des journaux

Un tableau paginé (25 enregistrements par page par défaut) avec les colonnes suivantes :

Colonne Description
Sélection Case à cocher de ligne + “tout sélectionner” en en-tête. Visible uniquement lorsque l’utilisateur possède gdpr.consent_logs.delete.
Visiteur Avatar + nom/e-mail de l’utilisateur (si authentifié) ou libellé “Invité” (si anonyme).
Adresse IP Adresse IP du visiteur, affichée en formatage monospace/code.
Action Badge coloré : Tout accepté (vert), Tout refusé (rouge), Personnalisé (jaune), Retiré (gris).
Catégories Badges en ligne pour chaque catégorie montrant l’état activé (plein) ou désactivé (contour).
Date Temps relatif lisible (ex. “il y a 2 heures”) avec la date complète dans une infobulle.
Actions Icône corbeille par ligne qui supprime l’entrée via AJAX après une demande de confirmation.

Suppression en masse

Cocher une ou plusieurs cases de ligne fait apparaître une barre d’actions groupées flottante en haut de la liste. Cliquez sur Supprimer la sélection et confirmez le dialogue SweetAlert pour supprimer toutes les lignes sélectionnées en une seule requête AJAX. La sélection est réinitialisée et le tableau est rafraîchi en cas de succès.

Déduplication

Avant d’insérer une nouvelle ligne, GdprService::logConsent() recherche un journal récent identique (même user_id ou IP, même action, mêmes catégories) créé dans la fenêtre gdpr_dedup_window_minutes. Si un tel journal existe, l’enregistrement existant est retourné et aucune nouvelle ligne n’est écrite. Cela évite que le tableau ne se remplisse lorsqu’un visiteur recharge une page ou bascule rapidement son consentement.

État vide

Lorsqu’aucun journal ne correspond aux filtres actuels, un état vide convivial est affiché avec une grande icône et un message expliquant que les enregistrements apparaîtront une fois que les visiteurs interagiront avec le bandeau.

Admin : Archives

La page des archives (RGPD → Archives) est visible dans la barre latérale uniquement lorsque gdpr_archive_enabled est activé. Elle liste tous les fichiers d’archive mensuels compressés (gzip) trouvés sous storage/app/private/gdpr/{year}/{month}/consent-logs-{year}-{month}.csv.gz.

Comment les archives sont créées

Chaque 1er du mois à 00h05, la commande planifiée gdpr:archive-monthly s’exécute (si le paramètre d’archivage est activé). Pour chaque mois antérieur au mois en cours qui n’a pas encore de fichier d’archive, elle effectue les étapes suivantes :

  1. Diffuse chaque journal du mois dans un tampon CSV (1000 lignes à la fois).
  2. Compresse le CSV en gzip et l’écrit sur le disque privé au chemin ci-dessus.
  3. Supprime les lignes archivées de gdpr_consent_logs par lots, dans une transaction par lot.
  4. Enfin, purge les fichiers d’archive plus anciens que gdpr_log_retention_days.

Parcourir les archives

La page d’administration regroupe les fichiers par année dans une liste repliable. Chaque ligne affiche le mois, le nom de fichier, la taille du fichier et l’horodatage d’archivage, ainsi qu’un bouton Télécharger qui renvoie le fichier gzip au navigateur. L’accès à la navigation comme au téléchargement est conditionné par des permissions (gdpr.archives.view et gdpr.archives.download).

Sécurité du chemin : le point de terminaison de téléchargement valide les paramètres d’URL year / month / filename avec des motifs regex stricts et renvoie 404 pour tout ce qui se trouve en dehors du répertoire de stockage gdpr/.

CLI & planification

L’add-on enregistre deux commandes Artisan et leurs entrées planifiées correspondantes. Les deux sont câblées automatiquement dans GdprServiceProvider::boot()—aucune modification de routes/console.php n’est nécessaire.

Commande Planification Objectif
gdpr:purge-logs Quotidienne à 00h00 Déclenche PurgeConsentLogsJob : supprime les lignes en base plus anciennes que gdpr_log_retention_days, purge les fichiers d’archive expirés et vide le cache des statistiques.
gdpr:archive-monthly [--force] 1er de chaque mois à 00h05 Déclenche ArchiveMonthlyConsentLogsJob : archive chaque mois passé terminé, puis purge les archives expirées. N’a aucun effet lorsque gdpr_archive_enabled est désactivé, sauf si --force est passé.

Les deux jobs implémentent ShouldQueue, ils s’exécutent donc sur la connexion de queue que vous configurez. Avec le pilote sync par défaut, ils s’exécutent en cours de processus ; sur Redis/DB, ils tournent dans un worker. Vérifiez qu’elles sont actives avec php artisan schedule:list.

Front-end : Bandeau de cookies

Le bandeau de cookies est un composant HTML/CSS/JS autonome qui est automatiquement injecté dans chaque page front-end via le middleware InjectCookieBanner.

Vue principale du bandeau

La vue principale affiche :

  • Icône de cookie : une illustration SVG en ligne d’un cookie
  • Titre : “Préférences de cookies”
  • Message : une brève explication de l’utilisation des cookies
  • Lien Politique de confidentialité : affiché uniquement si une URL est configurée dans les paramètres
  • Trois boutons d’action :
    • Tout accepter (bouton primaire sombre) : accepte toutes les catégories de cookies
    • Tout refuser (bouton secondaire gris) : refuse tous les cookies non essentiels
    • Personnaliser (bouton fantôme/texte) : ouvre le panneau de préférences

Positions du bandeau

Le bandeau adapte sa disposition en fonction de la position configurée :

  • Positions pleine largeur (top-center, bottom-center) : disposition flex horizontale avec le contenu et les boutons côte à côte. Largeur maximale 860px, centrée.
  • Positions en coin (top-left, top-right, bottom-left, bottom-right) : disposition de carte compacte (max 420px) avec le contenu empilé.
  • Position modale (middle-center) : centre le bandeau avec un fond semi-transparent, et fonctionne comme une boîte de dialogue modale (max 520px).

Panneau de préférences

Cliquer sur “Personnaliser” fait passer de la vue principale au panneau de préférences (sans rechargement de page). Le panneau affiche :

  • Bouton retour avec icône chevron : retourne à la vue principale du bandeau
  • Liste des catégories (défilable, hauteur maximale 280px) avec une ligne par catégorie activée :
    • Nom et description de la catégorie
    • Catégories obligatoires : affichent un badge “Toujours actif” (pas de bascule)
    • Catégories optionnelles : affichent un interrupteur à bascule CSS personnalisé
  • Enregistrer les préférences : bouton qui enregistre les catégories sélectionnées et ferme le bandeau

Animations

Le bandeau utilise des animations CSS fluides :

  • Glissement depuis le bas pour les positions basses
  • Glissement depuis le haut pour les positions hautes
  • Fondu + mise à l’échelle pour la position modale centrale
  • Animations inverses lorsque le bandeau est fermé

Design responsive

Sur les écrans en dessous de 768px :

  • Les barres pleine largeur passent en disposition verticale (empilée)
  • Les cartes en coin s’étendent en pleine largeur
  • Les boutons d’action s’empilent verticalement et remplissent la largeur

Traductions

Des fichiers de traduction sont fournis pour l’anglais (en) et le français (fr). Toutes les chaînes utilisent le préfixe d’espace de noms gdpr::.

Clés de traduction

Section Modèle de clé Description
Catégories gdpr::gdpr.categories.* Noms et descriptions des catégories (necessary, analytics, marketing, preferences)
Actions gdpr::gdpr.actions.* Libellés des actions de consentement (accepted_all, rejected_all, customized, withdrew)
Positions gdpr::gdpr.positions.* Libellés des positions du bandeau pour le sélecteur d’administration
Front-end gdpr::gdpr.front.* Chaînes de l’interface du bandeau (titre, message, libellés des boutons, lien de confidentialité)
Paramètres admin gdpr::gdpr.admin.settings.* Libellés, indices et en-têtes de section de la page des paramètres
Registre des consentements admin gdpr::gdpr.admin.consent_logs.* Libellés, en-têtes de colonnes et état vide de la page du registre des consentements
Statistiques admin gdpr::gdpr.admin.stats.* Libellés des cartes statistiques (total_consents, accepted_all, etc.)
Archives admin gdpr::gdpr.admin.archives.* Libellés du navigateur d’archives (titre, sous-titre, mois, nom de fichier, taille, archived_at, téléchargement, état vide)
Messages gdpr::gdpr.admin.messages.* Messages flash (settings_updated, stats_cache_cleared)

Mise à jour

Il existe deux façons de mettre cet add-on à jour : via le panneau d’administration (recommandé) ou en remplaçant manuellement les fichiers.

Méthode 1 : Téléversement via le panneau d’administration (recommandé)

  1. Téléchargez le dernier fichier .zip de cet add-on.
  2. Allez dans Panneau d’administrationAdd-ons et cliquez sur le bouton Téléverser.
  3. Sélectionnez ou faites glisser le fichier .zip dans la zone de téléversement.
  4. Une invite de confirmation affichera les numéros de version actuelle et nouvelle. Cliquez sur Remplacer pour continuer.
  5. Allez dans Panneau d’administrationMise à jour du système (/admin/update) pour appliquer les migrations de base de données en attente.

Méthode 2 : Remplacement manuel des fichiers

Étape 1 : Remplacer les fichiers

Remplacez le répertoire de l’add-on par la nouvelle version.

Étape 2 : Exécuter les migrations

php artisan migrate

Les migrations en attente ne s’exécutent qu’une seule fois : la commande peut être relancée sans risque.

Étape 3 : Vider les caches

php artisan config:clear
php artisan route:clear
php artisan view:clear

Étape 4 : Vérifier

Visitez RGPD → Paramètres dans le panneau d’administration pour confirmer que tous les paramètres sont intacts et que le bandeau fonctionne correctement côté front-end.

Sauvegardez d’abord : sauvegardez toujours votre base de données avant d’exécuter des migrations sur un système en production.

Désinstallation

Éteindre un add-on sans rien perdre, c’est le désactiver : allez dans Panneau d’administration → Add-ons, trouvez GDPR & Cookie Consent et cliquez sur Désactiver.

  • Ses routes, ses vues, ses entrées de menu d’administration et ses permissions cessent d’être enregistrées, et ses pages publiques ne répondent plus.
  • Ses tables de base de données et toutes les données qu’elles contiennent sont conservées, et ses fichiers restent dans extensions/addons/gdpr/. Rien n’est supprimé.
  • Le code d’achat enregistré lors de l’activation est conservé lui aussi : réactiver l’add-on ne le redemande pas.
  • La désactivation est refusée tant qu’un autre add-on actif dépend de celui-ci : désactivez d’abord cet add-on.

Cliquez sur Activer sur la même carte pour le rallumer. Les migrations en attente sont rejouées, les assets republiés, et l’add-on reprend exactement là où il s’était arrêté.

Suppression

La suppression est définitive et détruit les données de l’add-on. Le bouton Supprimer n’apparaît que sur un add-on désactivé : la suppression se fait donc toujours en deux temps :

  1. Désactivez GDPR & Cookie Consent (voir Désinstallation).
  2. Cliquez sur Supprimer sur sa carte et confirmez la demande.

Le panneau d’administration, en une seule passe :

  • exécute le hook de désinstallation de l’add-on, s’il en fournit un, tant que son code est encore sur le disque ;
  • révoque les permissions déclarées dans son addon.json ;
  • annule ses migrations — ce qui supprime ses tables de base de données et toutes les lignes qu’elles contiennent — et purge ses entrées de la table migrations, afin qu’une réinstallation ultérieure reparte de zéro ;
  • supprime ses assets publiés : public/addons/gdpr/, public/vendor/gdpr/ et storage/app/public/addons/gdpr/ ;
  • supprime le dossier de l’add-on extensions/addons/gdpr/ ;
  • supprime sa ligne dans la table addons (le code d’achat enregistré disparaît avec elle) et vide le cache de l’application.
Cette action est irréversible. Sauvegardez votre base de données avant de supprimer un add-on dont les données peuvent encore vous servir : le réinstaller plus tard crée des tables vides, pas votre ancien contenu.

La suppression est refusée, avec un message explicatif et avant toute destruction, lorsque l’add-on est encore actif, lorsqu’un autre add-on actif en dépend, ou lorsque l’utilisateur du serveur web (PHP) ne peut pas supprimer extensions/addons/gdpr/. Dans ce dernier cas, donnez à cet utilisateur le droit d’écriture sur le dossier et sur son parent, puis réessayez.

Supprimer le dossier en FTP ou en SSH n’est pas équivalent : les tables de l’add-on, ses entrées dans la table migrations et sa ligne addons restent en place, et sa carte reste dans la liste. Utilisez plutôt Supprimer dans le panneau d’administration.

Dépannage

Le bandeau n’apparaît pas sur le front-end

Vérifiez les points suivants :

  • L’add-on est activé dans Admin → Add-ons.
  • Le paramètre gdpr_enabled est défini sur 1 (activé) dans les paramètres.
  • Vous n’avez pas déjà un cookie gdpr_consent défini. Effacez les cookies ou utilisez une fenêtre incognito pour tester.
  • La page est une réponse HTML standard avec une balise </body> (le middleware recherche cette balise pour injecter le bandeau).
  • Vous consultez une page front-end, pas une page d’administration (les routes d’administration sont exclues).

Le bandeau apparaît sur les pages d’administration

Cela ne devrait pas se produire : le middleware ignore explicitement les routes d’administration via is_admin_panel_route(). Si cela se produit, vérifiez que :

  • La fonction helper is_admin_panel_route() est définie et fonctionne dans votre installation Larapen.
  • Votre préfixe de route d’administration correspond à la valeur configurée dans config('larapen.core.admin_prefix').

Le cookie de consentement est chiffré / illisible par JavaScript

L’add-on exclut explicitement le cookie gdpr_consent du middleware EncryptCookies de Laravel. Si le cookie est toujours chiffré :

  • Assurez-vous que le GdprServiceProvider est correctement enregistré (l’add-on est actif).
  • Vérifiez qu’aucun middleware ou package personnalisé ne re-chiffre le cookie.
  • Effacez les cookies de votre navigateur et consentez à nouveau : d’anciens cookies chiffrés issus d’une configuration précédente peuvent persister.

Les consentements ne sont pas enregistrés dans le registre

  • Vérifiez que gdpr_log_consents est défini sur 1 (activé) dans les paramètres d’administration.
  • Vérifiez que la table gdpr_consent_logs existe (exécutez php artisan migrate).
  • Consultez les journaux de votre serveur pour les erreurs de base de données (ex. problèmes de permissions).

La position du bandeau ne change pas

  • Après avoir changé la position dans les paramètres d’administration, veillez à effacer le cookie gdpr_consent (ou utilisez une fenêtre incognito) : le bandeau n’apparaît que pour les visiteurs sans cookie de consentement.
  • Videz le cache des vues : php artisan view:clear.

Les catégories ne s’affichent pas dans le panneau de préférences

Seules les catégories activées dans les paramètres d’administration apparaissent dans le panneau de préférences. La catégorie “Essentiels” apparaît toujours. Pour les catégories optionnelles :

  • Vérifiez que gdpr_category_analytics, gdpr_category_marketing et/ou gdpr_category_preferences sont définis sur 1 dans les paramètres.
  • Les catégories désactivées sont filtrées par le middleware InjectCookieBanner avant le rendu de la vue.

Rétention / purge des journaux

La rétention est entièrement automatisée. La commande planifiée gdpr:purge-logs s’exécute tous les jours à 00h00 et supprime à la fois les lignes en base et les fichiers d’archive plus anciens que gdpr_log_retention_days (par défaut : 730 jours / 2 ans, configurable depuis la page Paramètres). Vous pouvez également :

  • La déclencher à la demande depuis la page Registre des consentements via le bouton Purger maintenant (nécessite gdpr.consent_logs.delete).
  • L’exécuter manuellement : php artisan gdpr:purge-logs.
  • Vérifier la planification avec php artisan schedule:listgdpr:purge-logs (quotidien) et gdpr:archive-monthly (mensuel, le 1er à 00h05) doivent y apparaître.

La tâche d’archivage mensuel ne se lance pas

  • Vérifiez que gdpr_archive_enabled est défini sur 1 dans les Paramètres ; sinon, la tâche se termine immédiatement. Passez --force à php artisan gdpr:archive-monthly pour contourner cette vérification.
  • Confirmez que le planificateur de Laravel est bien configuré (* * * * * cd /path && php artisan schedule:run dans votre crontab). Sans cela, aucune tâche planifiée ne se déclenche jamais.
  • Vérifiez que le disque local est accessible en écriture et que storage/app/private/gdpr/ existe (il est créé à la volée par la tâche).

La page Archives n’apparaît pas dans la barre latérale

  • L’entrée de menu Archives est masquée tant que le paramètre gdpr_archive_enabled n’est pas activé et que l’utilisateur administrateur courant ne possède pas la permission gdpr.archives.view.
  • Si vous venez de basculer le paramètre, rechargez la page d’administration : la barre latérale est re-rendue à chaque requête et prendra l’option en compte.

Les statistiques du tableau de bord semblent obsolètes

  • Les statistiques sont mises en cache pendant gdpr_stats_cache_ttl secondes (par défaut 15 minutes). Le cache est automatiquement vidé à chaque création/suppression de journal.
  • Après un import en masse ou un nettoyage manuel de la base, cliquez sur Vider le cache des statistiques sur la page Paramètres pour forcer un recalcul.
  • Définissez gdpr_stats_cache_ttl sur 0 pour désactiver complètement le cache (non recommandé sur de gros jeux de données).

Erreur de jeton CSRF sur les points de terminaison de consentement

Tous les points de terminaison de consentement (/gdpr/accept-all, etc.) nécessitent un jeton CSRF valide. Le JavaScript du bandeau inclut le jeton depuis la vue Blade rendue. Si vous voyez des erreurs 419 :

  • Assurez-vous que votre session Laravel est correctement configurée.
  • Vérifiez que le groupe de middleware web (qui inclut VerifyCsrfToken) est appliqué aux routes de consentement.
  • Si vous utilisez une vue de bandeau personnalisée, assurez-vous qu’elle transmet le jeton CSRF dans l’en-tête X-CSRF-TOKEN des requêtes fetch.

RGPD & Consentement aux cookies v1.0.0 : fait partie de la plateforme CMS Larapen.

© BeDigit. Tous droits réservés.

Cet article vous a-t-il été utile ?

Merci pour votre retour !

Besoin d'aide ? Créez un ticket de support

Créer un Ticket