From 092870270eb059bc848f82684a4d1d4b84758e30 Mon Sep 17 00:00:00 2001
From: Jeremy Kersten <jke@odoo.com>
Date: Tue, 18 Sep 2018 16:11:45 +0200
Subject: [PATCH] [FIX] website: allow to get current website without fallback

Before this commit, when we ask for get_current_website, we always
get one website. If we don't know which, we took the first one.

Now we can ask, if we are into a website context or not with a new argument fallback.

Previous code like:
   website = get_current_website()
   if website:
       ...
Have now a sense ;)
---
 addons/website/models/ir_attachment.py | 2 +-
 addons/website/models/ir_ui_view.py    | 7 +++++++
 addons/website/models/website.py       | 8 +++++---
 3 files changed, 13 insertions(+), 4 deletions(-)

diff --git a/addons/website/models/ir_attachment.py b/addons/website/models/ir_attachment.py
index 15fe50f54717..02a678ad9ec7 100644
--- a/addons/website/models/ir_attachment.py
+++ b/addons/website/models/ir_attachment.py
@@ -17,7 +17,7 @@ class Attachment(models.Model):
 
     @api.model
     def create(self, vals):
-        website = self.env['website'].get_current_website()
+        website = self.env['website'].get_current_website(fallback=False)
         if website and 'website_id' not in vals and 'not_force_website_id' not in self.env.context:
             vals['website_id'] = website.id
         return super(Attachment, self).create(vals)
diff --git a/addons/website/models/ir_ui_view.py b/addons/website/models/ir_ui_view.py
index 6a8856f269a6..d822f3e0e10c 100644
--- a/addons/website/models/ir_ui_view.py
+++ b/addons/website/models/ir_ui_view.py
@@ -30,6 +30,13 @@ class View(models.Model):
         for view in self:
             view.first_page_id = self.env['website.page'].search([('view_id', '=', view.id)], limit=1)
 
+    @api.model
+    def create(self, vals):
+        website = self.env['website'].get_current_website(fallback=False)
+        if website and 'website_id' not in vals and 'not_force_website_id' not in self.env.context:
+            vals['website_id'] = website.id
+        return super(View, self).create(vals)
+
     @api.multi
     def write(self, vals):
         '''COW for ir.ui.view. This way editing websites does not impact other
diff --git a/addons/website/models/website.py b/addons/website/models/website.py
index fc6ff771e1c7..06756a444cbd 100644
--- a/addons/website/models/website.py
+++ b/addons/website/models/website.py
@@ -435,7 +435,7 @@ class Website(models.Model):
     # ----------------------------------------------------------
 
     @api.model
-    def get_current_website(self):
+    def get_current_website(self, fallback=True):
         if request and request.session.get('force_website_id'):
             return self.browse(request.session['force_website_id'])
 
@@ -446,15 +446,17 @@ class Website(models.Model):
         if country:
             country_id = request.env['res.country'].search([('code', '=', country)], limit=1).id
 
-        website_id = self._get_current_website_id(domain_name, country_id)
+        website_id = self._get_current_website_id(domain_name, country_id, fallback=fallback)
         return self.browse(website_id)
 
     @tools.cache('domain_name', 'country_id')
-    def _get_current_website_id(self, domain_name, country_id):
+    def _get_current_website_id(self, domain_name, country_id, fallback=True):
         # sort on country_group_ids so that we fall back on a generic website (empty country_group_ids)
         websites = self.search([('domain', '=', domain_name)]).sorted('country_group_ids')
 
         if not websites:
+            if not fallback:
+                return False
             return self.search([], limit=1).id
         elif len(websites) == 1:
             return websites.id
-- 
GitLab