[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
This commit is contained in:
@@ -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()
|
||||
|
||||
@@ -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')
|
||||
]
|
||||
|
||||
@@ -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')]
|
||||
|
||||
Reference in New Issue
Block a user