From fe1a9089bec985b4d914495653c14acd6e5ec7c1 Mon Sep 17 00:00:00 2001 From: Antonio Gonzalez Date: Tue, 19 May 2020 13:13:26 +0200 Subject: [PATCH 01/14] [ADD][website_cookiebot] New module for Cookiebot integration --- website_cookiebot/README.rst | 82 ++++++++++++++ website_cookiebot/__init__.py | 3 + website_cookiebot/__manifest__.py | 21 ++++ website_cookiebot/data/cookies_policy.xml | 38 +++++++ website_cookiebot/i18n/es.po | 71 +++++++++++++ website_cookiebot/i18n/website_cookiebot.pot | 72 +++++++++++++ website_cookiebot/models/__init__.py | 4 + .../models/res_config_settings.py | 36 +++++++ website_cookiebot/models/website.py | 14 +++ website_cookiebot/static/description/icon.png | Bin 0 -> 4133 bytes .../static/description/index.html | 100 ++++++++++++++++++ .../static/description/screenshot.png | Bin 0 -> 40223 bytes website_cookiebot/views/portal_template.xml | 10 ++ .../views/res_config_settings_views.xml | 28 +++++ website_cookiebot/views/web_template.xml | 10 ++ 15 files changed, 489 insertions(+) create mode 100644 website_cookiebot/README.rst create mode 100644 website_cookiebot/__init__.py create mode 100644 website_cookiebot/__manifest__.py create mode 100644 website_cookiebot/data/cookies_policy.xml create mode 100644 website_cookiebot/i18n/es.po create mode 100644 website_cookiebot/i18n/website_cookiebot.pot create mode 100644 website_cookiebot/models/__init__.py create mode 100644 website_cookiebot/models/res_config_settings.py create mode 100644 website_cookiebot/models/website.py create mode 100644 website_cookiebot/static/description/icon.png create mode 100644 website_cookiebot/static/description/index.html create mode 100644 website_cookiebot/static/description/screenshot.png create mode 100644 website_cookiebot/views/portal_template.xml create mode 100644 website_cookiebot/views/res_config_settings_views.xml create mode 100644 website_cookiebot/views/web_template.xml diff --git a/website_cookiebot/README.rst b/website_cookiebot/README.rst new file mode 100644 index 0000000000..0456f850ce --- /dev/null +++ b/website_cookiebot/README.rst @@ -0,0 +1,82 @@ +================= +Website Cookiebot +================= + +.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png + :target: https://odoo-community.org/page/development-status + :alt: Beta +.. |badge2| image:: https://img.shields.io/badge/licence-AGPL--3-blue.png + :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 +.. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github + :target: https://github.com/OCA/website/tree/13.0/website_google_tag_manager + :alt: OCA/website +.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png + :target: https://translation.odoo-community.org/projects/website-13-0/website-13-0-website_google_tag_manager + :alt: Translate me on Weblate +.. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png + :target: https://runbot.odoo-community.org/runbot/186/13.0 + :alt: Try me on Runbot + +|badge1| |badge2| |badge3| |badge4| |badge5| + +This module integrates Odoo website with GDPR through the functionality of +`Cookiebot `, you need to register your website +domain in Cookiebot's portal. + +**Table of contents** + +.. contents:: + :local: + +Configuration +============= + +To configure this module, you need to: + +#. Go to **Website > Configuration > Settings** +#. Search 'Cookiebot' option. +#. Fill in your 'Cookiebot ID' (e.g. '00000000-0000-0000-0000-000000000000'). +#. Click on "Save" button. + +Bug Tracker +=========== + +Bugs are tracked on `GitHub Issues `_. +In case of trouble, please check there if your issue has already been reported. +If you spotted it first, help us smashing it by providing a detailed and welcomed +`feedback `_. + +Do not contact contributors directly about support or help with technical issues. + +Credits +======= + +Authors +~~~~~~~ + +* Trey, Kilobytes de Soluciones + +Contributors +~~~~~~~~~~~~ + +* `Trey `__: + * Jorge Camacho + * Antonio González + +Maintainers +~~~~~~~~~~~ + +This module is maintained by the OCA. + +.. image:: https://odoo-community.org/logo.png + :alt: Odoo Community Association + :target: https://odoo-community.org + +OCA, or the Odoo Community Association, is a nonprofit organization whose +mission is to support the collaborative development of Odoo features and +promote its widespread use. + +This module is part of the `OCA/website `_ project on GitHub. + +You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute. diff --git a/website_cookiebot/__init__.py b/website_cookiebot/__init__.py new file mode 100644 index 0000000000..69f7babdfb --- /dev/null +++ b/website_cookiebot/__init__.py @@ -0,0 +1,3 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import models diff --git a/website_cookiebot/__manifest__.py b/website_cookiebot/__manifest__.py new file mode 100644 index 0000000000..402ccd3756 --- /dev/null +++ b/website_cookiebot/__manifest__.py @@ -0,0 +1,21 @@ +# Copyright 2020 Trey - Antonio González +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). +{ + 'name': 'Website Cookiebot', + 'summary': 'Cookiebot integration', + 'category': 'Website', + 'version': '13.0.1.0.0', + 'author': 'Trey (www.trey.es), Odoo Community Association (OCA)', + 'website': 'https://www.trey.es', + 'license': 'AGPL-3', + 'depends': [ + 'portal', + 'website', + ], + 'data': [ + 'data/cookies_policy.xml', + 'views/portal_template.xml', + 'views/res_config_settings_views.xml', + 'views/web_template.xml', + ], +} diff --git a/website_cookiebot/data/cookies_policy.xml b/website_cookiebot/data/cookies_policy.xml new file mode 100644 index 0000000000..c07e51d3b9 --- /dev/null +++ b/website_cookiebot/data/cookies_policy.xml @@ -0,0 +1,38 @@ + + + + + Cookies Policy + qweb + website.cookies + + + +
+
+
+

