summaryrefslogtreecommitdiff
path: root/addons/website
diff options
context:
space:
mode:
authorChristophe Simonis <chs@odoo.com>2019-06-14 15:20:01 +0200
committerChristophe Simonis <chs@odoo.com>2019-06-14 15:20:01 +0200
commit34a8754d4f0a6dca7cf612859d5702bcae1f90d6 (patch)
tree757fd2bd012ff92968ea0cc0f27523fd0a1587cf /addons/website
parent856685d6408857678ca9fc25b09dfea468800f93 (diff)
parent498b4b4350d5fdeab0fb58275ad3b8e4dd443190 (diff)
[MERGE] forward port branch saas-12.2 up to 498b4b4350d
Diffstat (limited to 'addons/website')
-rw-r--r--addons/website/controllers/main.py7
-rw-r--r--addons/website/data/website_data.xml65
-rw-r--r--addons/website/models/ir_ui_view.py3
-rw-r--r--addons/website/models/website.py2
-rw-r--r--addons/website/tests/test_views.py48
5 files changed, 89 insertions, 36 deletions
diff --git a/addons/website/controllers/main.py b/addons/website/controllers/main.py
index d322366f359..5e7e39f9dfc 100644
--- a/addons/website/controllers/main.py
+++ b/addons/website/controllers/main.py
@@ -99,7 +99,7 @@ class Website(Home):
if request.env['res.users'].browse(request.uid).has_group('base.group_user'):
redirect = b'/web?' + request.httprequest.query_string
else:
- redirect = '/'
+ redirect = '/my'
return http.redirect_with_hash(redirect)
return response
@@ -467,3 +467,8 @@ class WebsiteBinary(http.Controller):
if unique:
kw['unique'] = unique
return Binary().content_image(**kw)
+
+ @http.route(['/favicon.ico'], type='http', auth='public', website=True)
+ def favicon(self, **kw):
+ # when opening a pdf in chrome, chrome tries to open the default favicon url
+ return self.content_image(model='website', id=str(request.website.id), field='favicon', **kw)
diff --git a/addons/website/data/website_data.xml b/addons/website/data/website_data.xml
index 9701610dde3..37cd73125e4 100644
--- a/addons/website/data/website_data.xml
+++ b/addons/website/data/website_data.xml
@@ -1,27 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
- <data noupdate="1">
- <!-- Default Menu to store module menus for new website -->
- <record id="main_menu" model="website.menu">
- <field name="name">Default Main Menu</field>
- <field name="url">/default-main-menu</field>
- </record>
- <record id="menu_home" model="website.menu">
- <field name="name">Home</field>
- <field name="url">/</field>
- <field name="parent_id" ref="website.main_menu"/>
- <field name="sequence" type="int">10</field>
- </record>
- <record id="menu_contactus" model="website.menu">
- <field name="name">Contact us</field>
- <field name="url">/contactus</field>
- <field name="parent_id" ref="website.main_menu"/>
- <field name="sequence" type="int">60</field>
- </record>
-
+ <data>
<!-- split between ir_ui_view & website_page record to keep external_id on ir_ui_view -->
-
- <!-- Homepage -->
<record id="homepage" model="ir.ui.view">
<field name="name">Home</field>
<field name="type">qweb</field>
@@ -35,13 +15,7 @@
</t>
</field>
</record>
- <record id="homepage_page" model="website.page">
- <field name="website_published">True</field>
- <field name="url">/</field>
- <field name="view_id" ref="homepage"/>
- </record>
- <!-- Contact Us page -->
<record id="contactus" model="ir.ui.view">
<field name="name">Contact Us</field>
<field name="type">qweb</field>
@@ -93,13 +67,7 @@
</t>
</field>
</record>
- <record id="contactus_page" model="website.page">
- <field name="url">/contactus</field>
- <field name="website_published">True</field>
- <field name="view_id" ref="contactus"/>
- </record>
- <!-- About Us page -->
<record id="aboutus" model="ir.ui.view">
<field name="name">About us</field>
<field name="type">qweb</field>
@@ -145,12 +113,43 @@
</t>
</field>
</record>
+ </data>
+
+ <data noupdate="1">
+ <record id="homepage_page" model="website.page">
+ <field name="website_published">True</field>
+ <field name="url">/</field>
+ <field name="view_id" ref="homepage"/>
+ </record>
+ <record id="contactus_page" model="website.page">
+ <field name="url">/contactus</field>
+ <field name="website_published">True</field>
+ <field name="view_id" ref="contactus"/>
+ </record>
<record id="aboutus_page" model="website.page">
<field name="website_published">True</field>
<field name="url">/aboutus</field>
<field name="view_id" ref="aboutus"/>
</record>
+ <!-- Default Menu to store module menus for new website -->
+ <record id="main_menu" model="website.menu">
+ <field name="name">Default Main Menu</field>
+ <field name="url">/default-main-menu</field>
+ </record>
+ <record id="menu_home" model="website.menu">
+ <field name="name">Home</field>
+ <field name="url">/</field>
+ <field name="parent_id" ref="website.main_menu"/>
+ <field name="sequence" type="int">10</field>
+ </record>
+ <record id="menu_contactus" model="website.menu">
+ <field name="name">Contact us</field>
+ <field name="url">/contactus</field>
+ <field name="parent_id" ref="website.main_menu"/>
+ <field name="sequence" type="int">60</field>
+ </record>
+
<record id="default_website" model="website">
<field name="name">My Website</field>
<field name="domain"></field>
diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py
index a396b676940..946ed9fe7f8 100644
--- a/addons/website/models/ir_ui_view.py
+++ b/addons/website/models/ir_ui_view.py
@@ -82,7 +82,8 @@ class View(models.Model):
# original tree. Indeed, the order of children 'id' fields
# must remain the same so that the inheritance is applied
# in the same order in the copied tree.
- inherit_child.copy({'inherit_id': website_specific_view.id, 'key': inherit_child.key})
+ child = inherit_child.copy({'inherit_id': website_specific_view.id, 'key': inherit_child.key})
+ inherit_child.inherit_children_ids.write({'inherit_id': child.id})
inherit_child.unlink()
else:
# Trigger COW on inheriting views
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index 0c63ee55f41..82e4f36107f 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -141,7 +141,7 @@ class Website(models.Model):
public_user_to_change_websites = self.env['website']
self._get_languages.clear_cache(self)
if 'company_id' in values and 'user_id' not in values:
- public_user_to_change_websites = self.filtered(lambda w: w.user_id.company_id.id != values['company_id'])
+ public_user_to_change_websites = self.filtered(lambda w: w.sudo().user_id.company_id.id != values['company_id'])
if public_user_to_change_websites:
company = self.env['res.company'].browse(values['company_id'])
super(Website, public_user_to_change_websites).write(dict(values, user_id=company._get_public_user().id))
diff --git a/addons/website/tests/test_views.py b/addons/website/tests/test_views.py
index bb847ba9f6a..0d24a2517ad 100644
--- a/addons/website/tests/test_views.py
+++ b/addons/website/tests/test_views.py
@@ -797,6 +797,54 @@ class TestCowViewSaving(common.TransactionCase):
all_title_updated = specific_view.website_meta_title == self.base_view.website_meta_title == "A bug got fixed by updating this field"
self.assertEqual(all_title_updated, True, "Update on top level generic views should also be applied on specific views")
+ def test_multiple_inherit_level(self):
+ """ Test multi-level inheritance:
+ Base
+ |
+ ---> Extension (Website-specific)
+ |
+ ---> Extension 2 (Website-specific)
+ """
+ View = self.env['ir.ui.view']
+
+ self.inherit_view.website_id = 1
+ inherit_view_2 = View.create({
+ 'name': 'Extension 2',
+ 'mode': 'extension',
+ 'inherit_id': self.inherit_view.id,
+ 'arch': '<div position="inside">, extended content 2</div>',
+ 'key': 'website.extension_view_2',
+ 'website_id': 1,
+ })
+
+ total_views = View.search_count([])
+
+ # id | name | content | website_id | inherit | key
+ # --------------------------------------------------------------------------------------------
+ # 1 | Base | base content | / | / | website.base_view
+ # 2 | Extension | , extended content | 1 | 1 | website.extension_view
+ # 3 | Extension 2 | , extended content 2 | 1 | 2 | website.extension_view_2
+
+ self.base_view.with_context(website_id=1).write({'arch': '<div>modified content</div>'})
+
+ # 2 views are created, one is deleted
+ self.assertEqual(View.search_count([]), total_views + 1)
+ self.assertFalse(self.inherit_view.exists())
+ self.assertTrue(inherit_view_2.exists())
+
+ # Verify the inheritance
+ base_specific = View.search([('key', '=', self.base_view.key), ('website_id', '=', 1)]).with_context(load_all_views=True)
+ extend_specific = View.search([('key', '=', 'website.extension_view'), ('website_id', '=', 1)])
+ self.assertEqual(extend_specific.inherit_id, base_specific)
+ self.assertEqual(inherit_view_2.inherit_id, extend_specific)
+
+ # id | name | content | website_id | inherit | key
+ # --------------------------------------------------------------------------------------------
+ # 1 | Base | base content | / | / | website.base_view
+ # 4 | Base | modified content | 1 | / | website.base_view
+ # 5 | Extension | , extended content | 1 | 4 | website.extension_view
+ # 3 | Extension 2 | , extended content 2 | 1 | 5 | website.extension_view_2
+
class Crawler(HttpCase):
def setUp(self):