diff --git a/addons/auth_signup/controllers/main.py b/addons/auth_signup/controllers/main.py index baf1a8f0b28..73e2f0e3fa0 100644 --- a/addons/auth_signup/controllers/main.py +++ b/addons/auth_signup/controllers/main.py @@ -19,9 +19,6 @@ # ############################################################################## import logging -import urllib - -import werkzeug import openerp from openerp.modules.registry import RegistryManager @@ -69,7 +66,7 @@ class Controller(openerp.addons.web.http.Controller): res_users = registry.get('res.users') res_users.signup(cr, openerp.SUPERUSER_ID, values, token) - @openerp.addons.web.http.httprequest + @openerp.addons.web.http.jsonrequest def reset_password(self, req, dbname, login): """ retrieve user, and perform reset password """ registry = RegistryManager.get(dbname) @@ -78,12 +75,10 @@ class Controller(openerp.addons.web.http.Controller): res_users = registry.get('res.users') res_users.reset_password(cr, openerp.SUPERUSER_ID, login) cr.commit() - message = 'An email has been sent with credentials to reset your password' except Exception as e: # signup error _logger.exception('error when resetting password') - message = e.message - params = [('action', 'login'), ('error_message', message)] - return werkzeug.utils.redirect("/#" + urllib.urlencode(params)) + raise(e) + return True # vim:expandtab:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/auth_signup/static/src/js/auth_signup.js b/addons/auth_signup/static/src/js/auth_signup.js index 6757b9cb69d..69a4cc35b52 100644 --- a/addons/auth_signup/static/src/js/auth_signup.js +++ b/addons/auth_signup/static/src/js/auth_signup.js @@ -5,26 +5,28 @@ openerp.auth_signup = function(instance) { instance.web.Login.include({ start: function() { var self = this; - var d = this._super(); - d.done(function() { - self.$(".oe_signup_show").hide(); + this.signup_enabled = false; + this.reset_password_enabled = false; + return this._super().then(function() { + + // Switches the login box to the select mode whith mode == [default|signup|reset] + self.on('change:login_mode', self, function() { + var mode = self.get('login_mode') || 'default'; + self.$('*[data-modes]').each(function() { + var modes = $(this).data('modes').split(/\s+/); + $(this).toggle(modes.indexOf(mode) > -1); + }); + self.$('a.oe_signup_signup:visible').toggle(self.signup_enabled); + self.$('a.oe_signup_reset_password:visible').toggle(self.reset_password_enabled); + }); + // to switch between the signup and regular login form self.$('a.oe_signup_signup').click(function(ev) { - if (ev) { - ev.preventDefault(); - } - self.$el.addClass("oe_login_signup"); - self.$(".oe_signup_show").show(); - self.$(".oe_signup_hide").hide(); + self.set('login_mode', 'signup'); return false; }); self.$('a.oe_signup_back').click(function(ev) { - if (ev) { - ev.preventDefault(); - } - self.$el.removeClass("oe_login_signup"); - self.$(".oe_signup_show").hide(); - self.$(".oe_signup_hide").show(); + self.set('login_mode', 'default'); delete self.params.token; return false; }); @@ -42,7 +44,7 @@ openerp.auth_signup = function(instance) { if (dbname && self.params.token) { self.rpc("/auth_signup/retrieve", {dbname: dbname, token: self.params.token}) .done(self.on_token_loaded) - .fail(self.on_token_failed) + .fail(self.on_token_failed); } if (dbname && self.params.login) { self.$("form input[name=login]").val(self.params.login); @@ -51,23 +53,17 @@ openerp.auth_signup = function(instance) { // bind reset password link self.$('a.oe_signup_reset_password').click(self.do_reset_password); - // make signup link and reset password link visible only when enabled - self.$('a.oe_signup_signup').hide(); - self.$('a.oe_signup_reset_password').hide(); if (dbname) { - self.rpc("/auth_signup/get_config", {dbname: dbname}) - .done(function(result) { - if (result.signup) { - self.$('a.oe_signup_signup').show(); - } - if (result.reset_password) { - self.$('a.oe_signup_reset_password').show(); - } - }); + self.rpc("/auth_signup/get_config", {dbname: dbname}).done(function(result) { + self.signup_enabled = result.signup; + self.reset_password_enabled = result.reset_password; + self.set('login_mode', 'default'); + }); + } else { + // TODO: support multiple database mode + self.set('login_mode', 'default'); } }); - - return d; }, on_token_loaded: function(result) { @@ -76,9 +72,7 @@ openerp.auth_signup = function(instance) { this.on_db_loaded([result.db]); if (result.token) { // switch to signup mode, set user name and login - this.$el.addClass("oe_login_signup"); - self.$(".oe_signup_show").show(); - self.$(".oe_signup_hide").hide(); + this.set('login_mode', (this.params.type === 'reset' ? 'reset' : 'signup')); this.$("form input[name=name]").val(result.name).attr("readonly", "readonly"); if (result.login) { this.$("form input[name=login]").val(result.login).attr("readonly", "readonly"); @@ -88,6 +82,7 @@ openerp.auth_signup = function(instance) { } else { // remain in login mode, set login if present delete this.params.token; + this.set('login_mode', 'default'); this.$("form input[name=login]").val(result.login || ""); } }, @@ -99,13 +94,15 @@ openerp.auth_signup = function(instance) { this.show_error(_t("Invalid signup token")); delete this.params.db; delete this.params.token; + this.set('login_mode', 'default'); }, on_submit: function(ev) { if (ev) { ev.preventDefault(); } - if (this.$el.hasClass("oe_login_signup")) { + var login_mode = this.get('login_mode'); + if (login_mode === 'signup' || login_mode === 'reset') { // signup user (or reset password) var db = this.$("form [name=db]").val(); var name = this.$("form input[name=name]").val(); @@ -156,21 +153,23 @@ openerp.auth_signup = function(instance) { if (ev) { ev.preventDefault(); } + var self = this; var db = this.$("form [name=db]").val(); var login = this.$("form input[name=login]").val(); if (!db) { this.do_warn(_t("Login"), _t("No database selected !")); - return false; + return $.Deferred().reject(); } else if (!login) { - this.do_warn(_t("Login"), _t("Please enter a username or email address.")) - return false; + this.do_warn(_t("Login"), _t("Please enter a username or email address.")); + return $.Deferred().reject(); } - var params = { - dbname : db, - login: login, - }; - var url = "/auth_signup/reset_password?" + $.param(params); - window.location = url; + return self.rpc("/auth_signup/reset_password", { dbname: db, login: login }).done(function(result) { + self.show_error(_t("An email has been sent with credentials to reset your password")); + self.set('login_mode', 'default'); + }).fail(function(result, ev) { + ev.preventDefault(); + self.show_error(result.message); + }); }, }); }; diff --git a/addons/auth_signup/static/src/xml/auth_signup.xml b/addons/auth_signup/static/src/xml/auth_signup.xml index d1c04cb6807..9ef4f394e27 100644 --- a/addons/auth_signup/static/src/xml/auth_signup.xml +++ b/addons/auth_signup/static/src/xml/auth_signup.xml @@ -5,26 +5,32 @@ - - +
  • Name
  • +
  • - - +
  • Username
  • +
  • Username (Email)
  • - - +
  • Confirm Password
  • +
  • - - - - - + + + +
  • + + this.attr('data-modes', 'default'); +