liquid_feedback_frontend
diff app/main/index/_action/register.lua @ 286:c587d8762e62
Registration process updated for Core 2.0, lockable member fields, notification settings
| author | bsw |
|---|---|
| date | Sat Feb 25 11:51:37 2012 +0100 (2012-02-25) |
| parents | 08705cd76b3a |
| children | 2a20b9b547ac |
line diff
1.1 --- a/app/main/index/_action/register.lua Fri Feb 17 15:16:02 2012 +0100 1.2 +++ b/app/main/index/_action/register.lua Sat Feb 25 11:51:37 2012 +0100 1.3 @@ -1,13 +1,14 @@ 1.4 local code = util.trim(param.get("code")) 1.5 1.6 -local invite_code = InviteCode:new_selector() 1.7 - :add_where{ "code = ?", code } 1.8 +local member = Member:new_selector() 1.9 + :add_where{ "invite_code = ?", code } 1.10 + :add_where{ "activated ISNULL" } 1.11 :optional_object_mode() 1.12 :for_update() 1.13 :exec() 1.14 1.15 -if not invite_code or invite_code.used then 1.16 - slot.put_into("error", _"The code you've entered is invalid" .. ": '" .. code .. "'") 1.17 +if not member then 1.18 + slot.put_into("error", _"The code you've entered is invalid") 1.19 request.redirect{ 1.20 mode = "forward", 1.21 module = "index", 1.22 @@ -18,201 +19,206 @@ 1.23 1.24 local notify_email = param.get("notify_email") 1.25 1.26 -if invite_code and not notify_email then 1.27 - request.redirect{ 1.28 - mode = "redirect", 1.29 - module = "index", 1.30 - view = "register", 1.31 - params = { code = invite_code.code } 1.32 - } 1.33 - return false 1.34 +if not config.locked_profile_fields.notify_email and notify_email then 1.35 + if #notify_email < 5 then 1.36 + slot.put_into("error", _"Email address too short!") 1.37 + request.redirect{ 1.38 + mode = "redirect", 1.39 + module = "index", 1.40 + view = "register", 1.41 + params = { code = member.invite_code } 1.42 + } 1.43 + return false 1.44 + end 1.45 + member.notify_email = notify_email 1.46 end 1.47 1.48 -if #notify_email < 5 then 1.49 - slot.put_into("error", _"Email address too short!") 1.50 +if member and not member.notify_email then 1.51 request.redirect{ 1.52 mode = "redirect", 1.53 module = "index", 1.54 view = "register", 1.55 - params = { code = invite_code.code } 1.56 + params = { code = member.invite_code, step = 1 } 1.57 } 1.58 return false 1.59 end 1.60 1.61 -local name = param.get("name") 1.62 + 1.63 +local name = util.trim(param.get("name")) 1.64 + 1.65 +if not config.locked_profile_fields.name and name then 1.66 1.67 -if notify_email and not name then 1.68 - request.redirect{ 1.69 - mode = "redirect", 1.70 - module = "index", 1.71 - view = "register", 1.72 - params = { 1.73 - code = invite_code.code, 1.74 - notify_email = notify_email 1.75 + if #name < 3 then 1.76 + slot.put_into("error", _"This username is too short!") 1.77 + request.redirect{ 1.78 + mode = "redirect", 1.79 + module = "index", 1.80 + view = "register", 1.81 + params = { 1.82 + code = member.invite_code, 1.83 + notify_email = member.notify_email, 1.84 + step = 1 1.85 + } 1.86 } 1.87 - } 1.88 - return false 1.89 + return false 1.90 + end 1.91 + 1.92 + if Member:by_name(name) then 1.93 + slot.put_into("error", _"This name is already taken, please choose another one!") 1.94 + request.redirect{ 1.95 + mode = "redirect", 1.96 + module = "index", 1.97 + view = "register", 1.98 + params = { 1.99 + code = member.invite_code, 1.100 + notify_email = member.notify_email, 1.101 + step = 1 1.102 + } 1.103 + } 1.104 + return false 1.105 + end 1.106 + 1.107 + member.name = name 1.108 + 1.109 end 1.110 1.111 -name = util.trim(name) 1.112 - 1.113 -if #name < 3 then 1.114 - slot.put_into("error", _"This username is too short!") 1.115 +if member.notify_email and not member.name then 1.116 request.redirect{ 1.117 mode = "redirect", 1.118 module = "index", 1.119 view = "register", 1.120 params = { 1.121 - code = invite_code.code, 1.122 - notify_email = notify_email 1.123 - } 1.124 - } 1.125 - return false 1.126 -end 1.127 - 1.128 -if Member:by_name(name) then 1.129 - slot.put_into("error", _"This name is already taken, please choose another one!") 1.130 - request.redirect{ 1.131 - mode = "redirect", 1.132 - module = "index", 1.133 - view = "register", 1.134 - params = { 1.135 - code = invite_code.code, 1.136 - notify_email = notify_email 1.137 - } 1.138 - } 1.139 - return false 1.140 -end 1.141 - 1.142 -local login = param.get("login") 1.143 - 1.144 -if name and not login then 1.145 - request.redirect{ 1.146 - mode = "redirect", 1.147 - module = "index", 1.148 - view = "register", 1.149 - params = { 1.150 - code = invite_code.code, 1.151 - notify_email = notify_email, 1.152 - name = name 1.153 - } 1.154 - } 1.155 - return false 1.156 -end 1.157 - 1.158 -login = util.trim(login) 1.159 - 1.160 -if #login < 3 then 1.161 - slot.put_into("error", _"This login is too short!") 1.162 - request.redirect{ 1.163 - mode = "redirect", 1.164 - module = "index", 1.165 - view = "register", 1.166 - params = { 1.167 - code = invite_code.code, 1.168 - notify_email = notify_email, 1.169 - name = name 1.170 + code = member.invite_code, 1.171 + notify_email = member.notify_email, 1.172 + step = 1 1.173 } 1.174 } 1.175 return false 1.176 end 1.177 1.178 -if Member:by_login(login) then 1.179 - slot.put_into("error", _"This login is already taken, please choose another one!") 1.180 - request.redirect{ 1.181 - mode = "redirect", 1.182 - module = "index", 1.183 - view = "register", 1.184 - params = { 1.185 - code = invite_code.code, 1.186 - notify_email = notify_email, 1.187 - name = name 1.188 + 1.189 +local login = util.trim(param.get("login")) 1.190 + 1.191 +if not config.locked_profile_fields.login and login then 1.192 + if #login < 3 then 1.193 + slot.put_into("error", _"This login is too short!") 1.194 + request.redirect{ 1.195 + mode = "redirect", 1.196 + module = "index", 1.197 + view = "register", 1.198 + params = { 1.199 + code = member.invite_code, 1.200 + notify_email = member.notify_email, 1.201 + name = member.name, 1.202 + step = 1 1.203 + } 1.204 } 1.205 - } 1.206 - return false 1.207 + return false 1.208 + end 1.209 + 1.210 + if Member:by_login(login) then 1.211 + slot.put_into("error", _"This login is already taken, please choose another one!") 1.212 + request.redirect{ 1.213 + mode = "redirect", 1.214 + module = "index", 1.215 + view = "register", 1.216 + params = { 1.217 + code = member.invite_code, 1.218 + notify_email = member.notify_email, 1.219 + name = member.name, 1.220 + step = 1 1.221 + } 1.222 + } 1.223 + return false 1.224 + end 1.225 + member.login = login 1.226 end 1.227 1.228 -if login and param.get("step") ~= "5" then 1.229 - request.redirect{ 1.230 - mode = "redirect", 1.231 - module = "index", 1.232 - view = "register", 1.233 - params = { 1.234 - code = invite_code.code, 1.235 - notify_email = notify_email, 1.236 - name = name, 1.237 - login = login 1.238 - } 1.239 - } 1.240 - return false 1.241 -end 1.242 - 1.243 -for i, checkbox in ipairs(config.use_terms_checkboxes) do 1.244 - local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) 1.245 - if not accepted then 1.246 - slot.put_into("error", checkbox.not_accepted_error) 1.247 - return false 1.248 - end 1.249 -end 1.250 - 1.251 -local password1 = param.get("password1") 1.252 -local password2 = param.get("password2") 1.253 - 1.254 -if login and not password1 then 1.255 +if member.name and not member.login then 1.256 request.redirect{ 1.257 mode = "redirect", 1.258 module = "index", 1.259 view = "register", 1.260 params = { 1.261 - code = invite_code.code, 1.262 - notify_email = notify_email, 1.263 - name = name, 1.264 - login = login 1.265 + code = member.invite_code, 1.266 + notify_email = member.notify_email, 1.267 + name = member.name, 1.268 + step = 1 1.269 } 1.270 } 1.271 ---]] 1.272 - return false 1.273 -end 1.274 - 1.275 -if password1 ~= password2 then 1.276 - slot.put_into("error", _"Passwords don't match!") 1.277 - return false 1.278 -end 1.279 - 1.280 -if #password1 < 8 then 1.281 - slot.put_into("error", _"Passwords must consist of at least 8 characters!") 1.282 return false 1.283 end 1.284 1.285 -local member = Member:new() 1.286 +local step = param.get("step", atom.integer) 1.287 + 1.288 +if step > 2 then 1.289 1.290 -member.login = login 1.291 -member.name = name 1.292 + for i, checkbox in ipairs(config.use_terms_checkboxes) do 1.293 + local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) 1.294 + if not accepted then 1.295 + slot.put_into("error", checkbox.not_accepted_error) 1.296 + return false 1.297 + end 1.298 + end 1.299 + 1.300 + local password1 = param.get("password1") 1.301 + local password2 = param.get("password2") 1.302 1.303 -local success = member:set_notify_email(notify_email) 1.304 -if not success then 1.305 - slot.put_into("error", _"Can't send confirmation email") 1.306 - return 1.307 -end 1.308 + if login and not password1 then 1.309 + request.redirect{ 1.310 + mode = "redirect", 1.311 + module = "index", 1.312 + view = "register", 1.313 + params = { 1.314 + code = member.invite_code, 1.315 + notify_email = member.notify_email, 1.316 + name = member.name, 1.317 + login = member.login 1.318 + } 1.319 + } 1.320 + --]] 1.321 + return false 1.322 + end 1.323 1.324 -member:set_password(password1) 1.325 -member:save() 1.326 - 1.327 -local now = db:query("SELECT now() AS now", "object").now 1.328 + if password1 ~= password2 then 1.329 + slot.put_into("error", _"Passwords don't match!") 1.330 + return false 1.331 + end 1.332 1.333 -for i, checkbox in ipairs(config.use_terms_checkboxes) do 1.334 - local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) 1.335 - member:set_setting("use_terms_checkbox_" .. checkbox.name, "accepted at " .. tostring(now)) 1.336 -end 1.337 + if #password1 < 8 then 1.338 + slot.put_into("error", _"Passwords must consist of at least 8 characters!") 1.339 + return false 1.340 + end 1.341 + 1.342 + member.login = login 1.343 + member.name = name 1.344 + 1.345 + local success = member:set_notify_email(notify_email) 1.346 + if not success then 1.347 + slot.put_into("error", _"Can't send confirmation email") 1.348 + return 1.349 + end 1.350 + 1.351 + member:set_password(password1) 1.352 + 1.353 + local now = db:query("SELECT now() AS now", "object").now 1.354 1.355 -invite_code.member_id = member.id 1.356 -invite_code.used = "now" 1.357 -invite_code:save() 1.358 + for i, checkbox in ipairs(config.use_terms_checkboxes) do 1.359 + local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) 1.360 + member:set_setting("use_terms_checkbox_" .. checkbox.name, "accepted at " .. tostring(now)) 1.361 + end 1.362 1.363 -slot.put_into("notice", _"You've successfully registered and you can login now with your login and password!") 1.364 + member.activated = 'now' 1.365 + member.active = true 1.366 + member.last_activity = 'now' 1.367 + member:save() 1.368 1.369 -request.redirect{ 1.370 - mode = "redirect", 1.371 - module = "index", 1.372 - view = "login", 1.373 -} 1.374 + slot.put_into("notice", _"You've successfully registered and you can login now with your login and password!") 1.375 + 1.376 + request.redirect{ 1.377 + mode = "redirect", 1.378 + module = "index", 1.379 + view = "login", 1.380 + } 1.381 +end 1.382 + 1.383 \ No newline at end of file