mail@237: local code = util.trim(param.get("code")) bsw@91: bsw@286: local member = Member:new_selector() bsw@286: :add_where{ "invite_code = ?", code } bsw@286: :add_where{ "activated ISNULL" } bsw@811: :add_where{ "NOT locked" } bsw@91: :optional_object_mode() bsw@91: :for_update() bsw@91: :exec() bsw@391: bsw@286: if not member then bsw@286: slot.put_into("error", _"The code you've entered is invalid") bsw/jbe@5: request.redirect{ bsw/jbe@5: mode = "forward", bsw/jbe@5: module = "index", bsw/jbe@5: view = "register" bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw/jbe@6: local notify_email = param.get("notify_email") bsw/jbe@5: bsw@286: if not config.locked_profile_fields.notify_email and notify_email then bsw@286: if #notify_email < 5 then bsw@286: slot.put_into("error", _"Email address too short!") bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw@286: module = "index", bsw@286: view = "register", bsw@286: params = { code = member.invite_code } bsw@286: } bsw@286: return false bsw@286: end bsw/jbe@6: end bsw/jbe@6: bsw@952: if member and not notify_email then bsw/jbe@5: request.redirect{ bsw/jbe@5: mode = "redirect", bsw/jbe@5: module = "index", bsw/jbe@5: view = "register", bsw@286: params = { code = member.invite_code, step = 1 } bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw@286: bsw@286: local name = util.trim(param.get("name")) bsw@286: bsw@286: if not config.locked_profile_fields.name and name then bsw/jbe@6: bsw@286: if #name < 3 then bsw@753: slot.put_into("error", _"This screen name is too short!") bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw@286: module = "index", bsw@286: view = "register", bsw@286: params = { bsw@286: code = member.invite_code, bsw@952: notify_email = notify_email, bsw@286: step = 1 bsw@286: } bsw/jbe@6: } bsw@286: return false bsw@286: end bsw@286: bsw@351: local check_member = Member:by_name(name) bsw@353: if check_member and check_member.id ~= member.id then bsw@286: slot.put_into("error", _"This name is already taken, please choose another one!") bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw@286: module = "index", bsw@286: view = "register", bsw@286: params = { bsw@286: code = member.invite_code, bsw@952: notify_email = notify_email, bsw@286: step = 1 bsw@286: } bsw@286: } bsw@286: return false bsw@286: end bsw@286: bsw@286: member.name = name bsw@286: bsw/jbe@6: end bsw/jbe@6: bsw@952: if notify_email and not member.name then bsw/jbe@6: request.redirect{ bsw/jbe@6: mode = "redirect", bsw/jbe@6: module = "index", bsw/jbe@6: view = "register", bsw/jbe@6: params = { bsw@286: code = member.invite_code, bsw@952: notify_email = notify_email, bsw@286: step = 1 bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw@286: bsw@286: local login = util.trim(param.get("login")) bsw@286: bsw@286: if not config.locked_profile_fields.login and login then bsw@286: if #login < 3 then bsw@286: slot.put_into("error", _"This login is too short!") bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw@286: module = "index", bsw@286: view = "register", bsw@286: params = { bsw@286: code = member.invite_code, bsw@952: notify_email = notify_email, bsw@286: name = member.name, bsw@286: step = 1 bsw@286: } bsw/jbe@5: } bsw@286: return false bsw@286: end bsw@286: bsw@354: local check_member = Member:by_login(login) bsw@354: if check_member and check_member.id ~= member.id then bsw@286: slot.put_into("error", _"This login is already taken, please choose another one!") bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw@286: module = "index", bsw@286: view = "register", bsw@286: params = { bsw@286: code = member.invite_code, bsw@952: notify_email = notify_email, bsw@286: name = member.name, bsw@286: step = 1 bsw@286: } bsw@286: } bsw@286: return false bsw@286: end bsw@286: member.login = login bsw/jbe@5: end bsw/jbe@5: bsw@286: if member.name and not member.login then bsw/jbe@5: request.redirect{ bsw/jbe@5: mode = "redirect", bsw/jbe@5: module = "index", bsw/jbe@5: view = "register", bsw/jbe@5: params = { bsw@286: code = member.invite_code, bsw@952: notify_email = notify_email, bsw@286: name = member.name, bsw@286: step = 1 bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw@286: local step = param.get("step", atom.integer) bsw@286: bsw@286: if step > 2 then bsw/jbe@5: bsw@286: for i, checkbox in ipairs(config.use_terms_checkboxes) do bsw@286: local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) bsw@286: if not accepted then bsw@286: slot.put_into("error", checkbox.not_accepted_error) bsw@286: return false bsw@286: end bsw@286: end bsw@286: bsw@286: local password1 = param.get("password1") bsw@286: local password2 = param.get("password2") bsw/jbe@6: bsw@286: if login and not password1 then bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw@286: module = "index", bsw@286: view = "register", bsw@286: params = { bsw@286: code = member.invite_code, bsw@952: notify_email = notify_email, bsw@286: name = member.name, bsw@286: login = member.login bsw@286: } bsw@286: } bsw@286: --]] bsw@286: return false bsw@286: end bsw/jbe@6: bsw@286: if password1 ~= password2 then bsw@286: slot.put_into("error", _"Passwords don't match!") bsw@286: return false bsw@286: end bsw@83: bsw@286: if #password1 < 8 then bsw@286: slot.put_into("error", _"Passwords must consist of at least 8 characters!") bsw@286: return false bsw@286: end bsw@286: bsw@941: if not config.locked_profile_fields.login then bsw@940: member.login = login bsw@940: end bsw@940: bsw@941: if not config.locked_profile_fields.name then bsw@940: member.name = name bsw@940: end bsw@286: bsw@952: if notify_email ~= member.notify_email then bsw@390: local success = member:set_notify_email(notify_email) bsw@390: if not success then bsw@390: slot.put_into("error", _"Can't send confirmation email") bsw@390: return bsw@390: end bsw@286: end bsw@390: bsw@286: member:set_password(password1) bsw@286: bsw@286: local now = db:query("SELECT now() AS now", "object").now bsw@79: bsw@286: for i, checkbox in ipairs(config.use_terms_checkboxes) do bsw@286: local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) bsw@286: member:set_setting("use_terms_checkbox_" .. checkbox.name, "accepted at " .. tostring(now)) bsw@286: end bsw/jbe@5: bsw@286: member.activated = 'now' bsw@286: member.active = true bsw@286: member.last_activity = 'now' bsw@286: member:save() bsw/jbe@5: bsw@286: slot.put_into("notice", _"You've successfully registered and you can login now with your login and password!") bsw@286: bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw@286: module = "index", bsw@286: view = "login", bsw@286: } bsw@286: end bsw@952: