Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 62 additions & 0 deletions website_menu_by_user_status/README.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg
:target: http://www.gnu.org/licenses/agpl-3.0-standalone.html
:alt: License: AGPL-3

===========================
Website Menu By User Status
===========================

The module manages display website menu entries, depending if the user is
logged or not.
The selection of the display status can be chosen logged and/or not.

Usage
=====

To use this module, you need to:

#. Go to Website > Configuration > Settings > Pages.
#. Select the page for which you would like to hide the menu.
#. In the `Related Menu Items` table, check whether the menu item is visible for logged/unlogged users.

#. remove default filter to edit website menu line

Bug Tracker
===========

Bugs are tracked on `GitHub Issues
<https://github.com/OCA/website/issues>`_. In case of trouble, please
check there if your issue has already been reported. If you spotted it first,
help us smash it by providing detailed and welcomed feedback.

Credits
=======

Images
------

* Odoo Community Association: `Icon <https://odoo-community.org/logo.png>`_.

Contributors
------------
* Bruno Joliveau <bruno.joliveau@savoirfairelinux.com>
* Jordi Riera <jordi.riera@savoirfairelinux.com>
* Meyomesse Gilles <meyomesse.gilles@gmail.com>
* David Dufresne

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

Maintainer
----------

.. image:: https://odoo-community.org/logo.png
:alt: Odoo Community Association
:target: https://odoo-community.org

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.

To contribute to this module, please visit https://odoo-community.org.
3 changes: 3 additions & 0 deletions website_menu_by_user_status/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import models
18 changes: 18 additions & 0 deletions website_menu_by_user_status/__manifest__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
# Copyright 2013-2017 Savoir-faire Linux (<http://www.savoirfairelinux.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
{
'name': 'Website Menu By User Display',
'version': '11.0.1.0.0',
'author': 'Savoir-faire Linux,Odoo Community Association (OCA)',
'website': 'https://github.com/OCA/website',
'license': 'AGPL-3',
'category': 'Website',
'summary': 'Allow to manage the display of website.menus',
'depends': [
'website',
],
'data': [
'views/website_menu.xml',
],
'installable': True,
}
3 changes: 3 additions & 0 deletions website_menu_by_user_status/models/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import website_menu
40 changes: 40 additions & 0 deletions website_menu_by_user_status/models/website_menu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Copyright 2013-2017 Savoir-faire Linux (<http://www.savoirfairelinux.com>)
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo import api, fields, models, _


class WebsiteMenu(models.Model):
"""Improve website.menu with adding booleans that drive
if the menu is displayed when the user is logger or not.
"""

_inherit = 'website.menu'

user_logged = fields.Boolean(
string="User Logged",
default=True,
help=_("If checked, "
"the menu will be displayed when the user is logged "
"and give access.")
)

user_not_logged = fields.Boolean(
string="User Not Logged",
default=True,
help=_("If checked, "
"the menu will be displayed when the user is not logged "
"and give access.")
)

@api.one
def _compute_visible(self):
"""Display the menu item whether the user is logged or not."""
super()._compute_visible()
if not self.is_visible:
return

if self.env.user == self.env.ref('base.public_user'):
self.is_visible = self.user_not_logged
else:
self.is_visible = self.user_logged
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 4 additions & 0 deletions website_menu_by_user_status/tests/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Copyright 2018 David Dufresne
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from . import test_website_menu
56 changes: 56 additions & 0 deletions website_menu_by_user_status/tests/test_website_menu.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
# Copyright 2018 David Dufresne
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).

from odoo.tests import SavepointCase


class TestWebsiteMenu(SavepointCase):

@classmethod
def setUpClass(cls):
super().setUpClass()
cls.page = cls.env.ref('website.contactus_page')
cls.page.is_visible = False

cls.menu = cls.env.ref('website.menu_contactus')
cls.menu.user_logged = False
cls.menu.user_not_logged = False

cls.public_user = cls.env.ref('base.public_user')
cls.demo_user = cls.env.ref('base.user_demo')

def test_visible_user_logged_demo(self):
self.page.is_visible = True
self.menu.user_logged = True
self.assertTrue(self.menu.sudo(self.demo_user).is_visible)

def test_visible_user_logged_public(self):
self.page.is_visible = True
self.menu.user_logged = True
self.assertFalse(self.menu.sudo(self.public_user).is_visible)

def test_visible_user_not_logged_demo(self):
self.page.is_visible = True
self.user_not_logged = True
self.assertFalse(self.menu.sudo(self.demo_user).is_visible)

def test_visible_user_not_logged_public(self):
self.page.is_visible = True
self.user_not_logged = True
self.assertFalse(self.menu.sudo(self.public_user).is_visible)

def test_not_visible_user_logged_demo(self):
self.menu.user_logged = True
self.assertTrue(self.menu.sudo(self.demo_user).is_visible)

def test_not_visible_user_logged_public(self):
self.menu.user_logged = True
self.assertFalse(self.menu.sudo(self.public_user).is_visible)

def test_not_visible_user_not_logged_demo(self):
self.user_not_logged = True
self.assertFalse(self.menu.sudo(self.demo_user).is_visible)

def test_not_visible_user_not_logged_public(self):
self.user_not_logged = True
self.assertFalse(self.menu.sudo(self.public_user).is_visible)
18 changes: 18 additions & 0 deletions website_menu_by_user_status/views/website_menu.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright 2013-2017 Savoir-faire Linux (<http://www.savoirfairelinux.com>)
License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl). -->
<odoo>
<data>
<record id="website_menu_display" model="ir.ui.view">
<field name="name">Website.menu: Display to user booleans</field>
<field name="model">website.menu</field>
<field name="inherit_id" ref="website.menu_tree"/>
<field name="arch" type="xml">
<field name="new_window" position="after">
<field name="user_logged"/>
<field name="user_not_logged"/>
</field>
</field>
</record>
</data>
</odoo>