From 0b9bf8e2bfb85736f2a0e2cf4e32ec01a5c13b22 Mon Sep 17 00:00:00 2001 From: Christophe Simonis Date: Fri, 7 Feb 2014 16:47:03 +0100 Subject: [PATCH] [FIX] ensure_db(): When user ask a specific database on a new session, the nodb router has been used to find the route. Depending on installed module in the database, the rendering of the page may depend on data injected by the database route dispatcher. Thus, we redirect the user to the same page but with the session cookie set. This will force using the database route dispatcher... bzr revid: chs@openerp.com-20140207154703-o0gl58i2b56eridx --- addons/web/controllers/main.py | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py index 3f3a2465cf8..94357c0131b 100644 --- a/addons/web/controllers/main.py +++ b/addons/web/controllers/main.py @@ -133,6 +133,20 @@ def ensure_db(redirect='/web/database/selector'): if db and db not in http.db_filter([db]): db = None + if db and not request.session.db: + # User asked a specific database on a new session. + # That mean the nodb router has been used to find the route + # Depending on installed module in the database, the rendering of the page + # may depend on data injected by the database route dispatcher. + # Thus, we redirect the user to the same page but with the session cookie set. + # This will force using the database route dispatcher... + r = request.httprequest + response = werkzeug.utils.redirect(r.url, 302) + request.session.db = db + response = r.app.get_response(r, response, explicit_session=False) + werkzeug.exceptions.abort(response) + return + # if db not provided, use the session one if not db: db = request.session.db