diff --git a/website_menu_restriction/README.rst b/website_menu_restriction/README.rst new file mode 100755 index 000000000..b065b4228 --- /dev/null +++ b/website_menu_restriction/README.rst @@ -0,0 +1,46 @@ +.. image:: https://img.shields.io/badge/licence-AGPL--3-blue.svg + :target: https://www.gnu.org/licenses/agpl-3.0-standalone.html + :alt: License: AGPL-3 + +Website Menu Restriction +======================== +This module helps to manage visibility of website menu based on user groups. + +Configuration +============= +No additional configurations needed. + +Company +------- +* `Cybrosys Techno Solutions `__ + +License +------- +GNU AFFERO GENERAL PUBLIC LICENSE v3.0 (AGPL-3) +(https://www.gnu.org/licenses/agpl-3.0-standalone.html) + +Credits +------- +Developer: (V16)NAVEEN KRISHNA T, Contact: odoo@cybrosys.com + +Contacts +-------- +* Mail Contact : odoo@cybrosys.com +* Website : https://cybrosys.com + +Bug Tracker +----------- +Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. + +Maintainer +========== +.. image:: https://cybrosys.com/images/logo.png + :target: https://cybrosys.com + +This module is maintained by Cybrosys Technologies. + +For support and more information, please visit `Our Website `__ + +Further information +=================== +HTML Description: ``__ diff --git a/website_menu_restriction/__init__.py b/website_menu_restriction/__init__.py new file mode 100644 index 000000000..94c414a11 --- /dev/null +++ b/website_menu_restriction/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: NAVEEN KRISHNA T (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +################################################################################ +from . import models diff --git a/website_menu_restriction/__manifest__.py b/website_menu_restriction/__manifest__.py new file mode 100644 index 000000000..089ce7a62 --- /dev/null +++ b/website_menu_restriction/__manifest__.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: NAVEEN KRISHNA T (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +################################################################################ +{ + 'name': 'Website Menu Restriction', + 'version': '16.0.1.0.0', + 'category': 'Website', + 'summary': 'Menu Group Access Restriction', + 'description': 'This module helps to manage visibility of website' + ' menu based on user groups.', + 'author': 'Cybrosys Techno Solutions', + 'company': 'Cybrosys Techno Solutions', + 'maintainer': 'Cybrosys Techno Solutions', + 'website': 'https://www.cybrosys.com', + 'depends': ['base', 'website'], + 'data': [ + 'security/website_security.xml', + 'views/website_menu_views.xml', + ], + 'images': ['static/description/banner.png'], + 'license': 'AGPL-3', + 'installable': True, + 'auto_install': False, + 'application': False, +} diff --git a/website_menu_restriction/doc/RELEASE_NOTES.md b/website_menu_restriction/doc/RELEASE_NOTES.md new file mode 100644 index 000000000..5546e228f --- /dev/null +++ b/website_menu_restriction/doc/RELEASE_NOTES.md @@ -0,0 +1,6 @@ +## Module + +#### 28.06.2024 +#### Version 16.0.1.0.0 +#### ADD +- Initial commit for Website Menu Restriction diff --git a/website_menu_restriction/models/__init__.py b/website_menu_restriction/models/__init__.py new file mode 100644 index 000000000..e0a3a99ae --- /dev/null +++ b/website_menu_restriction/models/__init__.py @@ -0,0 +1,22 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: NAVEEN KRISHNA T (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +################################################################################ +from . import website_menu diff --git a/website_menu_restriction/models/website_menu.py b/website_menu_restriction/models/website_menu.py new file mode 100644 index 000000000..87ab8af07 --- /dev/null +++ b/website_menu_restriction/models/website_menu.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +################################################################################ +# +# Cybrosys Technologies Pvt. Ltd. +# +# Copyright (C) 2024-TODAY Cybrosys Technologies(). +# Author: NAVEEN KRISHNA T (odoo@cybrosys.com) +# +# You can modify it under the terms of the GNU AFFERO +# GENERAL PUBLIC LICENSE (AGPL v3), Version 3. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU AFFERO GENERAL PUBLIC LICENSE (AGPL v3) for more details. +# +# You should have received a copy of the GNU AFFERO GENERAL PUBLIC LICENSE +# (AGPL v3) along with this program. +# If not, see . +# +################################################################################ +from odoo import fields, models + + +class WebsiteMenu(models.Model): + _inherit = 'website.menu' + """Inheriting to add Groups related fields for use in rules""" + + group_ids = fields.Many2many('res.groups', + string="Visible Groups", + help="User need to be at least in one of " + "these groups to see the menu") diff --git a/website_menu_restriction/security/website_security.xml b/website_menu_restriction/security/website_security.xml new file mode 100644 index 000000000..51744c465 --- /dev/null +++ b/website_menu_restriction/security/website_security.xml @@ -0,0 +1,12 @@ + + + + + Website menu: group_ids + + + ['|', ('group_ids', '=', False), ('group_ids', 'in', user.groups_id.ids)] + + + + diff --git a/website_menu_restriction/static/description/assets/icons/check.png b/website_menu_restriction/static/description/assets/icons/check.png new file mode 100644 index 000000000..c8e85f51d Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/check.png differ diff --git a/website_menu_restriction/static/description/assets/icons/chevron.png b/website_menu_restriction/static/description/assets/icons/chevron.png new file mode 100644 index 000000000..2089293d6 Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/chevron.png differ diff --git a/website_menu_restriction/static/description/assets/icons/cogs.png b/website_menu_restriction/static/description/assets/icons/cogs.png new file mode 100644 index 000000000..95d0bad62 Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/cogs.png differ diff --git a/website_menu_restriction/static/description/assets/icons/consultation.png b/website_menu_restriction/static/description/assets/icons/consultation.png new file mode 100644 index 000000000..8319d4baa Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/consultation.png differ diff --git a/website_menu_restriction/static/description/assets/icons/ecom-black.png b/website_menu_restriction/static/description/assets/icons/ecom-black.png new file mode 100644 index 000000000..a9385ff13 Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/ecom-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/education-black.png b/website_menu_restriction/static/description/assets/icons/education-black.png new file mode 100644 index 000000000..3eb09b27b Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/education-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/hotel-black.png b/website_menu_restriction/static/description/assets/icons/hotel-black.png new file mode 100644 index 000000000..130f613be Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/hotel-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/license.png b/website_menu_restriction/static/description/assets/icons/license.png new file mode 100644 index 000000000..a5869797e Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/license.png differ diff --git a/website_menu_restriction/static/description/assets/icons/lifebuoy.png b/website_menu_restriction/static/description/assets/icons/lifebuoy.png new file mode 100644 index 000000000..658d56ccc Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/lifebuoy.png differ diff --git a/website_menu_restriction/static/description/assets/icons/manufacturing-black.png b/website_menu_restriction/static/description/assets/icons/manufacturing-black.png new file mode 100644 index 000000000..697eb0e9f Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/manufacturing-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/pos-black.png b/website_menu_restriction/static/description/assets/icons/pos-black.png new file mode 100644 index 000000000..97c0f90c1 Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/pos-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/puzzle.png b/website_menu_restriction/static/description/assets/icons/puzzle.png new file mode 100644 index 000000000..65cf854e7 Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/puzzle.png differ diff --git a/website_menu_restriction/static/description/assets/icons/restaurant-black.png b/website_menu_restriction/static/description/assets/icons/restaurant-black.png new file mode 100644 index 000000000..4a35eb939 Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/restaurant-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/service-black.png b/website_menu_restriction/static/description/assets/icons/service-black.png new file mode 100644 index 000000000..301ab51cb Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/service-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/trading-black.png b/website_menu_restriction/static/description/assets/icons/trading-black.png new file mode 100644 index 000000000..9398ba2f1 Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/trading-black.png differ diff --git a/website_menu_restriction/static/description/assets/icons/training.png b/website_menu_restriction/static/description/assets/icons/training.png new file mode 100644 index 000000000..884ca024d Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/training.png differ diff --git a/website_menu_restriction/static/description/assets/icons/update.png b/website_menu_restriction/static/description/assets/icons/update.png new file mode 100644 index 000000000..ecbc5a01a Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/update.png differ diff --git a/website_menu_restriction/static/description/assets/icons/user.png b/website_menu_restriction/static/description/assets/icons/user.png new file mode 100644 index 000000000..6ffb23d9f Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/user.png differ diff --git a/website_menu_restriction/static/description/assets/icons/wrench.png b/website_menu_restriction/static/description/assets/icons/wrench.png new file mode 100644 index 000000000..6c04dea0f Binary files /dev/null and b/website_menu_restriction/static/description/assets/icons/wrench.png differ diff --git a/website_menu_restriction/static/description/assets/misc/categories.png b/website_menu_restriction/static/description/assets/misc/categories.png new file mode 100644 index 000000000..bedf1e0b1 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/categories.png differ diff --git a/website_menu_restriction/static/description/assets/misc/check-box.png b/website_menu_restriction/static/description/assets/misc/check-box.png new file mode 100644 index 000000000..42caf24b9 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/check-box.png differ diff --git a/website_menu_restriction/static/description/assets/misc/compass.png b/website_menu_restriction/static/description/assets/misc/compass.png new file mode 100644 index 000000000..d5fed8faa Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/compass.png differ diff --git a/website_menu_restriction/static/description/assets/misc/corporate.png b/website_menu_restriction/static/description/assets/misc/corporate.png new file mode 100644 index 000000000..2eb13edbf Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/corporate.png differ diff --git a/website_menu_restriction/static/description/assets/misc/customer-support.png b/website_menu_restriction/static/description/assets/misc/customer-support.png new file mode 100644 index 000000000..79efc72ed Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/customer-support.png differ diff --git a/website_menu_restriction/static/description/assets/misc/cybrosys-logo.png b/website_menu_restriction/static/description/assets/misc/cybrosys-logo.png new file mode 100644 index 000000000..cc3cc0ccf Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/cybrosys-logo.png differ diff --git a/website_menu_restriction/static/description/assets/misc/features.png b/website_menu_restriction/static/description/assets/misc/features.png new file mode 100644 index 000000000..b41769f77 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/features.png differ diff --git a/website_menu_restriction/static/description/assets/misc/logo.png b/website_menu_restriction/static/description/assets/misc/logo.png new file mode 100644 index 000000000..478462d3e Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/logo.png differ diff --git a/website_menu_restriction/static/description/assets/misc/pictures.png b/website_menu_restriction/static/description/assets/misc/pictures.png new file mode 100644 index 000000000..56d255fe9 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/pictures.png differ diff --git a/website_menu_restriction/static/description/assets/misc/pie-chart.png b/website_menu_restriction/static/description/assets/misc/pie-chart.png new file mode 100644 index 000000000..426e05244 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/pie-chart.png differ diff --git a/website_menu_restriction/static/description/assets/misc/right-arrow.png b/website_menu_restriction/static/description/assets/misc/right-arrow.png new file mode 100644 index 000000000..730984a06 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/right-arrow.png differ diff --git a/website_menu_restriction/static/description/assets/misc/star.png b/website_menu_restriction/static/description/assets/misc/star.png new file mode 100644 index 000000000..2eb9ab29f Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/star.png differ diff --git a/website_menu_restriction/static/description/assets/misc/support.png b/website_menu_restriction/static/description/assets/misc/support.png new file mode 100644 index 000000000..4f18b8b82 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/support.png differ diff --git a/website_menu_restriction/static/description/assets/misc/whatsapp.png b/website_menu_restriction/static/description/assets/misc/whatsapp.png new file mode 100644 index 000000000..d513a5356 Binary files /dev/null and b/website_menu_restriction/static/description/assets/misc/whatsapp.png differ diff --git a/website_menu_restriction/static/description/assets/modules/l1.png b/website_menu_restriction/static/description/assets/modules/l1.png new file mode 100644 index 000000000..ed175b076 Binary files /dev/null and b/website_menu_restriction/static/description/assets/modules/l1.png differ diff --git a/website_menu_restriction/static/description/assets/modules/l2.png b/website_menu_restriction/static/description/assets/modules/l2.png new file mode 100644 index 000000000..c29fffb4e Binary files /dev/null and b/website_menu_restriction/static/description/assets/modules/l2.png differ diff --git a/website_menu_restriction/static/description/assets/modules/l3.png b/website_menu_restriction/static/description/assets/modules/l3.png new file mode 100644 index 000000000..98f0d59ee Binary files /dev/null and b/website_menu_restriction/static/description/assets/modules/l3.png differ diff --git a/website_menu_restriction/static/description/assets/modules/l4.png b/website_menu_restriction/static/description/assets/modules/l4.png new file mode 100644 index 000000000..d1dfa627b Binary files /dev/null and b/website_menu_restriction/static/description/assets/modules/l4.png differ diff --git a/website_menu_restriction/static/description/assets/modules/l5.png b/website_menu_restriction/static/description/assets/modules/l5.png new file mode 100644 index 000000000..e8188b4e4 Binary files /dev/null and b/website_menu_restriction/static/description/assets/modules/l5.png differ diff --git a/website_menu_restriction/static/description/assets/modules/l6.png b/website_menu_restriction/static/description/assets/modules/l6.png new file mode 100644 index 000000000..0ac4a7a47 Binary files /dev/null and b/website_menu_restriction/static/description/assets/modules/l6.png differ diff --git a/website_menu_restriction/static/description/assets/screenshots/hero.gif b/website_menu_restriction/static/description/assets/screenshots/hero.gif new file mode 100644 index 000000000..fbfbaec4d Binary files /dev/null and b/website_menu_restriction/static/description/assets/screenshots/hero.gif differ diff --git a/website_menu_restriction/static/description/assets/screenshots/menu1.png b/website_menu_restriction/static/description/assets/screenshots/menu1.png new file mode 100644 index 000000000..e98193207 Binary files /dev/null and b/website_menu_restriction/static/description/assets/screenshots/menu1.png differ diff --git a/website_menu_restriction/static/description/assets/screenshots/menu2.png b/website_menu_restriction/static/description/assets/screenshots/menu2.png new file mode 100644 index 000000000..165da7f75 Binary files /dev/null and b/website_menu_restriction/static/description/assets/screenshots/menu2.png differ diff --git a/website_menu_restriction/static/description/assets/screenshots/menu3.png b/website_menu_restriction/static/description/assets/screenshots/menu3.png new file mode 100644 index 000000000..c83673fb0 Binary files /dev/null and b/website_menu_restriction/static/description/assets/screenshots/menu3.png differ diff --git a/website_menu_restriction/static/description/assets/screenshots/menu4.png b/website_menu_restriction/static/description/assets/screenshots/menu4.png new file mode 100644 index 000000000..2c62e7722 Binary files /dev/null and b/website_menu_restriction/static/description/assets/screenshots/menu4.png differ diff --git a/website_menu_restriction/static/description/assets/screenshots/menu5.png b/website_menu_restriction/static/description/assets/screenshots/menu5.png new file mode 100644 index 000000000..b2db6936f Binary files /dev/null and b/website_menu_restriction/static/description/assets/screenshots/menu5.png differ diff --git a/website_menu_restriction/static/description/banner.png b/website_menu_restriction/static/description/banner.png new file mode 100644 index 000000000..0714497ea Binary files /dev/null and b/website_menu_restriction/static/description/banner.png differ diff --git a/website_menu_restriction/static/description/icon.png b/website_menu_restriction/static/description/icon.png new file mode 100644 index 000000000..5aea4f071 Binary files /dev/null and b/website_menu_restriction/static/description/icon.png differ diff --git a/website_menu_restriction/static/description/index.html b/website_menu_restriction/static/description/index.html new file mode 100644 index 000000000..a8fdd3e0d --- /dev/null +++ b/website_menu_restriction/static/description/index.html @@ -0,0 +1,605 @@ +
+ +
+ +
+
+ Community +
+
+ Enterprise +
+
+
+ + +

+ Website Menu Restriction

+

+ This Module Helps to Manage Visibility of Website Menu Based on User + groups. +

+ + +
+ +
+
+ +
+

+ Explore This + Module

+
+ + + +
+
+ +
+

+ Overview +

+
+
+
+ This module enhances website navigation by managing the visibility of + menu items based on user groups. It provides administrators with the tools + to assign menus to specific user groups, ensuring users see only the relevant options. + Menus dynamically update in real-time as users log in, reflecting their group memberships. +
+
+ + + +
+
+ +
+

+ Features +

+
+
+
+
+ + Assign specific menus to user groups, ensuring relevant and secure access. +
+
+ + + Menus update in real-time based on user group membership upon login. + +
+
+ + + Easily configure which menu items are visible to each user group, tailoring navigation to user roles. + +
+
+
+ + +
+
+ +
+

+ Screenshots +

+
+
+
+
+

+ Enable debug mode, then go to Configurations -> Menus.

+ +
+
+

+ Select and open the menu that needs to be configured in form view. Add the required groups to the "Visible Groups" field so that only the listed groups can see the menu on the website. +

+ +
+
+

+ Leaving the "Visible Groups" field empty will allow access to the menu for all users.

+ +
+
+

+ After the updates, you can see that users outside of the specified groups cannot see the menu on the website. +

