summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRomain Derie <rde@odoo.com>2018-10-12 11:44:12 +0000
committerRomain Derie <rde@odoo.com>2018-10-12 12:11:09 +0000
commitb48d2b6b5e3aa0f74146c79c7746bf9efdbd8dc4 (patch)
tree1d4033b5f7a960153074ea15ed7c34f0e76dfdff
parent2e8712f85910137ecde1f070b11b5b7ee31c9307 (diff)
[FIX] website: Remove related website menus on module uninstall
Commit 850e1675eb improved the website.menu creation on module install (eg: /shop for website_sale). This commit aims to do the same on module uninstall. Before this commit: Uninstalling a website module would uninstall its website.menu (/shop) stored on the default menu tree. But the copies of that default menu, on websites, would remains. Indeed, there is no direct link between the default menus and its copies. More annoyingly, installing that website module again after uninstalling it would create a new copy of the default menu, resulting in multiple same menus on website. Now, if the menu to be uninstalled is in the default tree menu, we remove all its copies (the website.menu having that same URL). Closes #27488, closes #27721
-rw-r--r--addons/website/models/website.py7
-rw-r--r--addons/website/tests/test_menu.py8
2 files changed, 15 insertions, 0 deletions
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index a371d760e8e..0c18a2c05d9 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -1114,6 +1114,13 @@ class Menu(models.Model):
res = super(Menu, self).create(vals)
return res # Only one record is returned but multiple could have been created
+ @api.multi
+ def unlink(self):
+ default_menu = self.env.ref('website.main_menu', raise_if_not_found=False)
+ for menu in self.filtered(lambda m: default_menu and m.parent_id.id == default_menu.id):
+ self.env['website.menu'].search([('url', '=', menu.url), ('id', '!=', menu.id)]).unlink()
+ return super(Menu, self).unlink()
+
@api.one
def _compute_visible(self):
visible = True
diff --git a/addons/website/tests/test_menu.py b/addons/website/tests/test_menu.py
index c907b986171..e2a80902aea 100644
--- a/addons/website/tests/test_menu.py
+++ b/addons/website/tests/test_menu.py
@@ -59,3 +59,11 @@ class TestMenu(common.TransactionCase):
total_menus = Menu.search_count([])
Website.create({'name': 'new website'})
self.assertEqual(total_menus + 4, Menu.search_count([]), "New website's bootstraping should have duplicate default menu tree (Top/Home/Contactus/Sub Default Menu)")
+
+ def test_default_menu_unlink(self):
+ Menu = self.env['website.menu']
+ total_menu_items = Menu.search_count([])
+
+ default_menu = self.env.ref('website.main_menu')
+ default_menu.child_id[0].unlink()
+ self.assertEqual(total_menu_items - 3, Menu.search_count([]), "Deleting a default menu item should delete its 'copies' (same URL) from website's menu trees. In this case, the default child menu and its copies on website 1 and website 2")