summaryrefslogtreecommitdiff
path: root/addons/website
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-01-14 10:34:50 +0100
committerChristophe Simonis <chs@odoo.com>2019-01-14 10:34:50 +0100
commit3cbc9dd6c034f8bbba8a75def07d063e3f625bdb (patch)
tree55d7e9b940e27a1dad5415b6b721ab464d0bc418 /addons/website
parent976429c8c69b2225e96ccb0e254ee4849832ed27 (diff)
parent6a0675d36dd888daa4183f3d609ce334ed3cb493 (diff)
[MERGE] forward port branch 12.0 up to 6a0675d36dd
Diffstat (limited to 'addons/website')
-rw-r--r--addons/website/i18n/website.pot40
-rw-r--r--addons/website/models/ir_ui_view.py15
-rw-r--r--addons/website/models/website.py29
-rw-r--r--addons/website/static/src/scss/bootstrap_overridden.scss4
-rw-r--r--addons/website/views/website_templates.xml6
5 files changed, 81 insertions, 13 deletions
diff --git a/addons/website/i18n/website.pot b/addons/website/i18n/website.pot
index eabf5704b9a..47348bd14aa 100644
--- a/addons/website/i18n/website.pot
+++ b/addons/website/i18n/website.pot
@@ -533,6 +533,26 @@ msgid "<i class=\"fa fa-trash-o\"/>Remove Slide"
msgstr ""
#. module: website
+#: model_terms:ir.ui.view,arch_db:website.list_website_pages
+msgid "<i title=\"Is the page SEO optimized?\" class=\"fa fa-search\"/>"
+msgstr ""
+
+#. module: website
+#: model_terms:ir.ui.view,arch_db:website.list_website_pages
+msgid "<i title=\"Is the page included in the main menu?\" class=\"fa fa-thumb-tack\"/>"
+msgstr ""
+
+#. module: website
+#: model_terms:ir.ui.view,arch_db:website.list_website_pages
+msgid "<i title=\"Is the page indexed by search engines?\" class=\"fa fa-globe\"/>"
+msgstr ""
+
+#. module: website
+#: model_terms:ir.ui.view,arch_db:website.list_website_pages
+msgid "<i title=\"Is the page published?\" class=\"fa fa-eye\"/>"
+msgstr ""
+
+#. module: website
#: model_terms:ir.ui.view,arch_db:website.s_comparisons
msgid "<i>Instant setup, satisfied or reimbursed.</i>"
msgstr ""
@@ -570,6 +590,16 @@ msgid "<span class=\"carousel-control-prev-icon\"/>\n"
msgstr ""
#. module: website
+#: model_terms:ir.ui.view,arch_db:website.res_config_settings_view_form
+msgid "<span class=\"fa fa-lg fa-globe\" title=\"Values set here are website-specific.\" groups=\"website.group_multi_website\"/>"
+msgstr ""
+
+#. module: website
+#: model_terms:ir.ui.view,arch_db:website.company_description
+msgid "<span class=\"fa fa-map-marker fa-fw mt16\" role=\"img\" aria-label=\"Address\" title=\"Address\"/>"
+msgstr ""
+
+#. module: website
#: model_terms:ir.ui.view,arch_db:website.user_navbar
msgid "<span class=\"fa fa-pencil\"/>Edit"
msgstr ""
@@ -580,6 +610,11 @@ msgid "<span class=\"fa fa-plus\"/>New"
msgstr ""
#. module: website
+#: model_terms:ir.ui.view,arch_db:website.list_website_pages
+msgid "<span class=\"fa fa-sort fa-lg\" role=\"img\" aria-label=\"Sort\" title=\"Sort\"/>"
+msgstr ""
+
+#. module: website
#: model_terms:ir.ui.view,arch_db:website.s_facebook_page
msgid "<span class=\"o_add_facebook_page\">\n"
" <i class=\"fa fa-plus-circle\"/> Add Facebook Page\n"
@@ -619,6 +654,11 @@ msgstr ""
#. module: website
#: model_terms:ir.ui.view,arch_db:website.user_navbar
+msgid "<span title=\"Mobile preview\" role=\"img\" aria-label=\"Mobile preview\" class=\"fa fa-mobile\"/>"
+msgstr ""
+
+#. module: website
+#: model_terms:ir.ui.view,arch_db:website.user_navbar
msgid "<span/>\n"
" <span class=\"css_publish\">Unpublished</span>\n"
" <span class=\"css_unpublish\">Published</span>"
diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py
index 1a98713326d..d37852ae0de 100644
--- a/addons/website/models/ir_ui_view.py
+++ b/addons/website/models/ir_ui_view.py
@@ -143,8 +143,12 @@ class View(models.Model):
return self.filtered(lambda view: not view.website_id)
for view in self:
+ # specific view: add it if it's for the current website and ignore
+ # it if it's for another website
if view.website_id and view.website_id.id == current_website_id:
most_specific_views |= view
+ # generic view: add it only if, for the current website, there is no
+ # specific view for this view (based on the same `key` attribute)
elif not view.website_id and not any(view.key == view2.key and view2.website_id and view2.website_id.id == current_website_id for view2 in self):
most_specific_views |= view
@@ -201,6 +205,17 @@ class View(models.Model):
@api.model
@tools.ormcache_context('self._uid', 'xml_id', keys=('website_id',))
def get_view_id(self, xml_id):
+ """If a website_id is in the context and the given xml_id is not an int
+ then try to get the id of the specific view for that website, but
+ fallback to the id of the generic view if there is no specific.
+
+ If no website_id is in the context, it might randomly return the generic
+ or the specific view, so it's probably not recommanded to use this
+ method. `viewref` is probably more suitable.
+
+ Archived views are ignored (unless the active_test context is set, but
+ then the ormcache_context will not work as expected).
+ """
if 'website_id' in self._context and not isinstance(xml_id, int):
current_website = self.env['website'].browse(self._context.get('website_id'))
domain = ['&', ('key', '=', xml_id)] + current_website.website_domain()
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 82709c4663d..4aea35aa481 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -503,12 +503,18 @@ class Website(models.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.
+
+ If no website_id is in the context, it will return the generic view,
+ instead of a random one like `get_view_id`.
+
+ Look also for archived views, no matter the context.
+
: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
+ view = View
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'))
@@ -520,20 +526,20 @@ class Website(models.Model):
if views:
view = views.filter_duplicate()
else:
- view = self.env.ref(view_id)
+ # we handle the raise below
+ view = self.env.ref(view_id, raise_if_not_found=False)
# 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
+ if not view or view._name != 'ir.ui.view':
+ # make sure we always return a recordset
+ view = View
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:
+ if not view and raise_if_not_found:
raise ValueError('No record found for unique ID %s. It may have been deleted.' % (view_id))
- return None
+ return view
@api.model
def get_template(self, template):
@@ -1151,9 +1157,12 @@ class Menu(models.Model):
@api.multi
def unlink(self):
default_menu = self.env.ref('website.main_menu', raise_if_not_found=False)
+ menus_to_remove = self
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()
+ menus_to_remove |= self.env['website.menu'].search([('url', '=', menu.url),
+ ('website_id', '!=', False),
+ ('id', '!=', menu.id)])
+ return super(Menu, menus_to_remove).unlink()
@api.one
def _compute_visible(self):
diff --git a/addons/website/static/src/scss/bootstrap_overridden.scss b/addons/website/static/src/scss/bootstrap_overridden.scss
index 8c21c748fe1..b25b9af1f25 100644
--- a/addons/website/static/src/scss/bootstrap_overridden.scss
+++ b/addons/website/static/src/scss/bootstrap_overridden.scss
@@ -31,3 +31,7 @@ $font-family-sans-serif: nth($o-theme-fonts, $o-theme-font-number);
$headings-font-family: nth($o-theme-fonts, $o-theme-headings-font-number);
$headings-color: color('h1');
+
+// Jumbotron
+
+$jumbotron-bg: transparent !default;
diff --git a/addons/website/views/website_templates.xml b/addons/website/views/website_templates.xml
index ad5e297a3a2..05febbf1fae 100644
--- a/addons/website/views/website_templates.xml
+++ b/addons/website/views/website_templates.xml
@@ -847,7 +847,7 @@
<div class="container accordion mb32 mt32" id="debug_infos">
<div class="card" t-if="exception">
<h4 class="card-header">
- <a data-toggle="collapse" data-parent="#debug_infos" href="#error_main">Error</a>
+ <a data-toggle="collapse" href="#error_main">Error</a>
</h4>
<div id="error_main" class="collapse in">
<div class="card-body">
@@ -861,7 +861,7 @@
</div>
<div class="card" t-if="qweb_exception">
<h4 class="card-header">
- <a data-toggle="collapse" data-parent="#adebug_infos" href="#error_qweb">QWeb</a>
+ <a data-toggle="collapse" href="#error_qweb">QWeb</a>
</h4>
<div id="error_qweb" class="collapse">
<div class="card-body">
@@ -881,7 +881,7 @@
</div>
<div class="card" t-if="traceback">
<h4 class="card-header">
- <a data-toggle="collapse" data-parent="#adebug_infos" href="#error_traceback">Traceback</a>
+ <a data-toggle="collapse" href="#error_traceback">Traceback</a>
</h4>
<div id="error_traceback" class="collapse">
<div class="card-body">