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

Impressum / About Us