Cookie Declaration

+
+
+
+
+
+
+ +
+
+
+
+
+
+ + + + + + /legal/cookies-policy + True + + + + diff --git a/website_cookiebot/i18n/es.po b/website_cookiebot/i18n/es.po new file mode 100644 index 0000000000..86c7520f6b --- /dev/null +++ b/website_cookiebot/i18n/es.po @@ -0,0 +1,71 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_cookiebot +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-18 17:11+0000\n" +"PO-Revision-Date: 2020-05-19 19:15+0200\n" +"Last-Translator: <>\n" +"Language-Team: Trey \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: es\n" +"X-Generator: Poedit 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "00000000-0000-0000-0000-000000000000" +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "Adds Cookiebot functionality" +msgstr "Integra la funcionalidad de Cookiebot y la RGPD" + +#. module: website_cookiebot +#: model:ir.model,name:website_cookiebot.model_res_config_settings +msgid "Config Settings" +msgstr "Opciones de configuración" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.cookies +#: model_terms:website.page,arch_db:website_cookiebot.cookies_page +msgid "Cookie Declaration" +msgstr "Declaración de cookies" + +#. module: website_cookiebot +#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__has_cookiebot_id +msgid "Cookiebot" +msgstr "" + +#. module: website_cookiebot +#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__cookiebot_id +#: model:ir.model.fields,field_description:website_cookiebot.field_website__cookiebot_id +msgid "Cookiebot ID" +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.layout_footer_copyright +msgid "Cookies Policy" +msgstr "Política de cookies" + +#. module: website_cookiebot +#: model:ir.model.fields,help:website_cookiebot.field_res_config_settings__cookiebot_id +#: model:ir.model.fields,help:website_cookiebot.field_website__cookiebot_id +msgid "This field holds the ID, needed for Cookiebot functionality." +msgstr "Este campo contiene el ID de Cookiebot, necesario para el correcto funcionamiento de los scripts." + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "Tracking ID" +msgstr "ID de seguimiento" + +#. module: website_cookiebot +#: model:ir.model,name:website_cookiebot.model_website +msgid "Website" +msgstr "Sitio web" diff --git a/website_cookiebot/i18n/website_cookiebot.pot b/website_cookiebot/i18n/website_cookiebot.pot new file mode 100644 index 0000000000..67a990fdf1 --- /dev/null +++ b/website_cookiebot/i18n/website_cookiebot.pot @@ -0,0 +1,72 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * website_cookiebot +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 13.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2020-05-18 17:12+0200\n" +"PO-Revision-Date: 2020-05-19 19:11+0000\n" +"Last-Translator: <>\n" +"Language-Team: Trey \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: \n" +"X-Generator: Poedit 2.0.6\n" +"X-Poedit-SourceCharset: UTF-8\n" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "00000000-0000-0000-0000-000000000000" +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "Adds Cookiebot functionality" +msgstr "" + +#. module: website_cookiebot +#: model:ir.model,name:website_cookiebot.model_res_config_settings +msgid "Config Settings" +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.cookies +#: model_terms:website.page,arch_db:website_cookiebot.cookies_page +msgid "Cookie Declaration" +msgstr "" + +#. module: website_cookiebot +#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__has_cookiebot_id +msgid "Cookiebot" +msgstr "" + +#. module: website_cookiebot +#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__cookiebot_id +#: model:ir.model.fields,field_description:website_cookiebot.field_website__cookiebot_id +msgid "Cookiebot ID" +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.layout_footer_copyright +msgid "Cookies Policy" +msgstr "" + +#. module: website_cookiebot +#: model:ir.model.fields,help:website_cookiebot.field_res_config_settings__cookiebot_id +#: model:ir.model.fields,help:website_cookiebot.field_website__cookiebot_id +msgid "This field holds the ID, needed for Cookiebot functionality." +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "Tracking ID" +msgstr "" + +#. module: website_cookiebot +#: model:ir.model,name:website_cookiebot.model_website +msgid "Website" +msgstr "" diff --git a/website_cookiebot/models/__init__.py b/website_cookiebot/models/__init__.py new file mode 100644 index 0000000000..7c49c5afa7 --- /dev/null +++ b/website_cookiebot/models/__init__.py @@ -0,0 +1,4 @@ +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from . import res_config_settings +from . import website diff --git a/website_cookiebot/models/res_config_settings.py b/website_cookiebot/models/res_config_settings.py new file mode 100644 index 0000000000..3e6c68be04 --- /dev/null +++ b/website_cookiebot/models/res_config_settings.py @@ -0,0 +1,36 @@ +# Copyright 2020 Trey - Antonio González +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = 'res.config.settings' + + cookiebot_id = fields.Char( + string='Cookiebot ID', + related='website_id.cookiebot_id', + readonly=False, + ) + has_cookiebot_id = fields.Boolean( + string='Cookiebot', + ) + + @api.onchange('has_cookiebot_id') + def onchange_has_cookiebot_id(self): + if not self.has_cookiebot_id: + self.cookiebot_id = False + + @api.model + def get_values(self): + res = super().get_values() + get_param = self.env['ir.config_parameter'].sudo().get_param + res.update( + has_cookiebot_id=get_param('website.has_cookiebot_id'), + ) + return res + + def set_values(self): + super().set_values() + set_param = self.env['ir.config_parameter'].sudo().set_param + set_param('website.has_cookiebot_id', self.has_cookiebot_id) diff --git a/website_cookiebot/models/website.py b/website_cookiebot/models/website.py new file mode 100644 index 0000000000..2a8ed16e44 --- /dev/null +++ b/website_cookiebot/models/website.py @@ -0,0 +1,14 @@ +# Copyright 2020 Trey - Antonio González +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import fields, models + + +class Website(models.Model): + _inherit = 'website' + + cookiebot_id = fields.Char( + string='Cookiebot ID', + help='This field holds the ID,' + ' needed for Cookiebot functionality.', + ) diff --git a/website_cookiebot/static/description/icon.png b/website_cookiebot/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..ac8e32a4bc663fa18ba9120961c483609fd7285d GIT binary patch literal 4133 zcmaKvc{J2-8^*t5#KLr%>6FC1c6b zShJNSV~vnC4T{(AJ?H)Rz0bMt>pahS{=Bd2JfFmyrbf)?`OX6Xz-)Zoz~W5t|2Bl~ zY<6n9kk5oRP~X@Ja#j%#cf#430ejsp5CB-Z{%ug23=99+C2x?SZIESvXHc-qJr5u_ zI9UFUKPJ%41?wRnaL+5}rzRf&uof8`=vjs2ZsvuDjE!gYv~3-lbZBK66D(qys<;d* zcdv_N8C!889U>YUtR$Xe%`4=Fa9noBzW3iXc_#V4YTUG*W&Bw!_u^Tfcd0d7<;8!V zq4W)=YdE?=F7sZ^rOmsL;tmOU6=*dRt)VP&g2;UwBiB z^Zfspk+wpjAe{V|6B9jH?|j4FTL6~qzF^+J&mhVKz}ZN`bTw!Jkh!Go&xvt{(EMr5`&JFr}FAoHN)5E!6= zcX{nGp}}AsA-N6(O@7Hvuj3dFZ=lO!(>&dZe)xOb!7|U55_KovcPUzRs5qaPw-cuu zwU$Pn?lBe-0%4JC2PSXgvV^>iIm>ms^fVU5KhWu_)MMCquWq?@=#Zwjnq}DBieZa6 za*6ZPu?HVzA{gXzbw6?Z zj?-5NL7ryrTdtHb-6nw_qVS?SRnR83UNtv5j}-v(SV2v2GhB6I{*)ug&8#0SsG7Gd zkIfpZnv>hnA2b{-cenI37HDn2#1`%Fiec(yyisGtJJwEAV{s{>2Ig(F!Eq01u97Av zB5k9zo$>jQL$`JHd=<+SyJRB=uxN1`ay2@i!EI)ElJyG_6dZsuh~lmjGrcPgJSsVn zf=o6Sl4-YMcKF%a3}tbUg-!S>W#@E58cxT7;bz}6q~+`Eza@;Kg?~9Woyx;#{ ztrp*1+K44+QfqV;vBWNEQGcG>O)^TUo4mt8^w zgcz_;R}ha6CIqUfjKA3Ilhly^7;k9N1|{iq{C%p!)h*F}&)?E-&01}IYP|(LVh-UA9lZm-bJw7k0b_ww|UFEL2$*3Dw78JSiKAx zRM>}Fl`#(#raJMD?A)o*^Q>^-51UY4ab`Szz|rD(VP&ca%<{{&SnWuCxoeeSQRTHd zd(;%OV-y>vcT91|4 z{yZS9NUkniWW(Z{^aGEPQI5A-h1gT`<0i?P^l+?Ko!)7apxqvbgrc4C>FJgBA$(UG z;%ykJ5Nd;~9D)Jvrjny3k=2f7HL*0L;52 zxt`3|_(ErWEbMJR z(6SH!^)Ns(^MKn#x%+JkyxE4DCt>>&E)MPL;LrE!=cbexk_= zc&-J{8yT_njw$?fhhd6ax0iz;5%KXWWjS7{4A+Fv?!qI!TT)RZ71Yxw?oIjJ*1@=JfjFI!-Wskl{yo$dkJ&l zS_a-;*Q6D%#q{URkr0>D7xf+}6^#EuwEx|Isf3Nf}Qvt|&&9tVX? zCA+nF={8rZv#aJwX0kdMWy9*Cg&A0U5~E-ydACG48a$$aL2zIv}zr@)bN}KQU~BzP}-(ET^QFVSpm&Nvg%uR zT#-cB6lAp(f|L^X#=Nu;3?1znt?!&e%*@`>BN|bJJq9)Fp1@3uC2y=$IC4aVFdZ`LZ9b$ZlrD-p43>zVMX+$={Ehi-|Jvti{HWLZs8>ht?mG|zkqGUh-X42JOW*e=#&Ok`58F;&y zuU8o0F8n?J5E%xo+OK*VT?$_cCe3hTAUPf5;>b}s5Bk8O@1FRE_Z9DkI>z8=19#8p z6Q;(foKm@{cBcVdabPP+f|kLu6VLuJ@W}EoCnDrt-krsM>rnRRIYDB#~f4>Vor zY0Y$|)3MQA841bu94X(K^(KkYgN#hTDXy^@^XG8l5I<)|{4cLCcZkB}x5pc_8sJF* zbz__kZL(8l+rQV8MNK6|k$SGOq$JS(xbc`jd~Q6C+3ZSz1{6YNFR_hWapmo3?V{4% z)R&Pgon zQX=c7Gw_NSUOT@5OPxlrhfb3#`Tjrg{tt>FPfzKEplGB_Yt7>`qz8-*O%1B`(Xsyl Dq+F02 literal 0 HcmV?d00001 diff --git a/website_cookiebot/static/description/index.html b/website_cookiebot/static/description/index.html new file mode 100644 index 0000000000..84dc91c73e --- /dev/null +++ b/website_cookiebot/static/description/index.html @@ -0,0 +1,100 @@ + + + + + + Website Cookiebot + + +
+
+

Website Cookiebot

+

+ + Beta + + + License: AGPL-3 + + + OCA/website + + + Translate me on Weblate + + + Try me on Runbot + +

+

+ This module integrates Odoo website with GDPR through the functionality of + Cookiebot, you need to register your website + domain in Cookiebot's portal. +

+

Table of contents

+ +
+

Configuration

+
    +
  1. Go to Website > Configuration > Settings.
  2. +
  3. Search "Cookiebot" option.
  4. +
  5. Fill in your 'Cookiebot ID' (e.g. '00000000-0000-0000-0000-000000000000').
  6. +
  7. Click on "Save" button
  8. +
+
+
+

Bug Tracker

+

Bugs are tracked on GitHub Issues. + In case of trouble, please check there if your issue has already been reported. + If you spotted it first, help us smashing it by providing a detailed and welcomed + feedback.

+

Do not contact contributors directly about support or help with technical issues.

+
+
+

Credits

+
+

Authors

+
    +
  • Trey, Kilobytes de Soluciones
  • +
+
+
+

Contributors

+ +
+
+

Maintainers

+

This module is maintained by the OCA.

+ Odoo Community Association +

OCA, or the Odoo Community Association, is a nonprofit organization whose + mission is to support the collaborative development of Odoo features and + promote its widespread use.

+

This module is part of the OCA/website project on GitHub.

+

You are welcome to contribute. To learn how please visit https://odoo-community.org/page/Contribute.

+
+
+
+
+ + diff --git a/website_cookiebot/static/description/screenshot.png b/website_cookiebot/static/description/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..28d778122bbfca0321ecbd00098230aa2712447d GIT binary patch literal 40223 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 literal 0 HcmV?d00001 diff --git a/website_cookiebot/views/portal_template.xml b/website_cookiebot/views/portal_template.xml new file mode 100644 index 0000000000..6c3e19775f --- /dev/null +++ b/website_cookiebot/views/portal_template.xml @@ -0,0 +1,10 @@ + + + + diff --git a/website_cookiebot/views/res_config_settings_views.xml b/website_cookiebot/views/res_config_settings_views.xml new file mode 100644 index 0000000000..13f0eeae93 --- /dev/null +++ b/website_cookiebot/views/res_config_settings_views.xml @@ -0,0 +1,28 @@ + + + + res.config.settings + + + +
+
+ +
+
+
+
+
+
+
+
diff --git a/website_cookiebot/views/web_template.xml b/website_cookiebot/views/web_template.xml new file mode 100644 index 0000000000..ad5a84b53d --- /dev/null +++ b/website_cookiebot/views/web_template.xml @@ -0,0 +1,10 @@ + + + + From 917b9f2a779018b050555373f153fcec6f0567e8 Mon Sep 17 00:00:00 2001 From: Jairo Llopis Date: Wed, 10 Nov 2021 13:10:03 +0000 Subject: [PATCH 02/14] [IMP] website_cookiebot: cleanup - Reorganize templates. - Make templates noupdate=0, because if user edits them, it will be in the COW'd, website-specific version, so no problem on that. - Rename `cookiebot_id` to `cookiebot_dgid` to avoid confusion with X2many fields. - Remove ICP support, as the DGID should be per website. - Add ID placeholders to Cookie Declaration page editable sections. - Ensure Google Analytic script is blocked before consenting statistics. FTR it wasn't actually being blocked. - Improve instructions. - Split README. - Apply pre-commit. @Tecnativa TT32828 --- website_cookiebot/README.rst | 53 ++++++++++++---- website_cookiebot/__init__.py | 1 + website_cookiebot/__manifest__.py | 29 ++++----- website_cookiebot/data/cookies_policy.xml | 38 ------------ website_cookiebot/i18n/website_cookiebot.pot | 52 ++++++++++------ website_cookiebot/models/__init__.py | 1 - .../models/res_config_settings.py | 36 ----------- website_cookiebot/models/website.py | 9 ++- website_cookiebot/readme/CONFIGURE.rst | 11 ++++ website_cookiebot/readme/CONTRIBUTORS.rst | 6 ++ website_cookiebot/readme/DESCRIPTION.rst | 2 + website_cookiebot/readme/USAGE.rst | 10 +++ website_cookiebot/templates/assets.xml | 28 +++++++++ website_cookiebot/templates/website.xml | 49 +++++++++++++++ website_cookiebot/views/portal_template.xml | 10 --- .../views/res_config_settings_views.xml | 28 --------- website_cookiebot/views/web_template.xml | 10 --- website_cookiebot/wizards/__init__.py | 1 + .../wizards/res_config_settings.py | 25 ++++++++ .../wizards/res_config_settings_views.xml | 62 +++++++++++++++++++ 20 files changed, 286 insertions(+), 175 deletions(-) delete mode 100644 website_cookiebot/data/cookies_policy.xml delete mode 100644 website_cookiebot/models/res_config_settings.py create mode 100644 website_cookiebot/readme/CONFIGURE.rst create mode 100644 website_cookiebot/readme/CONTRIBUTORS.rst create mode 100644 website_cookiebot/readme/DESCRIPTION.rst create mode 100644 website_cookiebot/readme/USAGE.rst create mode 100644 website_cookiebot/templates/assets.xml create mode 100644 website_cookiebot/templates/website.xml delete mode 100644 website_cookiebot/views/portal_template.xml delete mode 100644 website_cookiebot/views/res_config_settings_views.xml delete mode 100644 website_cookiebot/views/web_template.xml create mode 100644 website_cookiebot/wizards/__init__.py create mode 100644 website_cookiebot/wizards/res_config_settings.py create mode 100644 website_cookiebot/wizards/res_config_settings_views.xml diff --git a/website_cookiebot/README.rst b/website_cookiebot/README.rst index 0456f850ce..12346e5968 100644 --- a/website_cookiebot/README.rst +++ b/website_cookiebot/README.rst @@ -2,6 +2,11 @@ Website Cookiebot ================= +.. !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + !! This file is generated by oca-gen-addon-readme !! + !! changes will be overwritten. !! + !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! + .. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png :target: https://odoo-community.org/page/development-status :alt: Beta @@ -9,20 +14,19 @@ Website Cookiebot :target: http://www.gnu.org/licenses/agpl-3.0-standalone.html :alt: License: AGPL-3 .. |badge3| image:: https://img.shields.io/badge/github-OCA%2Fwebsite-lightgray.png?logo=github - :target: https://github.com/OCA/website/tree/13.0/website_google_tag_manager + :target: https://github.com/OCA/website/tree/13.0/website_cookiebot :alt: OCA/website .. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png - :target: https://translation.odoo-community.org/projects/website-13-0/website-13-0-website_google_tag_manager + :target: https://translation.odoo-community.org/projects/website-13-0/website-13-0-website_cookiebot :alt: Translate me on Weblate .. |badge5| image:: https://img.shields.io/badge/runbot-Try%20me-875A7B.png :target: https://runbot.odoo-community.org/runbot/186/13.0 :alt: Try me on Runbot -|badge1| |badge2| |badge3| |badge4| |badge5| +|badge1| |badge2| |badge3| |badge4| |badge5| -This module integrates Odoo website with GDPR through the functionality of -`Cookiebot `, you need to register your website -domain in Cookiebot's portal. +This module integrates Odoo website with `Cookiebot `__, +to ask for consent before installing cookies on users' browsers. **Table of contents** @@ -34,10 +38,29 @@ Configuration To configure this module, you need to: -#. Go to **Website > Configuration > Settings** -#. Search 'Cookiebot' option. -#. Fill in your 'Cookiebot ID' (e.g. '00000000-0000-0000-0000-000000000000'). -#. Click on "Save" button. +#. Go to *Website > Configuration > Settings* +#. Under *Select the Website to Configure*, choose a website. +#. Enable *Cookiebot* option. +#. Click on *`How to configure Cookiebot `__*. +#. Follow the instructions, except step 3 (do not insert the `` -
- - - -
-
-
-
-
-
- - /legal/cookies-policy - True - - -
-
diff --git a/website_cookiebot/i18n/website_cookiebot.pot b/website_cookiebot/i18n/website_cookiebot.pot index 67a990fdf1..4cf6a8b13c 100644 --- a/website_cookiebot/i18n/website_cookiebot.pot +++ b/website_cookiebot/i18n/website_cookiebot.pot @@ -2,21 +2,16 @@ # This file contains the translation of the following modules: # * website_cookiebot # -#, fuzzy msgid "" msgstr "" "Project-Id-Version: Odoo Server 13.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2020-05-18 17:12+0200\n" -"PO-Revision-Date: 2020-05-19 19:11+0000\n" -"Last-Translator: <>\n" -"Language-Team: Trey \n" +"Last-Translator: \n" +"Language-Team: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8bit\n" +"Content-Transfer-Encoding: \n" "Plural-Forms: \n" -"X-Generator: Poedit 2.0.6\n" -"X-Poedit-SourceCharset: UTF-8\n" #. module: website_cookiebot #: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form @@ -25,7 +20,29 @@ msgstr "" #. module: website_cookiebot #: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form -msgid "Adds Cookiebot functionality" +msgid "" +"\n" +" How to configure Cookiebot." +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "" +"" +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "" +"\n" +" Instead of step 3, paste here your Domain Group ID.\n" +" " +msgstr "" + +#. module: website_cookiebot +#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form +msgid "Ask for consent on cookies usage" msgstr "" #. module: website_cookiebot @@ -40,14 +57,13 @@ msgid "Cookie Declaration" msgstr "" #. module: website_cookiebot -#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__has_cookiebot_id +#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__cookiebot_enabled msgid "Cookiebot" msgstr "" #. module: website_cookiebot -#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__cookiebot_id -#: model:ir.model.fields,field_description:website_cookiebot.field_website__cookiebot_id -msgid "Cookiebot ID" +#: model:ir.model.fields,field_description:website_cookiebot.field_website__cookiebot_dgid +msgid "Cookiebot Domain Group ID" msgstr "" #. module: website_cookiebot @@ -56,14 +72,14 @@ msgid "Cookies Policy" msgstr "" #. module: website_cookiebot -#: model:ir.model.fields,help:website_cookiebot.field_res_config_settings__cookiebot_id -#: model:ir.model.fields,help:website_cookiebot.field_website__cookiebot_id -msgid "This field holds the ID, needed for Cookiebot functionality." +#: model:ir.model.fields,field_description:website_cookiebot.field_res_config_settings__cookiebot_dgid +msgid "Domain Group ID" msgstr "" #. module: website_cookiebot -#: model_terms:ir.ui.view,arch_db:website_cookiebot.res_config_settings_view_form -msgid "Tracking ID" +#: model:ir.model.fields,help:website_cookiebot.field_res_config_settings__cookiebot_dgid +#: model:ir.model.fields,help:website_cookiebot.field_website__cookiebot_dgid +msgid "Get this code from Cookiebot to enable it on the website." msgstr "" #. module: website_cookiebot diff --git a/website_cookiebot/models/__init__.py b/website_cookiebot/models/__init__.py index 7c49c5afa7..24d168beef 100644 --- a/website_cookiebot/models/__init__.py +++ b/website_cookiebot/models/__init__.py @@ -1,4 +1,3 @@ # License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -from . import res_config_settings from . import website diff --git a/website_cookiebot/models/res_config_settings.py b/website_cookiebot/models/res_config_settings.py deleted file mode 100644 index 3e6c68be04..0000000000 --- a/website_cookiebot/models/res_config_settings.py +++ /dev/null @@ -1,36 +0,0 @@ -# Copyright 2020 Trey - Antonio González -# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). - -from odoo import api, fields, models - - -class ResConfigSettings(models.TransientModel): - _inherit = 'res.config.settings' - - cookiebot_id = fields.Char( - string='Cookiebot ID', - related='website_id.cookiebot_id', - readonly=False, - ) - has_cookiebot_id = fields.Boolean( - string='Cookiebot', - ) - - @api.onchange('has_cookiebot_id') - def onchange_has_cookiebot_id(self): - if not self.has_cookiebot_id: - self.cookiebot_id = False - - @api.model - def get_values(self): - res = super().get_values() - get_param = self.env['ir.config_parameter'].sudo().get_param - res.update( - has_cookiebot_id=get_param('website.has_cookiebot_id'), - ) - return res - - def set_values(self): - super().set_values() - set_param = self.env['ir.config_parameter'].sudo().set_param - set_param('website.has_cookiebot_id', self.has_cookiebot_id) diff --git a/website_cookiebot/models/website.py b/website_cookiebot/models/website.py index 2a8ed16e44..4654117215 100644 --- a/website_cookiebot/models/website.py +++ b/website_cookiebot/models/website.py @@ -5,10 +5,9 @@ class Website(models.Model): - _inherit = 'website' + _inherit = "website" - cookiebot_id = fields.Char( - string='Cookiebot ID', - help='This field holds the ID,' - ' needed for Cookiebot functionality.', + cookiebot_dgid = fields.Char( + string="Cookiebot Domain Group ID", + help="Get this code from Cookiebot to enable it on the website.", ) diff --git a/website_cookiebot/readme/CONFIGURE.rst b/website_cookiebot/readme/CONFIGURE.rst new file mode 100644 index 0000000000..064efe9243 --- /dev/null +++ b/website_cookiebot/readme/CONFIGURE.rst @@ -0,0 +1,11 @@ +To configure this module, you need to: + +#. Go to *Website > Configuration > Settings* +#. Under *Select the Website to Configure*, choose a website. +#. Enable *Cookiebot* option. +#. Click on *`How to configure Cookiebot `__*. +#. Follow the instructions, except step 3 (do not insert the `` - - - - diff --git a/website_cookiebot/views/res_config_settings_views.xml b/website_cookiebot/views/res_config_settings_views.xml deleted file mode 100644 index 13f0eeae93..0000000000 --- a/website_cookiebot/views/res_config_settings_views.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - res.config.settings - - - -
-
- -
-
-
-
-
-
-
-
diff --git a/website_cookiebot/views/web_template.xml b/website_cookiebot/views/web_template.xml deleted file mode 100644 index ad5a84b53d..0000000000 --- a/website_cookiebot/views/web_template.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - diff --git a/website_cookiebot/wizards/__init__.py b/website_cookiebot/wizards/__init__.py new file mode 100644 index 0000000000..0deb68c468 --- /dev/null +++ b/website_cookiebot/wizards/__init__.py @@ -0,0 +1 @@ +from . import res_config_settings diff --git a/website_cookiebot/wizards/res_config_settings.py b/website_cookiebot/wizards/res_config_settings.py new file mode 100644 index 0000000000..a30c374d73 --- /dev/null +++ b/website_cookiebot/wizards/res_config_settings.py @@ -0,0 +1,25 @@ +# Copyright 2020 Trey - Antonio González +# Copyright 2021 Tecnativa - Jairo Llopis +# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). + +from odoo import api, fields, models + + +class ResConfigSettings(models.TransientModel): + _inherit = "res.config.settings" + + cookiebot_dgid = fields.Char( + string="Domain Group ID", + related="website_id.cookiebot_dgid", + readonly=False, + ) + cookiebot_enabled = fields.Boolean( + string="Cookiebot", + compute="_compute_cookiebot_enabled", + readonly=False, + ) + + @api.depends("website_id.cookiebot_dgid") + def _compute_cookiebot_enabled(self): + for record in self: + record.cookiebot_enabled = bool(record.cookiebot_dgid) diff --git a/website_cookiebot/wizards/res_config_settings_views.xml b/website_cookiebot/wizards/res_config_settings_views.xml new file mode 100644 index 0000000000..52c579b7f4 --- /dev/null +++ b/website_cookiebot/wizards/res_config_settings_views.xml @@ -0,0 +1,62 @@ + + + + + res.config.settings + + + +
+
+ +
+
+
+
+
+
+
+
From 1d77981d212bcefe7b8dba6ecf44b5d533412de7 Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 2 Jan 2023 13:23:37 +0100 Subject: [PATCH 03/14] [15.0][MIG] website_cookiebot: Migration to version 15.0 --- website_cookiebot/__manifest__.py | 2 +- website_cookiebot/i18n/website_cookiebot.pot | 2 +- website_cookiebot/readme/CONTRIBUTORS.rst | 3 ++- website_cookiebot/templates/website.xml | 8 ++++---- 4 files changed, 8 insertions(+), 7 deletions(-) diff --git a/website_cookiebot/__manifest__.py b/website_cookiebot/__manifest__.py index 053790e2c2..bb7f1ef580 100644 --- a/website_cookiebot/__manifest__.py +++ b/website_cookiebot/__manifest__.py @@ -5,7 +5,7 @@ "name": "Website Cookiebot", "summary": "Ask for cookies consent connecting with Cookiebot", "category": "Website", - "version": "13.0.1.0.0", + "version": "15.0.1.0.0", "author": "Trey (www.trey.es), Tecnativa, Odoo Community Association (OCA)", "website": "https://github.com/OCA/website", "license": "AGPL-3", diff --git a/website_cookiebot/i18n/website_cookiebot.pot b/website_cookiebot/i18n/website_cookiebot.pot index 4cf6a8b13c..4453fa7b59 100644 --- a/website_cookiebot/i18n/website_cookiebot.pot +++ b/website_cookiebot/i18n/website_cookiebot.pot @@ -4,7 +4,7 @@ # msgid "" msgstr "" -"Project-Id-Version: Odoo Server 13.0\n" +"Project-Id-Version: Odoo Server 15.0\n" "Report-Msgid-Bugs-To: \n" "Last-Translator: \n" "Language-Team: \n" diff --git a/website_cookiebot/readme/CONTRIBUTORS.rst b/website_cookiebot/readme/CONTRIBUTORS.rst index b6b4d7a237..30435f2fa6 100644 --- a/website_cookiebot/readme/CONTRIBUTORS.rst +++ b/website_cookiebot/readme/CONTRIBUTORS.rst @@ -3,4 +3,5 @@ * Antonio González * `Tecnativa `__: - * Jairo Llopis + * Jairo Llopis + * Stefan Ungureanu diff --git a/website_cookiebot/templates/website.xml b/website_cookiebot/templates/website.xml index 07015650bc..73265bb3cd 100644 --- a/website_cookiebot/templates/website.xml +++ b/website_cookiebot/templates/website.xml @@ -2,12 +2,12 @@ -