diff --git a/addons/web/controllers/main.py b/addons/web/controllers/main.py
index 247d6f5dd00..7758510ecba 100644
--- a/addons/web/controllers/main.py
+++ b/addons/web/controllers/main.py
@@ -535,6 +535,9 @@ class Home(openerpweb.Controller):
@openerpweb.httprequest
def index(self, req, s_action=None, db=None, **kw):
+ if not db:
+ # TODO: maybe redirect to ?db=xxx instead of implicit db set ??
+ db = req.httprequest.cookies.get('last_db_login_success')
js = "\n ".join('' % i for i in manifest_list(req, 'js', db=db))
css = "\n ".join('' % i for i in manifest_list(req, 'css', db=db))
diff --git a/addons/web/static/src/js/chrome.js b/addons/web/static/src/js/chrome.js
index 6b16204932b..a207d37dd41 100644
--- a/addons/web/static/src/js/chrome.js
+++ b/addons/web/static/src/js/chrome.js
@@ -619,10 +619,19 @@ instance.web.Login = instance.web.Widget.extend({
self.$el.find('.oe_login_manage_db').click(function() {
self.do_action("database_manager");
});
+ self.on('change:database_selector', this, function() {
+ var params = $.deparam.querystring();
+ params.db = self.get('database_selector');
+ self.$('.oe_login_dbpane').empty().text(_t('Loading...'));
+ window.location = '/?' + $.param(params);
+ });
var d = $.when();
if ($.deparam.querystring().db) {
self.params.db = $.deparam.querystring().db;
}
+ if (self.params.db) {
+ self.selected_db = self.params.db;
+ }
if ($.param.fragment().token) {
self.params.token = $.param.fragment().token;
}
@@ -630,17 +639,22 @@ instance.web.Login = instance.web.Widget.extend({
if (self.params.db && self.params.login && self.params.password) {
d = self.do_login(self.params.db, self.params.login, self.params.password);
} else {
- if (self.params.db) {
- self.on_db_loaded([self.params.db])
- } else {
+ // TODO: removing following code breaks portal anonymous
+ //if (self.params.db) {
+ // self.on_db_loaded([self.params.db])
+ //} else {
d = self.rpc("/web/database/get_list", {}).done(self.on_db_loaded).fail(self.on_db_failed);
- }
+ //}
}
return d;
},
on_db_loaded: function (result) {
+ var self = this;
this.db_list = result;
this.$("[name=db]").replaceWith(QWeb.render('Login.dblist', { db_list: this.db_list, selected_db: this.selected_db}));
+ this.$('select[name=db]').on('change', function(ev) {
+ self.set('database_selector', $(this).val());
+ });
if(this.db_list.length === 0) {
this.do_action("database_manager");
} else if(this.db_list.length === 1) {
@@ -680,6 +694,15 @@ instance.web.Login = instance.web.Widget.extend({
self.hide_error();
self.$(".oe_login_pane").fadeOut("slow");
return this.session.session_authenticate(db, login, password).then(function() {
+ // This cookie will be used server side in order to avoid db reloading on next visit
+ var ttl = 24 * 60 * 60 * 365;
+ document.cookie = [
+ 'last_db_login_success=' + db,
+ 'path=/',
+ 'max-age=' + ttl,
+ 'expires=' + new Date(new Date().getTime() + ttl * 1000).toGMTString()
+ ].join(';');
+
if (self.has_local_storage) {
if(self.remember_credentials) {
localStorage.setItem('last_db_login_success', db);