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@1076: if not config.ldap.member or config.ldap.member.registration ~= "manual" then bsw/jbe@1309: return execute.view { module = "index", view = "403" } 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/jbe@1309: return execute.view { module = "index", view = "403" } 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/jbe@1309: 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@1309: view = "register", params = { bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") bsw/jbe@1309: } 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@1309: if not util.is_profile_field_locked(member, "notify_email") and not 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/jbe@1309: params = { bsw/jbe@1309: code = member.invite_code, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") bsw/jbe@1309: } bsw@286: } bsw@286: return false bsw@286: end bsw/jbe@6: end bsw/jbe@6: bsw/jbe@1309: if member and not util.is_profile_field_locked(member, "notify_email") and not 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/jbe@1309: params = { bsw/jbe@1309: code = member.invite_code, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: step = 1, bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") bsw/jbe@1309: } 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/jbe@1309: step = 1, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") 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/jbe@1309: step = 1, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") 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/jbe@1309: step = 1, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") 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/jbe@1309: step = 1, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") 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/jbe@1309: step = 1, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") 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/jbe@1309: step = 1, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") 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/jbe@1309: local member_useterms = MemberUseterms:new_selector() bsw/jbe@1309: :add_where{ "member_id = ?", member.id } bsw/jbe@1309: :add_where{ "contract_identifier = ?", checkbox.name } bsw/jbe@1309: :exec() bsw/jbe@1309: if #member_useterms == 0 then bsw/jbe@1309: local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) bsw/jbe@1309: if not accepted then bsw/jbe@1309: slot.put_into("error", checkbox.not_accepted_error) bsw/jbe@1309: return false bsw/jbe@1309: end bsw@286: end bsw@286: end bsw@286: bsw@1076: if 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/jbe@1309: login = member.login, bsw/jbe@1309: skip = param.get("skip"), bsw/jbe@1309: redirect_module = param.get("redirect_module"), bsw/jbe@1309: redirect_view = param.get("redirect_view"), bsw/jbe@1309: redirect_id = param.get("redirect_id"), bsw/jbe@1309: redirect_params = param.get("redirect_params") 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@1076: bsw@1076: member:set_password(password1) bsw@1076: 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/jbe@1309: if not 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: 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/jbe@1309: local member_useterms = MemberUseterms:new() bsw/jbe@1309: member_useterms.member_id = member.id bsw/jbe@1309: member_useterms.contract_identifier = checkbox.name bsw/jbe@1309: member_useterms:save() 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/jbe@1309: if not member.profile then bsw/jbe@1309: local profile = MemberProfile:new() bsw/jbe@1309: profile.member_id = member.id bsw/jbe@1309: profile.profile = json.object() bsw/jbe@1309: profile:save() bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: slot.put_into("notice", _"Registration succeeded") bsw/jbe@1309: bsw/jbe@1309: app.session.member_id = member.id bsw/jbe@1309: app.session:save() bsw@286: bsw@286: request.redirect{ bsw@286: mode = "redirect", bsw/jbe@1309: module = param.get("redirect_module") or "index", bsw/jbe@1309: view = param.get("redirect_view") or "index", bsw/jbe@1309: id = param.get("redirect_id"), bsw@1486: params = json.import(param.get("redirect_params") or "") bsw@286: } bsw@286: end bsw@952: