From 1e8abd810e1a72520ec51fdd5368faa69e1ddb85 Mon Sep 17 00:00:00 2001
From: David
Date: Mon, 8 Jul 2024 16:58:02 +0200
Subject: [PATCH 1/8] [ADD] website_conditional_visibility_user_group: New
module
TT50008
---
.../README.rst | 94 ++++
.../__init__.py | 1 +
.../__manifest__.py | 28 ++
.../i18n/es.po | 43 ++
...site_conditional_visibility_user_group.pot | 39 ++
.../models/__init__.py | 1 +
.../models/ir_http.py | 20 +
.../readme/CONFIGURE.md | 9 +
.../readme/CONTRIBUTORS.md | 2 +
.../readme/DESCRIPTION.md | 2 +
.../static/description/icon.png | Bin 0 -> 9455 bytes
.../static/description/index.html | 441 ++++++++++++++++++
.../static/src/js/inject_dom.esm.js | 9 +
.../snippet_visibility_portal_tests.esm.js | 28 ++
.../src/tests/snippet_visibility_tests.esm.js | 67 +++
.../tests/__init__.py | 1 +
.../test_conditional_visibility_user_group.py | 19 +
.../views/snippet_options_template.xml | 48 ++
18 files changed, 852 insertions(+)
create mode 100644 website_conditional_visibility_user_group/README.rst
create mode 100644 website_conditional_visibility_user_group/__init__.py
create mode 100644 website_conditional_visibility_user_group/__manifest__.py
create mode 100644 website_conditional_visibility_user_group/i18n/es.po
create mode 100644 website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
create mode 100644 website_conditional_visibility_user_group/models/__init__.py
create mode 100644 website_conditional_visibility_user_group/models/ir_http.py
create mode 100644 website_conditional_visibility_user_group/readme/CONFIGURE.md
create mode 100644 website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
create mode 100644 website_conditional_visibility_user_group/readme/DESCRIPTION.md
create mode 100644 website_conditional_visibility_user_group/static/description/icon.png
create mode 100644 website_conditional_visibility_user_group/static/description/index.html
create mode 100644 website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js
create mode 100644 website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
create mode 100644 website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
create mode 100644 website_conditional_visibility_user_group/tests/__init__.py
create mode 100644 website_conditional_visibility_user_group/tests/test_conditional_visibility_user_group.py
create mode 100644 website_conditional_visibility_user_group/views/snippet_options_template.xml
diff --git a/website_conditional_visibility_user_group/README.rst b/website_conditional_visibility_user_group/README.rst
new file mode 100644
index 0000000000..db42063980
--- /dev/null
+++ b/website_conditional_visibility_user_group/README.rst
@@ -0,0 +1,94 @@
+====================================================
+Conditional visibility for internal users in Website
+====================================================
+
+..
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! This file is generated by oca-gen-addon-readme !!
+ !! changes will be overwritten. !!
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+ !! source digest: sha256:748c0a8174d9f9a0b4aee5b58aeaced2309a29997f74d53c86a129c7b0b021a0
+ !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+
+.. |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/15.0/website_conditional_visibility_user_group
+ :alt: OCA/website
+.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
+ :target: https://translation.odoo-community.org/projects/website-15-0/website-15-0-website_conditional_visibility_user_group
+ :alt: Translate me on Weblate
+.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=15.0
+ :alt: Try me on Runboat
+
+|badge1| |badge2| |badge3| |badge4| |badge5|
+
+This module adds extra granularity in the visibility of the website
+snippets allowing to set if the users that can see a block are internal
+or portal ones.
+
+**Table of contents**
+
+.. contents::
+ :local:
+
+Configuration
+=============
+
+To configure the user group visibility:
+
+- With the frontend editor opened select the block you want to set the
+ visibility for.
+- In *Style* tab of the editor panel set the *Visibility* option to
+ *Conditional* and unfold it.
+- Set the *Users* option to *Visible for logged in*.
+- Now you'll see the new *Groups* option.
+- You can choose between *Only internal users*, *Only portal users* or
+ *No restriction*, which is the default value.
+
+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 to smash it by providing a detailed and welcomed
+`feedback `_.
+
+Do not contact contributors directly about support or help with technical issues.
+
+Credits
+=======
+
+Authors
+-------
+
+* Tecnativa
+
+Contributors
+------------
+
+- `Tecnativa `__
+
+ - David Vidal
+
+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_conditional_visibility_user_group/__init__.py b/website_conditional_visibility_user_group/__init__.py
new file mode 100644
index 0000000000..0650744f6b
--- /dev/null
+++ b/website_conditional_visibility_user_group/__init__.py
@@ -0,0 +1 @@
+from . import models
diff --git a/website_conditional_visibility_user_group/__manifest__.py b/website_conditional_visibility_user_group/__manifest__.py
new file mode 100644
index 0000000000..d7fe90cb76
--- /dev/null
+++ b/website_conditional_visibility_user_group/__manifest__.py
@@ -0,0 +1,28 @@
+# Copyright 2024 Tecnativa - David Vidal
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+{
+ "name": "Conditional visibility for internal users in Website",
+ "summary": "Only internal users will see the blocks you add this condition to",
+ "version": "15.0.1.0.0",
+ "category": "Product",
+ "website": "https://github.com/OCA/website",
+ "author": "Tecnativa, Odoo Community Association (OCA)",
+ "license": "AGPL-3",
+ "depends": ["website"],
+ "data": ["views/snippet_options_template.xml"],
+ "assets": {
+ "web.assets_frontend_minimal": [
+ "website_conditional_visibility_user_group/static/src/js/*.js",
+ ],
+ "web.assets_frontend_lazy": [
+ # Remove assets_frontend_minimal
+ (
+ "remove",
+ "website_conditional_visibility_user_group/static/src/js/*.js",
+ ),
+ ],
+ "web.assets_tests": [
+ "website_conditional_visibility_user_group/static/src/tests/*.js"
+ ],
+ },
+}
diff --git a/website_conditional_visibility_user_group/i18n/es.po b/website_conditional_visibility_user_group/i18n/es.po
new file mode 100644
index 0000000000..b0c0c3eeeb
--- /dev/null
+++ b/website_conditional_visibility_user_group/i18n/es.po
@@ -0,0 +1,43 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * website_conditional_visibility_user_group
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 15.0\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2024-07-12 05:20+0000\n"
+"PO-Revision-Date: 2024-07-12 07:21+0200\n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"Language: es\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Poedit 3.4.4\n"
+
+#. module: website_conditional_visibility_user_group
+#: model:ir.model,name:website_conditional_visibility_user_group.model_ir_http
+msgid "HTTP Routing"
+msgstr "Ruta HTTP"
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "No restriction"
+msgstr "Sin restricciones"
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "Only internal users"
+msgstr "Solo usuarios internos"
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "Only portal users"
+msgstr "Solo usuarios de portal"
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "⌙ Groups"
+msgstr "⌙ Grupos"
diff --git a/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot b/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
new file mode 100644
index 0000000000..0cadf36a81
--- /dev/null
+++ b/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
@@ -0,0 +1,39 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * website_conditional_visibility_user_group
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 15.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: \n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: \n"
+
+#. module: website_conditional_visibility_user_group
+#: model:ir.model,name:website_conditional_visibility_user_group.model_ir_http
+msgid "HTTP Routing"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "No restriction"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "Only internal users"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "Only portal users"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "⌙ Groups"
+msgstr ""
diff --git a/website_conditional_visibility_user_group/models/__init__.py b/website_conditional_visibility_user_group/models/__init__.py
new file mode 100644
index 0000000000..9a5eb71871
--- /dev/null
+++ b/website_conditional_visibility_user_group/models/__init__.py
@@ -0,0 +1 @@
+from . import ir_http
diff --git a/website_conditional_visibility_user_group/models/ir_http.py b/website_conditional_visibility_user_group/models/ir_http.py
new file mode 100644
index 0000000000..5bbd10afbc
--- /dev/null
+++ b/website_conditional_visibility_user_group/models/ir_http.py
@@ -0,0 +1,20 @@
+# Copyright 2024 Tecnativa - David Vidal
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo import api, models
+from odoo.http import request
+
+
+class IrHttp(models.AbstractModel):
+ _inherit = "ir.http"
+
+ @api.model
+ def get_frontend_session_info(self):
+ # Used for the visibility of the website snippets
+ session_info = super().get_frontend_session_info()
+ if request.env.user.has_group("base.group_user"):
+ session_info["user_group"] = "internal"
+ elif request.env.user.has_group("base.group_portal"):
+ session_info["user_group"] = "portal"
+ else:
+ session_info["user_group"] = "public"
+ return session_info
diff --git a/website_conditional_visibility_user_group/readme/CONFIGURE.md b/website_conditional_visibility_user_group/readme/CONFIGURE.md
new file mode 100644
index 0000000000..b518af04f9
--- /dev/null
+++ b/website_conditional_visibility_user_group/readme/CONFIGURE.md
@@ -0,0 +1,9 @@
+To configure the user group visibility:
+
+- With the frontend editor opened select the block you want to set the visibility for.
+- In *Style* tab of the editor panel set the *Visibility* option to *Conditional* and
+ unfold it.
+- Set the *Users* option to *Visible for logged in*.
+- Now you'll see the new *Groups* option.
+- You can choose between *Only internal users*, *Only portal users* or *No restriction*,
+ which is the default value.
diff --git a/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md b/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
new file mode 100644
index 0000000000..96d0c4c7ff
--- /dev/null
+++ b/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
@@ -0,0 +1,2 @@
+- [Tecnativa](https://tecnativa.com)
+ - David Vidal
diff --git a/website_conditional_visibility_user_group/readme/DESCRIPTION.md b/website_conditional_visibility_user_group/readme/DESCRIPTION.md
new file mode 100644
index 0000000000..d97bd2b265
--- /dev/null
+++ b/website_conditional_visibility_user_group/readme/DESCRIPTION.md
@@ -0,0 +1,2 @@
+This module adds extra granularity in the visibility of the website snippets allowing
+to set if the users that can see a block are internal or portal ones.
diff --git a/website_conditional_visibility_user_group/static/description/icon.png b/website_conditional_visibility_user_group/static/description/icon.png
new file mode 100644
index 0000000000000000000000000000000000000000..3a0328b516c4980e8e44cdb63fd945757ddd132d
GIT binary patch
literal 9455
zcmW++2RxMjAAjx~&dlBk9S+%}OXg)AGE&Cb*&}d0jUxM@u(PQx^-s)697TX`ehR4?GS^qbkof1cslKgkU)h65qZ9Oc=ml_0temigYLJfnz{IDzUf>bGs4N!v3=Z3jMq&A#7%rM5eQ#dc?k~!
zVpnB`o+K7|Al`Q_U;eD$B
zfJtP*jH`siUq~{KE)`jP2|#TUEFGRryE2`i0**z#*^6~AI|YzIWy$Cu#CSLW3q=GA
z6`?GZymC;dCPk~rBS%eCb`5OLr;RUZ;D`}um=H)BfVIq%7VhiMr)_#G0N#zrNH|__
zc+blN2UAB0=617@>_u;MPHN;P;N#YoE=)R#i$k_`UAA>WWCcEVMh~L_
zj--gtp&|K1#58Yz*AHCTMziU1Jzt_jG0I@qAOHsk$2}yTmVkBp_eHuY$A9)>P6o~I
z%aQ?!(GqeQ-Y+b0I(m9pwgi(IIZZzsbMv+9w{PFtd_<_(LA~0H(xz{=FhLB@(1&qHA5EJw1>>=%q2f&^X>IQ{!GJ4e9U
z&KlB)z(84HmNgm2hg2C0>WM{E(DdPr+EeU_N@57;PC2&DmGFW_9kP&%?X4}+xWi)(
z;)z%wI5>D4a*5XwD)P--sPkoY(a~WBw;E~AW`Yue4kFa^LM3X`8x|}ZUeMnqr}>kH
zG%WWW>3ml$Yez?i%)2pbKPI7?5o?hydokgQyZsNEr{a|mLdt;X2TX(#B1j35xPnPW
z*bMSSOauW>o;*=kO8ojw91VX!qoOQb)zHJ!odWB}d+*K?#sY_jqPdg{Sm2HdYzdEx
zOGVPhVRTGPtv0o}RfVP;Nd(|CB)I;*t&QO8h
zFfekr30S!-LHmV_Su-W+rEwYXJ^;6&3|L$mMC8*bQptyOo9;>Qb9Q9`ySe3%V$A*9
zeKEe+b0{#KWGp$F+tga)0RtI)nhMa-K@JS}2krK~n8vJ=Ngm?R!9G<~RyuU0d?nz#
z-5EK$o(!F?hmX*2Yt6+coY`6jGbb7tF#6nHA
zuKk=GGJ;ZwON1iAfG$E#Y7MnZVmrY|j0eVI(DN_MNFJmyZ|;w4tf@=CCDZ#5N_0K=
z$;R~bbk?}TpfDjfB&aiQ$VA}s?P}xPERJG{kxk5~R`iRS(SK5d+Xs9swCozZISbnS
zk!)I0>t=A<-^z(cmSFz3=jZ23u13X><0b)P)^1T_))Kr`e!-pb#q&J*Q`p+B6la%C
zuVl&0duN<;uOsB3%T9Fp8t{ED108)`y_~Hnd9AUX7h-H?jVuU|}My+C=TjH(jKz
zqMVr0re3S$H@t{zI95qa)+Crz*5Zj}Ao%4Z><+W(nOZd?gDnfNBC3>M8WE61$So|P
zVvqH0SNtDTcsUdzaMDpT=Ty0pDHHNL@Z0w$Y`XO
z2M-_r1S+GaH%pz#Uy0*w$Vdl=X=rQXEzO}d6J^R6zjM1u&c9vYLvLp?W7w(?np9x1
zE_0JSAJCPB%i7p*Wvg)pn5T`8k3-uR?*NT|J`eS#_#54p>!p(mLDvmc-3o0mX*mp_
zN*AeS<>#^-{S%W<*mz^!X$w_2dHWpcJ6^j64qFBft-o}o_Vx80o0>}Du;>kLts;$8
zC`7q$QI(dKYG`Wa8#wl@V4jVWBRGQ@1dr-hstpQL)Tl+aqVpGpbSfN>5i&QMXfiZ>
zaA?T1VGe?rpQ@;+pkrVdd{klI&jVS@I5_iz!=UMpTsa~mBga?1r}aRBm1WS;TT*s0f0lY=JBl66Upy)-k4J}lh=P^8(SXk~0xW=T9v*B|gzIhN
z>qsO7dFd~mgxAy4V?&)=5ieYq?zi?ZEoj)&2o)RLy=@hbCRcfT5jigwtQGE{L*8<@Yd{zg;CsL5mvzfDY}P-wos_6PfprFVaeqNE%h
zKZhLtcQld;ZD+>=nqN~>GvROfueSzJD&BE*}XfU|H&(FssBqY=hPCt`d
zH?@s2>I(|;fcW&YM6#V#!kUIP8$Nkdh0A(bEVj``-AAyYgwY~jB
zT|I7Bf@%;7aL7Wf4dZ%VqF$eiaC38OV6oy3Z#TER2G+fOCd9Iaoy6aLYbPTN{XRPz
z;U!V|vBf%H!}52L2gH_+j;`bTcQRXB+y9onc^wLm5wi3-Be}U>k_u>2Eg$=k!(l@I
zcCg+flakT2Nej3i0yn+g+}%NYb?ta;R?(g5SnwsQ49U8Wng8d|{B+lyRcEDvR3+`O{zfmrmvFrL6acVP%yG98X
zo&+VBg@px@i)%o?dG(`T;n*$S5*rnyiR#=wW}}GsAcfyQpE|>a{=$Hjg=-*_K;UtD
z#z-)AXwSRY?OPefw^iI+
z)AXz#PfEjlwTes|_{sB?4(O@fg0AJ^g8gP}ex9Ucf*@_^J(s_5jJV}c)s$`Myn|Kd
z$6>}#q^n{4vN@+Os$m7KV+`}c%4)4pv@06af4-x5#wj!KKb%caK{A&Y#Rfs
z-po?Dcb1({W=6FKIUirH&(yg=*6aLCekcKwyfK^JN5{wcA3nhO(o}SK#!CINhI`-I
z1)6&n7O&ZmyFMuNwvEic#IiOAwNkR=u5it{B9n2sAJV5pNhar=j5`*N!Na;c7g!l$
z3aYBqUkqqTJ=Re-;)s!EOeij=7SQZ3Hq}ZRds%IM*PtM$wV
z@;rlc*NRK7i3y5BETSKuumEN`Xu_8GP1Ri=OKQ$@I^ko8>H6)4rjiG5{VBM>B|%`&&s^)jS|-_95&yc=GqjNo{zFkw%%HHhS~e=s
zD#sfS+-?*t|J!+ozP6KvtOl!R)@@-z24}`9{QaVLD^9VCSR2b`b!KC#o;Ki<+wXB6
zx3&O0LOWcg4&rv4QG0)4yb}7BFSEg~=IR5#ZRj8kg}dS7_V&^%#Do==#`u
zpy6{ox?jWuR(;pg+f@mT>#HGWHAJRRDDDv~@(IDw&R>9643kK#HN`!1vBJHnC+RM&yIh8{gG2q
zA%e*U3|N0XSRa~oX-3EAneep)@{h2vvd3Xvy$7og(sayr@95+e6~Xvi1tUqnIxoIH
zVWo*OwYElb#uyW{Imam6f2rGbjR!Y3`#gPqkv57dB6K^wRGxc9B(t|aYDGS=m$&S!NmCtrMMaUg(c
zc2qC=2Z`EEFMW-me5B)24AqF*bV5Dr-M5ig(l-WPS%CgaPzs6p_gnCIvTJ=Y<6!gT
zVt@AfYCzjjsMEGi=rDQHo0yc;HqoRNnNFeWZgcm?f;cp(6CNylj36DoL(?TS7eU#+
z7&mfr#y))+CJOXQKUMZ7QIdS9@#-}7y2K1{8)cCt0~-X0O!O?Qx#E4Og+;A2SjalQ
zs7r?qn0H044=sDN$SRG$arw~n=+T_DNdSrarmu)V6@|?1-ZB#hRn`uilTGPJ@fqEy
zGt(f0B+^JDP&f=r{#Y_wi#AVDf-y!RIXU^0jXsFpf>=Ji*TeqSY!H~AMbJdCGLhC)
zn7Rx+sXw6uYj;WRYrLd^5IZq@6JI1C^YkgnedZEYy<&4(z%Q$5yv#Boo{AH8n$a
zhb4Y3PWdr269&?V%uI$xMcUrMzl=;w<_nm*qr=c3Rl@i5wWB;e-`t7D&c-mcQl7x!
zZWB`UGcw=Y2=}~wzrfLx=uet<;m3~=8I~ZRuzvMQUQdr+yTV|ATf1Uuomr__nDf=X
zZ3WYJtHp_ri(}SQAPjv+Y+0=fH4krOP@S&=zZ-t1jW1o@}z;xk8
z(Nz1co&El^HK^NrhVHa-_;&88vTU>_J33=%{if;BEY*J#1n59=07jrGQ#IP>@u#3A
z;!q+E1Rj3ZJ+!4bq9F8PXJ@yMgZL;>&gYA0%_Kbi8?S=XGM~dnQZQ!yBSgcZhY96H
zrWnU;k)qy`rX&&xlDyA%(a1Hhi5CWkmg(`Gb%m(HKi-7Z!LKGRP_B8@`7&hdDy5n=
z`OIxqxiVfX@OX1p(mQu>0Ai*v_cTMiw4qRt3~NBvr9oBy0)r>w3p~V0SCm=An6@3n)>@z!|o-$HvDK
z|3D2ZMJkLE5loMKl6R^ez@Zz%S$&mbeoqH5`Bb){Ei21q&VP)hWS2tjShfFtGE+$z
zzCR$P#uktu+#!w)cX!lWN1XU%K-r=s{|j?)Akf@q#3b#{6cZCuJ~gCxuMXRmI$nGtnH+-h
z+GEi!*X=AP<|fG`1>MBdTb?28JYc=fGvAi2I<$B(rs$;eoJCyR6_bc~p!XR@O-+sD
z=eH`-ye})I5ic1eL~TDmtfJ|8`0VJ*Yr=hNCd)G1p2MMz4C3^Mj?7;!w|Ly%JqmuW
zlIEW^Ft%z?*|fpXda>Jr^1noFZEwFgVV%|*XhH@acv8rdGxeEX{M$(vG{Zw+x(ei@
zmfXb22}8-?Fi`vo-YVrTH*C?a8%M=Hv9MqVH7H^J$KsD?>!SFZ;ZsvnHr_gn=7acz
z#W?0eCdVhVMWN12VV^$>WlQ?f;P^{(&pYTops|btm6aj>_Uz+hqpGwB)vWp0Cf5y<
zft8-je~nn?W11plq}N)4A{l8I7$!ks_x$PXW-2XaRFswX_BnF{R#6YIwMhAgd5F9X
zGmwdadS6(a^fjHtXg8=l?Rc0Sm%hk6E9!5cLVloEy4eh(=FwgP`)~I^5~pBEWo+F6
zSf2ncyMurJN91#cJTy_u8Y}@%!bq1RkGC~-bV@SXRd4F{R-*V`bS+6;W5vZ(&+I<9$;-V|eNfLa5n-6%
z2(}&uGRF;p92eS*sE*oR$@pexaqr*meB)VhmIg@h{uzkk$9~qh#cHhw#>O%)b@+(|
z^IQgqzuj~Sk(J;swEM-3TrJAPCq9k^^^`q{IItKBRXYe}e0Tdr=Huf7da3$l4PdpwWDop%^}n;dD#K4s#DYA8SHZ
z&1!riV4W4R7R#C))JH1~axJ)RYnM$$lIR%6fIVA@zV{XVyx}C+a-Dt8Y9M)^KU0+H
zR4IUb2CJ{Hg>CuaXtD50jB(_Tcx=Z$^WYu2u5kubqmwp%drJ6
z?Fo40g!Qd<-l=TQxqHEOuPX0;^z7iX?Ke^a%XT<13TA^5`4Xcw6D@Ur&VT&CUe0d}
z1GjOVF1^L@>O)l@?bD~$wzgf(nxX1OGD8fEV?TdJcZc2KoUe|oP1#=$$7ee|xbY)A
zDZq+cuTpc(fFdj^=!;{k03C69lMQ(|>uhRfRu%+!k&YOi-3|1QKB
z
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
Xviia!U7SGha1wx#SCgwmn*{w2TRX*I
literal 0
HcmV?d00001
diff --git a/website_conditional_visibility_user_group/static/description/index.html b/website_conditional_visibility_user_group/static/description/index.html
new file mode 100644
index 0000000000..b8faeddd20
--- /dev/null
+++ b/website_conditional_visibility_user_group/static/description/index.html
@@ -0,0 +1,441 @@
+
+
+
+
+
+
+Conditional visibility for internal users in Website
+
+
+
+
+
Conditional visibility for internal users in Website
+
+
+

+
This module adds extra granularity in the visibility of the website
+snippets allowing to set if the users that can see a block are internal
+or portal ones.
+
Table of contents
+
+
+
+
To configure the user group visibility:
+
+- With the frontend editor opened select the block you want to set the
+visibility for.
+- In Style tab of the editor panel set the Visibility option to
+Conditional and unfold it.
+- Set the Users option to Visible for logged in.
+- Now you’ll see the new Groups option.
+- You can choose between Only internal users, Only portal users or
+No restriction, which is the default value.
+
+
+
+
+
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 to smash it by providing a detailed and welcomed
+feedback.
+
Do not contact contributors directly about support or help with technical issues.
+
+
+
+
+
+
+
+
This module is maintained by the OCA.
+

+
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_conditional_visibility_user_group/static/src/js/inject_dom.esm.js b/website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js
new file mode 100644
index 0000000000..0190631516
--- /dev/null
+++ b/website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js
@@ -0,0 +1,9 @@
+/** @odoo-module */
+/* Copyright 2024 Tecnativa - David Vidal
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
+import {session} from "@web/session";
+
+document.addEventListener("DOMContentLoaded", () => {
+ const htmlEl = document.documentElement;
+ htmlEl.dataset.user_group = session.user_group;
+});
diff --git a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
new file mode 100644
index 0000000000..867ea65984
--- /dev/null
+++ b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
@@ -0,0 +1,28 @@
+/** @odoo-module */
+/* Copyright 2024 Tecnativa - David Vidal
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
+import tour from "web_tour.tour";
+
+tour.register(
+ "conditional_visibility_portal",
+ {
+ test: true,
+ url: "/",
+ },
+ [
+ {
+ content: "The content should be hidden for portal users",
+ trigger: "#wrap",
+ run: function () {
+ const style = window.getComputedStyle(
+ this.$anchor[0].getElementsByClassName("s_text_image")[0]
+ );
+ if (style.display !== "none") {
+ console.error(
+ "Error: This item should be invisible for portal users"
+ );
+ }
+ },
+ },
+ ]
+);
diff --git a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
new file mode 100644
index 0000000000..a192b485bd
--- /dev/null
+++ b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
@@ -0,0 +1,67 @@
+/** @odoo-module */
+/* Copyright 2024 Tecnativa - David Vidal
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
+import tour from "web_tour.tour";
+import wTourUtils from "website.tour_utils";
+
+const snippet = {
+ id: "s_text_image",
+ name: "Text - Image",
+};
+
+tour.register(
+ "conditional_visibility_only_internal_user",
+ {
+ test: true,
+ url: "/",
+ },
+ [
+ {
+ content: "enter edit mode",
+ trigger: "a[data-action=edit]",
+ },
+ wTourUtils.dragNDrop(snippet),
+ wTourUtils.clickOnSnippet(snippet),
+ wTourUtils.changeOption("ConditionalVisibility", "we-toggler"),
+ {
+ content: "Set on conditional visibility",
+ trigger: '[data-name="visibility_conditional"]',
+ run: "click",
+ },
+ {
+ content: "Click in User visibility",
+ trigger: '[data-save-attribute="visibilityValueLogged"]',
+ run: "click",
+ },
+ {
+ content: "Set visibility to logged in users",
+ trigger: '[data-name="visibility_logged_in"]',
+ run: "click",
+ },
+ {
+ content: "Click in group visibility",
+ trigger: '[data-save-attribute="visibilityUserGroup"]',
+ run: "click",
+ },
+ {
+ content: "Set visibility to logged internal users only",
+ trigger: '[data-name="user_group_internal"]',
+ run: "click",
+ },
+ ...wTourUtils.clickOnSave(),
+ {
+ content: "Check if the rule was applied",
+ trigger: "body:not(.editor_enable) #wrap",
+ run: function () {
+ const style = window.getComputedStyle(
+ this.$anchor[0].getElementsByClassName("s_text_image")[0]
+ );
+ if (style.display === "none") {
+ console.error(
+ "Error: this item should be visible for internal users"
+ );
+ }
+ },
+ },
+ ]
+);
diff --git a/website_conditional_visibility_user_group/tests/__init__.py b/website_conditional_visibility_user_group/tests/__init__.py
new file mode 100644
index 0000000000..d1c4bc70cb
--- /dev/null
+++ b/website_conditional_visibility_user_group/tests/__init__.py
@@ -0,0 +1 @@
+from . import test_conditional_visibility_user_group
diff --git a/website_conditional_visibility_user_group/tests/test_conditional_visibility_user_group.py b/website_conditional_visibility_user_group/tests/test_conditional_visibility_user_group.py
new file mode 100644
index 0000000000..d21c0546d3
--- /dev/null
+++ b/website_conditional_visibility_user_group/tests/test_conditional_visibility_user_group.py
@@ -0,0 +1,19 @@
+# Copyright 2024 Tecnativa - David Vidal
+# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl).
+from odoo.tests import HttpCase, new_test_user, tagged
+
+
+@tagged("-at_install", "post_install")
+class TestConditionalVisibilityUserGroup(HttpCase):
+ @classmethod
+ def setUpClass(cls):
+ super().setUpClass()
+ new_test_user(cls.env, login="portal_user", groups="base.group_portal")
+
+ def test_snippet_for_internal_users(self):
+ """Only internal users can see the snippet"""
+ # We drag a new block, set its visibility to internal users and check that
+ # we can see it as internal users
+ self.start_tour("/", "conditional_visibility_only_internal_user", login="admin")
+ # The block is hidden for portal users
+ self.start_tour("/", "conditional_visibility_portal", login="portal_user")
diff --git a/website_conditional_visibility_user_group/views/snippet_options_template.xml b/website_conditional_visibility_user_group/views/snippet_options_template.xml
new file mode 100644
index 0000000000..9b387a8265
--- /dev/null
+++ b/website_conditional_visibility_user_group/views/snippet_options_template.xml
@@ -0,0 +1,48 @@
+
+
+
+
+
+
+ visibility_logged_in
+
+
+
+
+ No restriction
+ Only portal users
+ Only internal users
+
+
+
+
+ user_group_all
+
+
+
From 25943175fb40912aa7b75a1932a00cff08fd8840 Mon Sep 17 00:00:00 2001
From: pilarvargas-tecnativa
Date: Fri, 10 Jan 2025 14:10:48 +0100
Subject: [PATCH 2/8] [IMP] website_conditional_visibility_user_group:
pre-commit auto fixes
---
website_conditional_visibility_user_group/pyproject.toml | 3 +++
1 file changed, 3 insertions(+)
create mode 100644 website_conditional_visibility_user_group/pyproject.toml
diff --git a/website_conditional_visibility_user_group/pyproject.toml b/website_conditional_visibility_user_group/pyproject.toml
new file mode 100644
index 0000000000..4231d0cccb
--- /dev/null
+++ b/website_conditional_visibility_user_group/pyproject.toml
@@ -0,0 +1,3 @@
+[build-system]
+requires = ["whool"]
+build-backend = "whool.buildapi"
From e8fad4e9f81470c026002ac65c9bff974aba3ab9 Mon Sep 17 00:00:00 2001
From: pilarvargas-tecnativa
Date: Mon, 13 Jan 2025 11:19:54 +0100
Subject: [PATCH 3/8] [MIG] website_conditional_visibility_user_group:
Migration to version 17.0
TT51963
---
.../README.rst | 33 ++++++++--------
.../__manifest__.py | 2 +-
...site_conditional_visibility_user_group.pot | 2 +-
.../readme/CONTRIBUTORS.md | 1 +
.../static/description/index.html | 21 +++++-----
.../snippet_visibility_portal_tests.esm.js | 28 ++++++++-----
.../src/tests/snippet_visibility_tests.esm.js | 39 +++++++------------
7 files changed, 65 insertions(+), 61 deletions(-)
diff --git a/website_conditional_visibility_user_group/README.rst b/website_conditional_visibility_user_group/README.rst
index db42063980..c6fa250c9a 100644
--- a/website_conditional_visibility_user_group/README.rst
+++ b/website_conditional_visibility_user_group/README.rst
@@ -7,7 +7,7 @@ Conditional visibility for internal users in Website
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:748c0a8174d9f9a0b4aee5b58aeaced2309a29997f74d53c86a129c7b0b021a0
+ !! source digest: sha256:3bbca96da1873574321a715ab9006d10573854d43eafe55f064b7346fc4fd883
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
@@ -17,13 +17,13 @@ Conditional visibility for internal users in Website
: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/15.0/website_conditional_visibility_user_group
+ :target: https://github.com/OCA/website/tree/17.0/website_conditional_visibility_user_group
:alt: OCA/website
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/website-15-0/website-15-0-website_conditional_visibility_user_group
+ :target: https://translation.odoo-community.org/projects/website-17-0/website-17-0-website_conditional_visibility_user_group
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
- :target: https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=15.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=17.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -42,14 +42,14 @@ Configuration
To configure the user group visibility:
-- With the frontend editor opened select the block you want to set the
- visibility for.
-- In *Style* tab of the editor panel set the *Visibility* option to
- *Conditional* and unfold it.
-- Set the *Users* option to *Visible for logged in*.
-- Now you'll see the new *Groups* option.
-- You can choose between *Only internal users*, *Only portal users* or
- *No restriction*, which is the default value.
+- With the frontend editor opened select the block you want to set the
+ visibility for.
+- In *Style* tab of the editor panel set the *Visibility* option to
+ *Conditional* and unfold it.
+- Set the *Users* option to *Visible for logged in*.
+- Now you'll see the new *Groups* option.
+- You can choose between *Only internal users*, *Only portal users* or
+ *No restriction*, which is the default value.
Bug Tracker
===========
@@ -57,7 +57,7 @@ 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 to smash it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -72,9 +72,10 @@ Authors
Contributors
------------
-- `Tecnativa `__
+- `Tecnativa `__
- - David Vidal
+ - David Vidal
+ - Pilar Vargas
Maintainers
-----------
@@ -89,6 +90,6 @@ 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.
+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_conditional_visibility_user_group/__manifest__.py b/website_conditional_visibility_user_group/__manifest__.py
index d7fe90cb76..0917acf526 100644
--- a/website_conditional_visibility_user_group/__manifest__.py
+++ b/website_conditional_visibility_user_group/__manifest__.py
@@ -3,7 +3,7 @@
{
"name": "Conditional visibility for internal users in Website",
"summary": "Only internal users will see the blocks you add this condition to",
- "version": "15.0.1.0.0",
+ "version": "17.0.1.0.0",
"category": "Product",
"website": "https://github.com/OCA/website",
"author": "Tecnativa, Odoo Community Association (OCA)",
diff --git a/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot b/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
index 0cadf36a81..98fdf23f8f 100644
--- a/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
+++ b/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 15.0\n"
+"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
diff --git a/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md b/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
index 96d0c4c7ff..d0b6436b45 100644
--- a/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
+++ b/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
@@ -1,2 +1,3 @@
- [Tecnativa](https://tecnativa.com)
- David Vidal
+ - Pilar Vargas
diff --git a/website_conditional_visibility_user_group/static/description/index.html b/website_conditional_visibility_user_group/static/description/index.html
index b8faeddd20..94e338087a 100644
--- a/website_conditional_visibility_user_group/static/description/index.html
+++ b/website_conditional_visibility_user_group/static/description/index.html
@@ -1,4 +1,3 @@
-
@@ -9,10 +8,11 @@
/*
:Author: David Goodger (goodger@python.org)
-:Id: $Id: html4css1.css 8954 2022-01-20 10:10:25Z milde $
+:Id: $Id: html4css1.css 9511 2024-01-13 09:50:07Z milde $
:Copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
+Despite the name, some widely supported CSS2 features are used.
See https://docutils.sourceforge.io/docs/howto/html-stylesheets.html for how to
customize this style sheet.
@@ -275,7 +275,7 @@
margin-left: 2em ;
margin-right: 2em }
-pre.code .ln { color: grey; } /* line numbers */
+pre.code .ln { color: gray; } /* line numbers */
pre.code, code { background-color: #eeeeee }
pre.code .comment, code .comment { color: #5C6576 }
pre.code .keyword, code .keyword { color: #3B0D06; font-weight: bold }
@@ -301,7 +301,7 @@
span.pre {
white-space: pre }
-span.problematic {
+span.problematic, pre.problematic {
color: red }
span.section-subtitle {
@@ -367,9 +367,9 @@ Conditional visibility for internal users in Website
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-!! source digest: sha256:748c0a8174d9f9a0b4aee5b58aeaced2309a29997f74d53c86a129c7b0b021a0
+!! source digest: sha256:3bbca96da1873574321a715ab9006d10573854d43eafe55f064b7346fc4fd883
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
-

+

This module adds extra granularity in the visibility of the website
snippets allowing to set if the users that can see a block are internal
or portal ones.
@@ -405,7 +405,7 @@
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 to smash it by providing a detailed and welcomed
-feedback.
+feedback.
Do not contact contributors directly about support or help with technical issues.
@@ -421,6 +421,7 @@
@@ -428,11 +429,13 @@
This module is maintained by the OCA.
-

+
+
+
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.
+
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_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
index 867ea65984..08b3102ef0 100644
--- a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
+++ b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
@@ -1,26 +1,34 @@
/** @odoo-module */
/* Copyright 2024 Tecnativa - David Vidal
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
-import tour from "web_tour.tour";
-tour.register(
+import wTourUtils from "@website/js/tours/tour_utils";
+
+wTourUtils.registerWebsitePreviewTour(
"conditional_visibility_portal",
{
test: true,
url: "/",
},
- [
+ () => [
+ {
+ content: "Go to '/'",
+ trigger: 'header#top a[href="/"]',
+ },
{
content: "The content should be hidden for portal users",
trigger: "#wrap",
run: function () {
- const style = window.getComputedStyle(
- this.$anchor[0].getElementsByClassName("s_text_image")[0]
- );
- if (style.display !== "none") {
- console.error(
- "Error: This item should be invisible for portal users"
- );
+ const elements = this.$anchor[0].getElementsByClassName("s_text_image");
+ if (elements.length === 0) {
+ console.log("Success: Element is not visible for portal users");
+ } else {
+ const style = window.getComputedStyle(elements[0]);
+ if (style.display !== "none") {
+ console.error(
+ "Error: This item should be invisible for portal users"
+ );
+ }
}
},
},
diff --git a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
index a192b485bd..ed29d54b4d 100644
--- a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
+++ b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
@@ -1,33 +1,26 @@
/** @odoo-module */
/* Copyright 2024 Tecnativa - David Vidal
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
-import tour from "web_tour.tour";
-import wTourUtils from "website.tour_utils";
+import wTourUtils from "@website/js/tours/tour_utils";
-const snippet = {
- id: "s_text_image",
- name: "Text - Image",
-};
-
-tour.register(
+wTourUtils.registerWebsitePreviewTour(
"conditional_visibility_only_internal_user",
{
test: true,
url: "/",
+ edition: true,
},
- [
- {
- content: "enter edit mode",
- trigger: "a[data-action=edit]",
- },
- wTourUtils.dragNDrop(snippet),
- wTourUtils.clickOnSnippet(snippet),
+ () => [
+ wTourUtils.dragNDrop({id: "s_text_image", name: "Text - Image"}),
+ wTourUtils.clickOnSnippet({
+ id: "s_text_image",
+ name: "Text - Image",
+ }),
wTourUtils.changeOption("ConditionalVisibility", "we-toggler"),
- {
- content: "Set on conditional visibility",
- trigger: '[data-name="visibility_conditional"]',
- run: "click",
- },
+ wTourUtils.changeOption(
+ "ConditionalVisibility",
+ '[data-name="visibility_conditional"]'
+ ),
{
content: "Click in User visibility",
trigger: '[data-save-attribute="visibilityValueLogged"]',
@@ -51,11 +44,9 @@ tour.register(
...wTourUtils.clickOnSave(),
{
content: "Check if the rule was applied",
- trigger: "body:not(.editor_enable) #wrap",
+ trigger: "iframe #wrap .s_text_image",
run: function () {
- const style = window.getComputedStyle(
- this.$anchor[0].getElementsByClassName("s_text_image")[0]
- );
+ const style = window.getComputedStyle(this.$anchor[0]);
if (style.display === "none") {
console.error(
"Error: this item should be visible for internal users"
From a4d10b40f58770c04622f28b137d5ff930c92e1a Mon Sep 17 00:00:00 2001
From: mymage
Date: Wed, 15 Jan 2025 07:57:04 +0000
Subject: [PATCH 4/8] Added translation using Weblate (Italian)
---
.../i18n/it.po | 40 +++++++++++++++++++
1 file changed, 40 insertions(+)
create mode 100644 website_conditional_visibility_user_group/i18n/it.po
diff --git a/website_conditional_visibility_user_group/i18n/it.po b/website_conditional_visibility_user_group/i18n/it.po
new file mode 100644
index 0000000000..f16b67f408
--- /dev/null
+++ b/website_conditional_visibility_user_group/i18n/it.po
@@ -0,0 +1,40 @@
+# Translation of Odoo Server.
+# This file contains the translation of the following modules:
+# * website_conditional_visibility_user_group
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: Odoo Server 17.0\n"
+"Report-Msgid-Bugs-To: \n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: it\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: \n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#. module: website_conditional_visibility_user_group
+#: model:ir.model,name:website_conditional_visibility_user_group.model_ir_http
+msgid "HTTP Routing"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "No restriction"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "Only internal users"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "Only portal users"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
+msgid "⌙ Groups"
+msgstr ""
From c8e9db2f6431d78be7de6510f1dbe08bd6bb8a8d Mon Sep 17 00:00:00 2001
From: mymage
Date: Wed, 15 Jan 2025 07:57:26 +0000
Subject: [PATCH 5/8] Translated using Weblate (Italian)
Currently translated at 100.0% (5 of 5 strings)
Translation: website-17.0/website-17.0-website_conditional_visibility_user_group
Translate-URL: https://translation.odoo-community.org/projects/website-17-0/website-17-0-website_conditional_visibility_user_group/it/
---
.../i18n/it.po | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/website_conditional_visibility_user_group/i18n/it.po b/website_conditional_visibility_user_group/i18n/it.po
index f16b67f408..2f1ef21e86 100644
--- a/website_conditional_visibility_user_group/i18n/it.po
+++ b/website_conditional_visibility_user_group/i18n/it.po
@@ -6,35 +6,37 @@ msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 17.0\n"
"Report-Msgid-Bugs-To: \n"
-"Last-Translator: Automatically generated\n"
+"PO-Revision-Date: 2025-01-15 10:06+0000\n"
+"Last-Translator: mymage \n"
"Language-Team: none\n"
"Language: it\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: \n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 5.6.2\n"
#. module: website_conditional_visibility_user_group
#: model:ir.model,name:website_conditional_visibility_user_group.model_ir_http
msgid "HTTP Routing"
-msgstr ""
+msgstr "Instradamento HTTP"
#. module: website_conditional_visibility_user_group
#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
msgid "No restriction"
-msgstr ""
+msgstr "Nessuna restrizione"
#. module: website_conditional_visibility_user_group
#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
msgid "Only internal users"
-msgstr ""
+msgstr "Solo utenti interni"
#. module: website_conditional_visibility_user_group
#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
msgid "Only portal users"
-msgstr ""
+msgstr "Solo utenti portale"
#. module: website_conditional_visibility_user_group
#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
msgid "⌙ Groups"
-msgstr ""
+msgstr "⌙ Gruppi"
From b78148e8d2a656adf092a890346c822c643083e9 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adasat=20Torres=20de=20Le=C3=B3n?=
Date: Tue, 18 Aug 2026 09:53:49 +0100
Subject: [PATCH 6/8] [MIG] website_conditional_visibility_user_group:
Migration to 19.0
---
.../README.rst | 18 +++--
.../__manifest__.py | 10 ++-
.../readme/CONTRIBUTORS.md | 2 +
.../static/description/index.html | 30 ++++---
.../static/src/js/inject_dom.esm.js | 10 +--
.../snippet_visibility_portal_tests.esm.js | 28 +++----
.../src/tests/snippet_visibility_tests.esm.js | 78 ++++++++++---------
.../src/website_builder/visibility_option.xml | 37 +++++++++
.../visibility_option_plugin.esm.js | 60 ++++++++++++++
.../views/snippet_options_template.xml | 48 ------------
10 files changed, 194 insertions(+), 127 deletions(-)
create mode 100644 website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml
create mode 100644 website_conditional_visibility_user_group/static/src/website_builder/visibility_option_plugin.esm.js
delete mode 100644 website_conditional_visibility_user_group/views/snippet_options_template.xml
diff --git a/website_conditional_visibility_user_group/README.rst b/website_conditional_visibility_user_group/README.rst
index c6fa250c9a..4a953cb9c3 100644
--- a/website_conditional_visibility_user_group/README.rst
+++ b/website_conditional_visibility_user_group/README.rst
@@ -1,3 +1,7 @@
+.. image:: https://odoo-community.org/readme-banner-image
+ :target: https://odoo-community.org/get-involved?utm_source=readme
+ :alt: Odoo Community Association
+
====================================================
Conditional visibility for internal users in Website
====================================================
@@ -13,17 +17,17 @@ Conditional visibility for internal users in Website
.. |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
+.. |badge2| image:: https://img.shields.io/badge/license-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/17.0/website_conditional_visibility_user_group
+ :target: https://github.com/OCA/website/tree/19.0/website_conditional_visibility_user_group
:alt: OCA/website
.. |badge4| image:: https://img.shields.io/badge/weblate-Translate%20me-F47D42.png
- :target: https://translation.odoo-community.org/projects/website-17-0/website-17-0-website_conditional_visibility_user_group
+ :target: https://translation.odoo-community.org/projects/website-19-0/website-19-0-website_conditional_visibility_user_group
:alt: Translate me on Weblate
.. |badge5| image:: https://img.shields.io/badge/runboat-Try%20me-875A7B.png
- :target: https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=17.0
+ :target: https://runboat.odoo-community.org/builds?repo=OCA/website&target_branch=19.0
:alt: Try me on Runboat
|badge1| |badge2| |badge3| |badge4| |badge5|
@@ -57,7 +61,7 @@ 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 to smash it by providing a detailed and welcomed
-`feedback `_.
+`feedback `_.
Do not contact contributors directly about support or help with technical issues.
@@ -76,6 +80,8 @@ Contributors
- David Vidal
- Pilar Vargas
+ - Carlos Roca
+ - Adasat Torres
Maintainers
-----------
@@ -90,6 +96,6 @@ 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.
+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_conditional_visibility_user_group/__manifest__.py b/website_conditional_visibility_user_group/__manifest__.py
index 0917acf526..6e215be646 100644
--- a/website_conditional_visibility_user_group/__manifest__.py
+++ b/website_conditional_visibility_user_group/__manifest__.py
@@ -3,26 +3,28 @@
{
"name": "Conditional visibility for internal users in Website",
"summary": "Only internal users will see the blocks you add this condition to",
- "version": "17.0.1.0.0",
+ "version": "19.0.1.0.0",
"category": "Product",
"website": "https://github.com/OCA/website",
"author": "Tecnativa, Odoo Community Association (OCA)",
"license": "AGPL-3",
"depends": ["website"],
- "data": ["views/snippet_options_template.xml"],
"assets": {
"web.assets_frontend_minimal": [
- "website_conditional_visibility_user_group/static/src/js/*.js",
+ "website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js",
],
"web.assets_frontend_lazy": [
# Remove assets_frontend_minimal
(
"remove",
- "website_conditional_visibility_user_group/static/src/js/*.js",
+ "website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js",
),
],
"web.assets_tests": [
"website_conditional_visibility_user_group/static/src/tests/*.js"
],
+ "website.website_builder_assets": [
+ "website_conditional_visibility_user_group/static/src/website_builder/**"
+ ],
},
}
diff --git a/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md b/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
index d0b6436b45..607084857a 100644
--- a/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
+++ b/website_conditional_visibility_user_group/readme/CONTRIBUTORS.md
@@ -1,3 +1,5 @@
- [Tecnativa](https://tecnativa.com)
- David Vidal
- Pilar Vargas
+ - Carlos Roca
+ - Adasat Torres
diff --git a/website_conditional_visibility_user_group/static/description/index.html b/website_conditional_visibility_user_group/static/description/index.html
index 94e338087a..cd701a028b 100644
--- a/website_conditional_visibility_user_group/static/description/index.html
+++ b/website_conditional_visibility_user_group/static/description/index.html
@@ -360,16 +360,21 @@
-
-
Conditional visibility for internal users in Website
+
+
+
+
+
+
+
Conditional visibility for internal users in Website
-

+

This module adds extra granularity in the visibility of the website
snippets allowing to set if the users that can see a block are internal
or portal ones.
@@ -387,7 +392,7 @@
Conditional visibility for internal users in Website
-
+
To configure the user group visibility:
- With the frontend editor opened select the block you want to set the
@@ -401,33 +406,35 @@
-
+
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 to smash it by providing a detailed and welcomed
-feedback.
+
feedback.
Do not contact contributors directly about support or help with technical issues.
-
+
-
+
- Tecnativa
- David Vidal
- Pilar Vargas
+- Carlos Roca
+- Adasat Torres
+
diff --git a/website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js b/website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js
index 0190631516..42dfa01f32 100644
--- a/website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js
+++ b/website_conditional_visibility_user_group/static/src/js/inject_dom.esm.js
@@ -1,9 +1,9 @@
-/** @odoo-module */
/* Copyright 2024 Tecnativa - David Vidal
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
import {session} from "@web/session";
-document.addEventListener("DOMContentLoaded", () => {
- const htmlEl = document.documentElement;
- htmlEl.dataset.user_group = session.user_group;
-});
+// Transfer the session's user group as an HTML element attribute so that the
+// conditional visibility CSS selectors can be based on it. It's done at import
+// time (and not on DOMContentLoaded) so the attribute is already set when
+// website's `unhideConditionalElements()` injects the visibility rules.
+document.documentElement.dataset.user_group = session.user_group;
diff --git a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
index 08b3102ef0..8a6f619d69 100644
--- a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
+++ b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_portal_tests.esm.js
@@ -1,34 +1,30 @@
-/** @odoo-module */
/* Copyright 2024 Tecnativa - David Vidal
+ Copyright 2026 Tecnativa - Adasat Torres
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
-import wTourUtils from "@website/js/tours/tour_utils";
+import {registerWebsitePreviewTour} from "@website/js/tours/tour_utils";
-wTourUtils.registerWebsitePreviewTour(
+registerWebsitePreviewTour(
"conditional_visibility_portal",
{
- test: true,
url: "/",
},
() => [
{
content: "Go to '/'",
trigger: 'header#top a[href="/"]',
+ expectUnloadPage: true,
+ run: "click",
},
{
- content: "The content should be hidden for portal users",
- trigger: "#wrap",
+ content: "The content previously hidden should now be visible",
+ trigger: "body #wrapwrap",
run: function () {
- const elements = this.$anchor[0].getElementsByClassName("s_text_image");
- if (elements.length === 0) {
- console.log("Success: Element is not visible for portal users");
- } else {
- const style = window.getComputedStyle(elements[0]);
- if (style.display !== "none") {
- console.error(
- "Error: This item should be invisible for portal users"
- );
- }
+ const style = window.getComputedStyle(
+ this.anchor.getElementsByClassName("s_text_image")[0]
+ );
+ if (style.display === "none") {
+ console.error("error");
}
},
},
diff --git a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
index ed29d54b4d..8a7dd95857 100644
--- a/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
+++ b/website_conditional_visibility_user_group/static/src/tests/snippet_visibility_tests.esm.js
@@ -1,58 +1,62 @@
-/** @odoo-module */
/* Copyright 2024 Tecnativa - David Vidal
+ Copyrigt 2026 Tecnativa - Adasat Torres
* License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
-import wTourUtils from "@website/js/tours/tour_utils";
+import {
+ changeOptionInPopover,
+ clickOnEditAndWaitEditMode,
+ clickOnSave,
+ clickOnSnippet,
+ insertSnippet,
+ registerWebsitePreviewTour,
+} from "@website/js/tours/tour_utils";
-wTourUtils.registerWebsitePreviewTour(
+const snippets = [
+ {
+ id: "s_text_image",
+ name: "Text - Image",
+ groupName: "Content",
+ },
+];
+registerWebsitePreviewTour(
"conditional_visibility_only_internal_user",
{
- test: true,
url: "/",
edition: true,
},
() => [
- wTourUtils.dragNDrop({id: "s_text_image", name: "Text - Image"}),
- wTourUtils.clickOnSnippet({
- id: "s_text_image",
- name: "Text - Image",
- }),
- wTourUtils.changeOption("ConditionalVisibility", "we-toggler"),
- wTourUtils.changeOption(
- "ConditionalVisibility",
- '[data-name="visibility_conditional"]'
- ),
- {
- content: "Click in User visibility",
- trigger: '[data-save-attribute="visibilityValueLogged"]',
- run: "click",
- },
- {
- content: "Set visibility to logged in users",
- trigger: '[data-name="visibility_logged_in"]',
- run: "click",
- },
+ ...insertSnippet(snippets[0]),
+ ...clickOnSnippet(snippets[0]),
+ ...changeOptionInPopover("Text - Image", "Visibility", "Conditionally"),
+ ...changeOptionInPopover("Text - Image", "Users", "Visible for Logged In"),
+ ...changeOptionInPopover("Text - Image", "Groups", "Only portal users"),
+ ...clickOnSave(),
{
- content: "Click in group visibility",
- trigger: '[data-save-attribute="visibilityUserGroup"]',
- run: "click",
+ trigger: ".o_website_preview",
},
{
- content: "Set visibility to logged internal users only",
- trigger: '[data-name="user_group_internal"]',
- run: "click",
+ content: "Check if the rule was applied",
+ trigger: ":iframe #wrap:not(:visible)",
+ run: function () {
+ const style = window.getComputedStyle(
+ this.anchor.getElementsByClassName("s_text_image")[0]
+ );
+ if (style.display !== "none") {
+ console.error("error");
+ }
+ },
},
- ...wTourUtils.clickOnSave(),
+ ...clickOnEditAndWaitEditMode(),
{
- content: "Check if the rule was applied",
- trigger: "iframe #wrap .s_text_image",
+ content:
+ "Check if the element is visible as it should always be visible in edit view",
+ trigger: ":iframe #wrap .s_text_image",
run: function () {
- const style = window.getComputedStyle(this.$anchor[0]);
+ const style = window.getComputedStyle(this.anchor);
if (style.display === "none") {
- console.error(
- "Error: this item should be visible for internal users"
- );
+ console.error("error");
}
},
},
+ ...clickOnSave(),
]
);
diff --git a/website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml b/website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml
new file mode 100644
index 0000000000..8870aeb0a5
--- /dev/null
+++ b/website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml
@@ -0,0 +1,37 @@
+
+
+
+ 'visibility_value_logged'
+
+
+
+
+ No restriction
+ Only portal users
+ Only internal users
+
+
+
+
+
diff --git a/website_conditional_visibility_user_group/static/src/website_builder/visibility_option_plugin.esm.js b/website_conditional_visibility_user_group/static/src/website_builder/visibility_option_plugin.esm.js
new file mode 100644
index 0000000000..98200765dd
--- /dev/null
+++ b/website_conditional_visibility_user_group/static/src/website_builder/visibility_option_plugin.esm.js
@@ -0,0 +1,60 @@
+/*
+ Copyrigt 2026 Tecnativa - Carlos Roca
+ * License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). */
+import {registry} from "@web/core/registry";
+import {Plugin} from "@html_editor/plugin";
+import {selectElements} from "@html_editor/utils/dom_traversal";
+import {withSequence} from "@html_editor/utils/resource";
+import {VisibilityOption} from "@website/builder/plugins/options/visibility_option";
+
+const LOGGED_IN_VALUE = "true";
+
+class VisibilityGroupOptionPlugin extends Plugin {
+ static id = "visibilityGroupOption";
+ resources = {
+ visibility_selector_parameters: [
+ {
+ saveAttribute: "visibilityUserGroup",
+ attributeName: "data-user_group",
+ callWith: "value",
+ },
+ ],
+ normalize_handlers: withSequence(1, this.cleanUserGroup.bind(this)),
+ };
+
+ /**
+ * The group restriction only makes sense on top of "Visible for Logged In".
+ * Drop it as soon as that condition no longer holds, otherwise it would
+ * keep hiding the snippet with no visible option to undo it.
+ *
+ * @param {HTMLElement} rootEl
+ */
+ cleanUserGroup(rootEl) {
+ for (const el of selectElements(rootEl, VisibilityOption.selector)) {
+ if (!el.dataset.visibilityUserGroup) {
+ continue;
+ }
+ if (el.dataset.visibility !== "conditional" || !this.isLoggedInOnly(el)) {
+ delete el.dataset.visibilityUserGroup;
+ }
+ }
+ }
+
+ isLoggedInOnly(el) {
+ const logged = el.dataset.visibilityValueLogged;
+ if (!logged || el.dataset.visibilityValueLoggedRule === "hide") {
+ return false;
+ }
+ try {
+ return JSON.parse(logged).some(
+ (record) => String(record.value) === LOGGED_IN_VALUE
+ );
+ } catch {
+ return false;
+ }
+ }
+}
+
+registry
+ .category("website-plugins")
+ .add(VisibilityGroupOptionPlugin.id, VisibilityGroupOptionPlugin);
diff --git a/website_conditional_visibility_user_group/views/snippet_options_template.xml b/website_conditional_visibility_user_group/views/snippet_options_template.xml
deleted file mode 100644
index 9b387a8265..0000000000
--- a/website_conditional_visibility_user_group/views/snippet_options_template.xml
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-
-
-
-
- visibility_logged_in
-
-
-
-
- No restriction
- Only portal users
- Only internal users
-
-
-
-
- user_group_all
-
-
-
From e1e4bf401d6146326f06e113b53998824aabcbc2 Mon Sep 17 00:00:00 2001
From: oca-ci
Date: Wed, 19 Aug 2026 07:35:50 +0000
Subject: [PATCH 7/8] [UPD] Update
website_conditional_visibility_user_group.pot
---
...site_conditional_visibility_user_group.pot | 32 +++++++++++++------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot b/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
index 98fdf23f8f..d5973856f6 100644
--- a/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
+++ b/website_conditional_visibility_user_group/i18n/website_conditional_visibility_user_group.pot
@@ -4,7 +4,7 @@
#
msgid ""
msgstr ""
-"Project-Id-Version: Odoo Server 17.0\n"
+"Project-Id-Version: Odoo Server 19.0\n"
"Report-Msgid-Bugs-To: \n"
"Last-Translator: \n"
"Language-Team: \n"
@@ -13,27 +13,41 @@ msgstr ""
"Content-Transfer-Encoding: \n"
"Plural-Forms: \n"
+#. module: website_conditional_visibility_user_group
+#: model:ir.model.fields,field_description:website_conditional_visibility_user_group.field_ir_http__display_name
+msgid "Display Name"
+msgstr ""
+
+#. module: website_conditional_visibility_user_group
+#. odoo-javascript
+#: code:addons/website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml:0
+msgid "Groups"
+msgstr ""
+
#. module: website_conditional_visibility_user_group
#: model:ir.model,name:website_conditional_visibility_user_group.model_ir_http
msgid "HTTP Routing"
msgstr ""
#. module: website_conditional_visibility_user_group
-#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
-msgid "No restriction"
+#: model:ir.model.fields,field_description:website_conditional_visibility_user_group.field_ir_http__id
+msgid "ID"
msgstr ""
#. module: website_conditional_visibility_user_group
-#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
-msgid "Only internal users"
+#. odoo-javascript
+#: code:addons/website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml:0
+msgid "No restriction"
msgstr ""
#. module: website_conditional_visibility_user_group
-#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
-msgid "Only portal users"
+#. odoo-javascript
+#: code:addons/website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml:0
+msgid "Only internal users"
msgstr ""
#. module: website_conditional_visibility_user_group
-#: model_terms:ir.ui.view,arch_db:website_conditional_visibility_user_group.snippet_options
-msgid "⌙ Groups"
+#. odoo-javascript
+#: code:addons/website_conditional_visibility_user_group/static/src/website_builder/visibility_option.xml:0
+msgid "Only portal users"
msgstr ""
From 7d20f701d579f7732320ee47eb911c724219cd18 Mon Sep 17 00:00:00 2001
From: OCA-git-bot
Date: Wed, 19 Aug 2026 07:40:11 +0000
Subject: [PATCH 8/8] [BOT] post-merge updates
---
README.md | 1 +
setup/_metapackage/pyproject.toml | 3 ++-
website_conditional_visibility_user_group/README.rst | 2 +-
.../static/description/index.html | 4 ++--
4 files changed, 6 insertions(+), 4 deletions(-)
diff --git a/README.md b/README.md
index e01fed8a35..d038b6a647 100644
--- a/README.md
+++ b/README.md
@@ -22,6 +22,7 @@ Available addons
----------------
addon | version | maintainers | summary
--- | --- | --- | ---
+[website_conditional_visibility_user_group](website_conditional_visibility_user_group/) | 19.0.1.0.0 | | Only internal users will see the blocks you add this condition to
[website_cookiefirst](website_cookiefirst/) | 19.0.1.0.0 | | Cookiefirst integration
[website_form_require_legal](website_form_require_legal/) | 19.0.1.0.1 | | Add possibility to require confirm legal terms.
[website_forum_subscription](website_forum_subscription/) | 19.0.1.0.0 | | Adds a button to allow subscription from the website
diff --git a/setup/_metapackage/pyproject.toml b/setup/_metapackage/pyproject.toml
index 02081d7fd4..0f184e6dd8 100644
--- a/setup/_metapackage/pyproject.toml
+++ b/setup/_metapackage/pyproject.toml
@@ -1,7 +1,8 @@
[project]
name = "odoo-addons-oca-website"
-version = "19.0.20260811.0"
+version = "19.0.20260819.0"
dependencies = [
+ "odoo-addon-website_conditional_visibility_user_group==19.0.*",
"odoo-addon-website_cookiefirst==19.0.*",
"odoo-addon-website_form_require_legal==19.0.*",
"odoo-addon-website_forum_subscription==19.0.*",
diff --git a/website_conditional_visibility_user_group/README.rst b/website_conditional_visibility_user_group/README.rst
index 4a953cb9c3..d9c369a2b6 100644
--- a/website_conditional_visibility_user_group/README.rst
+++ b/website_conditional_visibility_user_group/README.rst
@@ -11,7 +11,7 @@ Conditional visibility for internal users in Website
!! This file is generated by oca-gen-addon-readme !!
!! changes will be overwritten. !!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- !! source digest: sha256:3bbca96da1873574321a715ab9006d10573854d43eafe55f064b7346fc4fd883
+ !! source digest: sha256:2ec599ab98418df44eda5654653c5adaf26dc7c9dff29cdceefe969d7aed1ae4
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
.. |badge1| image:: https://img.shields.io/badge/maturity-Beta-yellow.png
diff --git a/website_conditional_visibility_user_group/static/description/index.html b/website_conditional_visibility_user_group/static/description/index.html
index cd701a028b..7f3695f746 100644
--- a/website_conditional_visibility_user_group/static/description/index.html
+++ b/website_conditional_visibility_user_group/static/description/index.html
@@ -3,7 +3,7 @@
-Conditional visibility for internal users in Website
+README.rst