+ +
+
+

+ All users belonging to the specified groups can see the menu item on the website. +

+ +
+
+
+ + +
+
+ +
+

+ Related + Products +

+
+
+
+ +
+
+ + +
+
+ +
+

+ Our Services +

+
+
+
+
+
+ +
+
+ Odoo + Customization
+
+
+
+ +
+
+ Odoo + Implementation
+
+
+
+ +
+
+ Odoo + Support
+
+
+
+ +
+
+ Hire + Odoo + Developer
+
+
+
+ +
+
+ Odoo + Integration
+
+
+
+ +
+
+ Odoo + Migration
+
+
+
+ +
+
+ Odoo + Consultancy
+
+
+
+ +
+
+ Odoo + Implementation
+
+
+
+ +
+
+ Odoo + Licensing Consultancy
+
+
+
+ + +
+
+ +
+

+ Our + Industries +

+
+
+
+
+
+ +
+ Trading +
+

+ Easily procure + and + sell your products

+
+
+
+
+ +
+ POS +
+

+ Easy + configuration + and convivial experience

+
+
+
+
+ +
+ Education +
+

+ A platform for + educational management

+
+
+
+
+ +
+ Manufacturing +
+

+ Plan, track and + schedule your operations

+
+
+
+
+ +
+ E-commerce & Website +
+

+ Mobile + friendly, + awe-inspiring product pages

+
+
+
+
+ +
+ Service Management +
+

+ Keep track of + services and invoice

+
+
+
+
+ +
+ Restaurant +
+

+ Run your bar or + restaurant methodically

+
+
+
+
+ +
+ Hotel Management +
+

+ An + all-inclusive + hotel management application

+
+
+
+
+ + +
+
+ +
+

+ Support +

+
+
+
+
+
+
+ +
+
+

Need Help?

+

Got questions or need help? + Get in touch.

+ +

+ odoo@cybrosys.com

+
+
+
+
+
+
+
+ +
+
+

WhatsApp

+

Say hi to us on WhatsApp!

+ +

+ +91 86068 + 27707

+
+
+
+
+
+
+
+ +
+
+
+ diff --git a/website_menu_restriction/views/website_menu_views.xml b/website_menu_restriction/views/website_menu_views.xml new file mode 100644 index 000000000..9d8d3b3a8 --- /dev/null +++ b/website_menu_restriction/views/website_menu_views.xml @@ -0,0 +1,14 @@ + + + + + website.menu.view.form.inherit.restriction.groups + website.menu + + + + + + + +