summaryrefslogtreecommitdiff
path: root/addons/website/models/website.py
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-01-09 15:44:05 +0000
committerChristophe Simonis <chs@odoo.com>2019-01-09 15:56:53 +0000
commit8aa8548d8ab68feb13f3bde51c557db84877e809 (patch)
tree930790c1c84a4412db777986f6b2077808560d95 /addons/website/models/website.py
parent55a48e341580a6a400c36b6ba0d7b12ff9997f12 (diff)
parent3e4138deaa23b3631dc3fce33cd6d1b3be28ffbd (diff)
[MERGE] forward port branch 12.0 up to 3e4138deaa2
closes odoo/odoo#30045
Diffstat (limited to 'addons/website/models/website.py')
-rw-r--r--addons/website/models/website.py42
1 files changed, 36 insertions, 6 deletions
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 0a99b8ef8eb..82709c4663d 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -173,7 +173,6 @@ class Website(models.Model):
default_menu = self.env.ref('website.main_menu')
self.copy_menu_hierarchy(default_menu)
- @api.model
def copy_menu_hierarchy(self, top_menu):
def copy_menu(menu, t_menu):
new_menu = menu.copy({
@@ -281,11 +280,6 @@ class Website(models.Model):
key_copy = string + (inc and "-%s" % inc or "")
return key_copy
- def key_to_view_id(self, view_id):
- return self.env['ir.ui.view'].search([
- ('id', '=', view_id), ('type', '=', 'qweb')
- ] + self.env['website'].website_domain(self._context.get('website_id')))
-
@api.model
def page_search_dependencies(self, page_id=False):
""" Search dependencies just for information. It will not catch 100%
@@ -506,6 +500,42 @@ class Website(models.Model):
return request.env.user.id == request.website.user_id.id
@api.model
+ def viewref(self, view_id, raise_if_not_found=True):
+ ''' Given an xml_id or a view_id, return the corresponding view record.
+ In case of website context, return the most specific one.
+ :param view_id: either a string xml_id or an integer view_id
+ :param raise_if_not_found: should the method raise an error if no view found
+ :return: The view record or empty recordset
+ '''
+ View = self.env['ir.ui.view']
+ view = None
+ if isinstance(view_id, str):
+ if 'website_id' in self._context:
+ domain = [('key', '=', view_id)] + self.env['website'].website_domain(self._context.get('website_id'))
+ order = 'website_id'
+ else:
+ domain = [('key', '=', view_id)]
+ order = View._order
+ views = View.with_context(active_test=False).search(domain, order=order)
+ if views:
+ view = views.filter_duplicate()
+ else:
+ view = self.env.ref(view_id)
+ # self.env.ref might return something else than an ir.ui.view (eg: a theme.ir.ui.view)
+ if view._name != 'ir.ui.view':
+ view = None
+ elif isinstance(view_id, int):
+ view = View.browse(view_id)
+ else:
+ raise ValueError('Expecting a string or an integer, not a %s.' % (type(view_id)))
+
+ if view:
+ return view
+ if raise_if_not_found:
+ raise ValueError('No record found for unique ID %s. It may have been deleted.' % (view_id))
+ return None
+
+ @api.model
def get_template(self, template):
View = self.env['ir.ui.view']
if isinstance(template, int):