bsw@91: local code = param.get("code") bsw@91: bsw@91: local invite_code = InviteCode:new_selector() bsw@91: :add_where{ "code = ?", code } bsw@91: :optional_object_mode() bsw@91: :for_update() bsw@91: :exec() bsw/jbe@5: bsw/jbe@5: if not invite_code or invite_code.used then mail@235: slot.put_into("error", _"The code you've entered is invalid" .. ": '" .. code .. "'") 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/jbe@6: if invite_code and not notify_email 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 = { code = invite_code.code } bsw/jbe@6: } bsw/jbe@6: return false bsw/jbe@6: end bsw/jbe@6: bsw/jbe@6: if #notify_email < 5 then bsw/jbe@6: slot.put_into("error", _"Email address too short!") bsw/jbe@5: request.redirect{ bsw/jbe@5: mode = "redirect", bsw/jbe@5: module = "index", bsw/jbe@5: view = "register", bsw/jbe@5: params = { code = invite_code.code } bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw/jbe@6: local name = param.get("name") bsw/jbe@6: bsw/jbe@6: if notify_email and not 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/jbe@6: code = invite_code.code, bsw/jbe@6: notify_email = notify_email bsw/jbe@6: } bsw/jbe@6: } bsw/jbe@6: return false bsw/jbe@6: end bsw/jbe@6: bsw/jbe@6: name = util.trim(name) bsw/jbe@6: bsw/jbe@6: if #name < 3 then bsw/jbe@6: slot.put_into("error", _"This username is too short!") 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/jbe@6: code = invite_code.code, bsw/jbe@6: notify_email = notify_email bsw/jbe@6: } bsw/jbe@6: } bsw/jbe@6: return false bsw/jbe@6: end bsw/jbe@6: bsw/jbe@5: if Member:by_name(name) then bsw/jbe@5: slot.put_into("error", _"This name is already taken, please choose another one!") bsw/jbe@5: request.redirect{ bsw/jbe@5: mode = "redirect", bsw/jbe@5: module = "index", bsw/jbe@5: view = "register", bsw/jbe@6: params = { bsw/jbe@6: code = invite_code.code, bsw/jbe@6: notify_email = notify_email bsw/jbe@6: } bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw/jbe@5: local login = param.get("login") bsw/jbe@5: bsw/jbe@5: if name and not 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/jbe@5: code = invite_code.code, bsw/jbe@6: notify_email = notify_email, bsw/jbe@6: name = name bsw/jbe@6: } bsw/jbe@6: } bsw/jbe@6: return false bsw/jbe@6: end bsw/jbe@6: bsw/jbe@6: login = util.trim(login) bsw/jbe@6: bsw/jbe@6: if #login < 3 then bsw/jbe@6: slot.put_into("error", _"This login is too short!") 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/jbe@6: code = invite_code.code, bsw/jbe@6: notify_email = notify_email, bsw/jbe@5: name = name bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw/jbe@5: if Member:by_login(login) then bsw/jbe@5: slot.put_into("error", _"This login is already taken, please choose another one!") 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/jbe@5: code = invite_code.code, bsw/jbe@6: notify_email = notify_email, bsw/jbe@5: name = name bsw/jbe@5: } bsw/jbe@5: } bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw@79: if login and param.get("step") ~= "5" 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/jbe@6: code = invite_code.code, bsw/jbe@6: notify_email = notify_email, bsw/jbe@6: name = name, bsw/jbe@6: login = login bsw/jbe@6: } bsw/jbe@6: } bsw/jbe@6: return false bsw/jbe@6: end bsw/jbe@6: bsw@79: for i, checkbox in ipairs(config.use_terms_checkboxes) do bsw@79: local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) bsw@79: if not accepted then bsw@79: slot.put_into("error", checkbox.not_accepted_error) bsw@79: return false bsw@79: end bsw@79: end bsw/jbe@6: bsw/jbe@5: local password1 = param.get("password1") bsw/jbe@5: local password2 = param.get("password2") bsw/jbe@5: bsw/jbe@5: if login and not password1 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/jbe@5: code = invite_code.code, bsw/jbe@6: notify_email = notify_email, bsw/jbe@5: name = name, bsw/jbe@5: login = login bsw/jbe@5: } bsw/jbe@5: } bsw@79: --]] bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw/jbe@5: if password1 ~= password2 then bsw/jbe@5: slot.put_into("error", _"Passwords don't match!") bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw/jbe@5: if #password1 < 8 then bsw/jbe@5: slot.put_into("error", _"Passwords must consist of at least 8 characters!") bsw/jbe@5: return false bsw/jbe@5: end bsw/jbe@5: bsw/jbe@5: local member = Member:new() bsw/jbe@5: bsw/jbe@5: member.login = login bsw/jbe@5: member.name = name bsw/jbe@6: bsw/jbe@6: local success = member:set_notify_email(notify_email) bsw/jbe@6: if not success then bsw/jbe@6: slot.put_into("error", _"Can't send confirmation email") bsw/jbe@6: return bsw/jbe@6: end bsw/jbe@6: bsw/jbe@5: member:set_password(password1) bsw/jbe@5: member:save() bsw/jbe@5: bsw@83: local now = db:query("SELECT now() AS now", "object").now bsw@83: bsw@79: for i, checkbox in ipairs(config.use_terms_checkboxes) do bsw@79: local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) bsw@83: member:set_setting("use_terms_checkbox_" .. checkbox.name, "accepted at " .. tostring(now)) bsw@79: end bsw@79: bsw/jbe@5: invite_code.member_id = member.id bsw/jbe@5: invite_code.used = "now" bsw/jbe@5: invite_code:save() bsw/jbe@5: bsw/jbe@5: slot.put_into("notice", _"You've successfully registered and you can login now with your login and password!") bsw/jbe@5: bsw/jbe@6: request.redirect{ bsw/jbe@6: mode = "redirect", bsw/jbe@6: module = "index", bsw/jbe@6: view = "login", bsw/jbe@6: }