From 242ffe2f2444a0facdab981c439322aa99bead44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 7 Jul 2021 06:51:36 +0000 Subject: [PATCH] [IMP] website_event_*: simplify menu definition code Now that all menus are managed the same way using a menu type and clear definitions we can set all menu type definitions to override _get_website_menu_entries. This is just some code cleaning and has no functional impact. Task-2577079 PR odoo#72411 --- addons/website_event/models/event_event.py | 29 ++++++------------- .../models/event_event.py | 8 +++-- .../website_event_track/models/event_event.py | 28 +++++------------- 3 files changed, 21 insertions(+), 44 deletions(-) diff --git a/addons/website_event/models/event_event.py b/addons/website_event/models/event_event.py index 0292e8d14fa..ab278a7e980 100644 --- a/addons/website_event/models/event_event.py +++ b/addons/website_event/models/event_event.py @@ -286,18 +286,6 @@ class Event(models.Model): (_('Community'), '/event/%s/community' % slug(self), False, 80, 'community'), ] - def _get_introduction_menu_entries(self): - return [self._get_website_menu_entries()[0]] - - def _get_location_menu_entries(self): - return [self._get_website_menu_entries()[1]] - - def _get_register_menu_entries(self): - return [self._get_website_menu_entries()[2]] - - def _get_community_menu_entries(self): - return [self._get_website_menu_entries()[3]] - def _update_website_menus(self, menus_update_by_field=None): """ Synchronize event configuration and its menu entries for frontend. @@ -309,15 +297,15 @@ class Event(models.Model): root_menu = self.env['website.menu'].sudo().create({'name': event.name, 'website_id': event.website_id.id}) event.menu_id = root_menu if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('community_menu')): - event._update_website_menu_entry('community_menu', 'community_menu_ids', '_get_community_menu_entries') + event._update_website_menu_entry('community_menu', 'community_menu_ids', 'community') if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('introduction_menu')): - event._update_website_menu_entry('introduction_menu', 'introduction_menu_ids', '_get_introduction_menu_entries') + event._update_website_menu_entry('introduction_menu', 'introduction_menu_ids', 'introduction') if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('location_menu')): - event._update_website_menu_entry('location_menu', 'location_menu_ids', '_get_location_menu_entries') + event._update_website_menu_entry('location_menu', 'location_menu_ids', 'location') if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('register_menu')): - event._update_website_menu_entry('register_menu', 'register_menu_ids', '_get_register_menu_entries') + event._update_website_menu_entry('register_menu', 'register_menu_ids', 'register') - def _update_website_menu_entry(self, fname_bool, fname_o2m, method_name): + def _update_website_menu_entry(self, fname_bool, fname_o2m, fmenu_type): """ Generic method to create menu entries based on a flag on event. This method is a bit obscure, but is due to preparation of adding new menus entries and pages for event in a stable version, leading to some constraints @@ -332,11 +320,12 @@ class Event(models.Model): self.ensure_one() new_menu = None + menu_data = [menu_info for menu_info in self._get_website_menu_entries() + if menu_info[4] == fmenu_type] if self[fname_bool] and not self[fname_o2m]: # menus not found but boolean True: get menus to create - for menu_data in getattr(self, method_name)(): - (name, url, xml_id, menu_sequence, menu_type) = menu_data - new_menu = self._create_menu(menu_sequence, name, url, xml_id, menu_type=menu_type) + for name, url, xml_id, menu_sequence, menu_type in menu_data: + new_menu = self._create_menu(menu_sequence, name, url, xml_id, menu_type) elif not self[fname_bool]: # will cascade delete to the website.event.menu self[fname_o2m].mapped('menu_id').sudo().unlink() diff --git a/addons/website_event_exhibitor/models/event_event.py b/addons/website_event_exhibitor/models/event_event.py index aa51fda9bdc..dc2ec8618b8 100644 --- a/addons/website_event_exhibitor/models/event_event.py +++ b/addons/website_event_exhibitor/models/event_event.py @@ -49,13 +49,15 @@ class EventEvent(models.Model): super(EventEvent, self)._update_website_menus(menus_update_by_field=menus_update_by_field) for event in self: if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('exhibitor_menu')): - event._update_website_menu_entry('exhibitor_menu', 'exhibitor_menu_ids', '_get_exhibitor_menu_entries') + event._update_website_menu_entry('exhibitor_menu', 'exhibitor_menu_ids', 'exhibitor') def _get_menu_type_field_matching(self): res = super(EventEvent, self)._get_menu_type_field_matching() res['exhibitor'] = 'exhibitor_menu' return res - def _get_exhibitor_menu_entries(self): + def _get_website_menu_entries(self): self.ensure_one() - return [(_('Exhibitors'), '/event/%s/exhibitors' % slug(self), False, 60, 'exhibitor')] + return super(EventEvent, self)._get_website_menu_entries() + [ + (_('Exhibitors'), '/event/%s/exhibitors' % slug(self), False, 60, 'exhibitor') + ] diff --git a/addons/website_event_track/models/event_event.py b/addons/website_event_track/models/event_event.py index 5473f21e732..4f39c86f10b 100644 --- a/addons/website_event_track/models/event_event.py +++ b/addons/website_event_track/models/event_event.py @@ -73,33 +73,19 @@ class Event(models.Model): super(Event, self)._update_website_menus(menus_update_by_field=menus_update_by_field) for event in self: if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('website_track')): - event._update_website_menu_entry('website_track', 'track_menu_ids', '_get_track_menu_entries') - if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('website_track_proposal')): - event._update_website_menu_entry('website_track_proposal', 'track_proposal_menu_ids', '_get_track_proposal_menu_entries') + event._update_website_menu_entry('website_track', 'track_menu_ids', 'track') + if event.menu_id and (not menus_update_by_field or event in menus_update_by_field.get('track')): + event._update_website_menu_entry('website_track_proposal', 'track_proposal_menu_ids', 'track_proposal') def _get_menu_type_field_matching(self): res = super(Event, self)._get_menu_type_field_matching() res['track_proposal'] = 'website_track_proposal' return res - def _get_track_menu_entries(self): - """ Method returning menu entries to display on the website view of the - event, possibly depending on some options in inheriting modules. - - Each menu entry is a tuple containing : - * name: menu item name - * url: if set, url to a route (do not use xml_id in that case); - * xml_id: template linked to the page (do not use url in that case); - * menu_type: key linked to the menu, used to categorize the created - website.event.menu; - """ + def _get_website_menu_entries(self): self.ensure_one() - return [ + return super(Event, self)._get_website_menu_entries() + [ (_('Talks'), '/event/%s/track' % slug(self), False, 10, 'track'), - (_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, 'track') + (_('Agenda'), '/event/%s/agenda' % slug(self), False, 70, 'track'), + (_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False, 15, 'track_proposal') ] - - def _get_track_proposal_menu_entries(self): - """ See website_event_track._get_track_menu_entries() """ - self.ensure_one() - return [(_('Talk Proposals'), '/event/%s/track_proposal' % slug(self), False, 15, 'track_proposal')]