mail@237: local code = util.trim(param.get("code")) bsw@91: bsw@1071: local member bsw@1071: bsw@1071: if app.session.authority == "ldap" then bsw@1071: if not config.ldap.member or not config.ldap.member.registration == "manual" then bsw@1071: error("access denied") bsw@1071: end bsw@1074: member = ldap.create_member(app.session.authority_uid, true) bsw@1071: bsw@1071: else bsw@1071: if config.registration_disabled then bsw@1071: error("registration disabled") bsw@1071: end bsw@1071: member = Member:new_selector() bsw@1071: :add_where{ "invite_code = ?", code } bsw@1071: :add_where{ "activated ISNULL" } bsw@1071: :add_where{ "NOT locked" } bsw@1071: :optional_object_mode() bsw@1071: :for_update() bsw@1071: :exec() bsw@1071: end bsw@1071: 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@1071: if not util.is_profile_field_locked(member, "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@1071: if member and not util.is_profile_field_locked(member, "notify_email") 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@1071: if not util.is_profile_field_locked(member, "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@1071: if notify_email and not util.is_profile_field_locked(member, "name") 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: local login = util.trim(param.get("login")) bsw@286: bsw@1071: if not util.is_profile_field_locked(member, "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@1071: if member.name and not util.is_profile_field_locked(member, "login") 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@1071: if not member.authority == "ldap" then bsw@1071: bsw@1071: local password1 = param.get("password1") bsw@1071: local password2 = param.get("password2") bsw/jbe@6: bsw@1071: if login and not password1 then bsw@1071: request.redirect{ bsw@1071: mode = "redirect", bsw@1071: module = "index", bsw@1071: view = "register", bsw@1071: params = { bsw@1071: code = member.invite_code, bsw@1071: notify_email = notify_email, bsw@1071: name = member.name, bsw@1071: login = member.login bsw@1071: } bsw@286: } bsw@1071: --]] bsw@1071: return false bsw@1071: end bsw@1071: bsw@1071: if password1 ~= password2 then bsw@1071: slot.put_into("error", _"Passwords don't match!") bsw@1071: return false bsw@1071: end bsw@1071: bsw@1071: if #password1 < 8 then bsw@1071: slot.put_into("error", _"Passwords must consist of at least 8 characters!") bsw@1071: return false bsw@1071: end bsw@286: end bsw/jbe@6: bsw@1071: if not util.is_profile_field_locked(member, "login") then bsw@940: member.login = login bsw@940: end bsw@940: bsw@1071: if not util.is_profile_field_locked(member, "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@1071: if not member.authority == "ldap" then bsw@1071: member:set_password(password1) bsw@1071: end 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@1071: 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: