From 7a2958f3ee763ea0f4d707b35444e99e421d5ea4 Mon Sep 17 00:00:00 2001 From: TheoLechemia <lechemia.theo@gmail.com> Date: Wed, 15 Jan 2025 17:12:43 +0100 Subject: [PATCH] improve doc, config and footer.html.sample --- atlas/configuration/config.py.example | 5 +- atlas/configuration/config_schema.py | 24 ++- .../custom/templates/footer.html.sample | 27 +--- docs/changelog.rst | 3 + docs/cookies_rgpd.rst | 141 ++++++++++++++++++ docs/rgpd.rst | 139 ----------------- 6 files changed, 170 insertions(+), 169 deletions(-) create mode 100644 docs/cookies_rgpd.rst delete mode 100644 docs/rgpd.rst diff --git a/atlas/configuration/config.py.example b/atlas/configuration/config.py.example index bd7da925e..15f120d7d 100644 --- a/atlas/configuration/config.py.example +++ b/atlas/configuration/config.py.example @@ -84,9 +84,6 @@ LANGUAGES = { ##################### ##################### -# Code de suivi des statistiques Google Analytics (si AFFICHAGE_FOOTER = True) -ID_GOOGLE_ANALYTICS = "UA-xxxxxxx-xx" - # Utiliser et afficher le glossaire (static/custom/glossaire.json.sample) GLOSSAIRE = False @@ -261,6 +258,8 @@ PATRIMONIALITE = { } } +OREJIME_APPS = [] + ############################# #### Lien custom du logo #### ############################# diff --git a/atlas/configuration/config_schema.py b/atlas/configuration/config_schema.py index dcd8045d3..3cd045c02 100644 --- a/atlas/configuration/config_schema.py +++ b/atlas/configuration/config_schema.py @@ -77,6 +77,28 @@ }, } +orijime_default_translations = { + "fr": { + "consentModal": { + "description": "", + }, + "purposes": { + "analytics": "Analyse", + "security": "Sécurité" + } + }, + "en": { + "consentModal": { + "description": "This is an example of how to override an existing translation already used by Orejime", + }, + "purposes": { + "analytics": "Analytics", + "security": "Security" + }, + + } + } + class SecretSchemaConf(Schema): class Meta: @@ -122,7 +144,6 @@ class Meta: URL_APPLICATION = fields.String(load_default="") DEFAULT_LANGUAGE = fields.String(load_default="fr") MULTILINGUAL = fields.Boolean(load_default=False) - ID_GOOGLE_ANALYTICS = fields.String(load_default="UA-xxxxxxx-xx") ORGANISM_MODULE = fields.Boolean(load_default=False) DISPLAY_OBSERVERS = fields.Boolean(load_default=True) GLOSSAIRE = fields.Boolean(load_default=False) @@ -132,6 +153,7 @@ class Meta: AFFICHAGE_FOOTER = fields.Boolean(load_default=True) AFFICHAGE_RGPD = fields.Boolean(load_default=True) OREJIME_APPS = fields.List(fields.Dict(), load_default=[]) + OREJIME_TRANSLATIONS = fields.Dict(load_default=orijime_default_translations) AFFICHAGE_STAT_GLOBALES = fields.Boolean(load_default=True) AFFICHAGE_DERNIERES_OBS = fields.Boolean(load_default=True) AFFICHAGE_EN_CE_MOMENT = fields.Boolean(load_default=True) diff --git a/atlas/static/custom/templates/footer.html.sample b/atlas/static/custom/templates/footer.html.sample index 609b70a41..f10b7a932 100644 --- a/atlas/static/custom/templates/footer.html.sample +++ b/atlas/static/custom/templates/footer.html.sample @@ -75,30 +75,5 @@ </div> {% endif %} -<!-- Check ID_GOOGLE_ANALYTICS to keep compability with old Geonature-atlas --> -{% if configuration.OREJIME_APPS|length > 0 %} - <!-- Sample script Analytics Google --> - {% for app in configuration.OREJIME_APPS %} - {% if app.name == "scripts-gtm" %} - <script - type="opt-in" - data-type="application/javascript" - data-name="scripts-gtm"> - (function (i, s, o, g, r, a, m) { - i['GoogleAnalyticsObject'] = r; - i[r] = i[r] || function () { - (i[r].q = i[r].q || []).push(arguments) - }, i[r].l = 1 * new Date(); - a = s.createElement(o), - m = s.getElementsByTagName(o)[0]; - a.async = 1; - a.src = g; - m.parentNode.insertBefore(a, m) - })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); + <!-- BLOC TRACEURS / ANALYSES VIZA COOKIES --> - ga('create', '{{configuration.ID_GOOGLE_ANALYTICS}}', 'auto'); - ga('send', 'pageview'); - </script> - {% endif %} - {% endfor %} -{% endif %} diff --git a/docs/changelog.rst b/docs/changelog.rst index 5dcf84a35..c2fdf256d 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -8,6 +8,7 @@ CHANGELOG 🚀 **Nouveautés** - Ajout du lien "Données personelles" dans le pied de page (#527 @juggler31) +- Ajout de la librairie Orijeme pour recueillir le consentement de l'utilisateur sur l'utilisation des cookies 🐛 **Corrections** @@ -21,6 +22,8 @@ CHANGELOG ⚠️ **Notes de version** +- Le paramètre `ID_GOOGLE_ANALYTICS` et la façon d'integrer un script google analytic sont dépréciés. Se référer à la documentation sur le RGPD et la collecte de cookies : https://github.com/PnX-SI/GeoNature-atlas/blob/master/docs/cookies_rgpd.rst + Si vous mettez à jour GeoNature-atlas : - Exécutez le script SQL de mise à jour de la BDD : https://github.com/PnX-SI/GeoNature-atlas/blob/master/data/update/update_1.6.1to1.6.2.sql diff --git a/docs/cookies_rgpd.rst b/docs/cookies_rgpd.rst new file mode 100644 index 000000000..63e9f5b56 --- /dev/null +++ b/docs/cookies_rgpd.rst @@ -0,0 +1,141 @@ +Gestion des cookies et RGPD +=========================== + +Cette section explique comment ajouter des outils de collectes de cookies (matomo, google analytics par ex) tout en respetant le RGPG. GeoNature-Atlas utilise pour cela une librairie permettant de receuillir le consentement de l'utilisateur: Orejime. + +À quoi sert le RGPD +------------------- + +Le règlement général sur la protection des données est utilisé afin de protéger les données à caractère personnel. + +Où configurer l'application +--------------------------- + +Dans le fichier : `atlas/configuration/config.py` + + +- Définir les applications pour lesquelles il faut demander l'autorisation de la collecte de cookies via la variable **OREJIME_APPS** + +En complément, se référer à la documentation officielle de l'outil orejim: https://github.com/empreinte-digitale/orejime + +:: + + OREJIME_APPS = [ + { + "name": "script-google", # ce nom devra être réutilisé dans la balise script (attribut `data-name`) du fichier `footer.html` ou le script d'analyse des cookies sera integré + "title": "Google Analytics", + "cookies": [ + "_ga", + "_gat", + "_gid", + "__utma", + "__utmb", + "__utmc", + "__utmt", + "__utmz", + ], + "purposes": ["analytics"], + "required": False, + "optOut": False, + "default": True, + "onlyOnce": True, + }, + { + "name": "second-script", + "title": "Deuxième script", + "cookies": [ + "_ga", + "_gat", + "_gid", + "__utma", + "__utmb", + "__utmc", + "__utmt", + "__utmz", + ], + "purposes": ["analytics"], + "required": False, + "optOut": False, + "default": True, + "onlyOnce": True, + } + ] + +- Il est possible de surcharger les traductions grâce à la variable : **OREJIME_TRANSLATIONS** +Voir toutes les possibilité de traduction : https://github.com/empreinte-digitale/orejime +:: + + OREJIME_TRANSLATIONS = { + "fr": { + "consentModal": { + "description": "", + }, + "purposes": { + "analytics": "Analyse", + "security": "Sécurité" + } + }, + "en": { + "consentModal": { + "description": "This is an example of how to override an existing translation already used by Orejime", + }, + "purposes": { + "analytics": "Analytics", + "security": "Security" + }, + + } + } + +- Il est possible de catégoriser les applications nécessaires afin de les intégrer dans les choix des utilisateurs. + +.. image :: images/choice_rgpd.png + +:: + + OREJIME_CATEGORIES = [ + { + "name": "analytics", + "title": "Analytics", + "apps": [ + "script-google", + ] + }, + { + "name": "security", + "title": "Secutiry", + "apps": [ + "second-script", + ] + } + ] + +A la fin du fichier : `atlas/static/custom/templates/footer.html`, copiez collez cette exemple en l'adaptant à votre contexte et à votre configuration. +La variable `AFFICHAGE_FOOTER` doit êtes mise à `True` si on souhaite ajouter des traceurs de cookies. + +Dans cet exemple, il s'agit d'un script de google analytics : +L'attribut `data-name` de la balise script doit correspondre a l'attribut `name` correspondant à l'application ORIJIME renseigné dans la variable de configuration `OREJIME_APPS`. Dans la configuration d'exemple, la première "l'app google" a pour attribut `name` : `scripts-google`, il faut donc mettre `scripts-google` dans l'attribut `data-name` de la balise script. C'est cet attribut qui permet à Orijeme de savoir quel cookies il va pouvoir accepter ou bloquer en fonction de la réponse de l'utilisateur. +Si vous souhaitez rajouter un deuxième traceur (matomo par exemple), faire un deuxième balise script séparée en respectant la même logique. + +:: + + <!-- Sample script Analytics Google --> + <script + type="opt-in" + data-type="application/javascript" + data-name="scripts-google"> + (function (i, s, o, g, r, a, m) { + i['GoogleAnalyticsObject'] = r; + i[r] = i[r] || function () { + (i[r].q = i[r].q || []).push(arguments) + }, i[r].l = 1 * new Date(); + a = s.createElement(o), + m = s.getElementsByTagName(o)[0]; + a.async = 1; + a.src = g; + m.parentNode.insertBefore(a, m) + })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); + + ga('create', '<VOTRE_ID_GOOGLE_A_REMPLACER>', 'auto'); + ga('send', 'pageview'); + </script> diff --git a/docs/rgpd.rst b/docs/rgpd.rst deleted file mode 100644 index 3588dc48d..000000000 --- a/docs/rgpd.rst +++ /dev/null @@ -1,139 +0,0 @@ -La RGPD -======= - -À quoi sert la RGPD -------------------- - -Le règlement général sur la protection des données est utilisé afin de protéger les données à caractère personnel. - -Où configurer l'application ---------------------------- - -Dans le fichier : `atlas/configuration/config.py` - -La documentation correspondant à la configuration : https://github.com/empreinte-digitale/orejime - -- Définir les applications pour lesquelles il faut bloquer les cookies via la variable **OREJIME_APPS** - -:: - - OREJIME_APPS = [ - { - "name": "scripts-gtm", - "title": "Google Analytics", - "cookies": [ - "_ga", - "_gat", - "_gid", - "__utma", - "__utmb", - "__utmc", - "__utmt", - "__utmz", - ], - "purposes": ["analytics"], - "required": False, - "optOut": False, - "default": True, - "onlyOnce": True, - }, - { - "name": "second-script", - "title": "Deuxième script", - "cookies": [ - "_ga", - "_gat", - "_gid", - "__utma", - "__utmb", - "__utmc", - "__utmt", - "__utmz", - ], - "purposes": ["analytics"], - "required": False, - "optOut": False, - "default": True, - "onlyOnce": True, - } - ] - -- Il est possible de surcharger les traductions grâce à la variable : **OREJIME_TRANSLATIONS** - -:: - - OREJIME_TRANSLATIONS = { - "en": { - "consentModal": { - "description": "This is an example of how to override an existing translation already used by Orejime", - }, - "inlineTracker": { - "description": "Example of an inline tracking script", - }, - "externalTracker": { - "description": "Example of an external tracking script", - }, - "purposes": { - "analytics": "Analytics", - "security": "Security" - }, - "categories": { - "analytics": { - "description": "A long form description of the category." - } - } - }, - } - -- Il est possible de catégoriser les applications nécessaires afin de les intégrer dans les choix des utilisateurs. - -.. image :: images/choice_rgpd.png - - -:: - - OREJIME_CATEGORIES = [ - { - "name": "analytics", - "title": "Analytics", - "apps": [ - "scripts-gtm", - "second-script" - ] - } - ] - -Dans le fichier : `atlas/static/custom/templates/footer.html` - -- Dans le fichier, rajouter un **if** pour chacun des scripts à exécuter. - -Dans cet exemple, il s'agit d'un script de google analitics (le script `scripts-gtm` définit dans la configuration orejime dans le fichier `config.py`). - -:: - - {% if configuration.OREJIME_APPS|length > 0 %} - <!-- Sample script Analytics Google --> - {% for app in configuration.OREJIME_APPS %} - {% if app.name == "scripts-gtm" %} - <script - type="opt-in" - data-type="application/javascript" - data-name="scripts-gtm"> - (function (i, s, o, g, r, a, m) { - i['GoogleAnalyticsObject'] = r; - i[r] = i[r] || function () { - (i[r].q = i[r].q || []).push(arguments) - }, i[r].l = 1 * new Date(); - a = s.createElement(o), - m = s.getElementsByTagName(o)[0]; - a.async = 1; - a.src = g; - m.parentNode.insertBefore(a, m) - })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); - - ga('create', '{{configuration.ID_GOOGLE_ANALYTICS}}', 'auto'); - ga('send', 'pageview'); - </script> - {% endif %} - {% endfor %} - {% endif %}