liquid_feedback_frontend

view app/main/index/_action/register.lua @ 1071:58f48a8a202a

Imported and merged LDAP patch
author bsw
date Fri Jul 18 21:42:59 2014 +0200 (2014-07-18)
parents ba824959fc1f
children aefef1556d55
line source
1 local code = util.trim(param.get("code"))
3 local member
5 if app.session.authority == "ldap" then
6 if not config.ldap.member or not config.ldap.member.registration == "manual" then
7 error("access denied")
8 end
9 member = ldap.create_member(app.session.authority_data_uid, true)
11 else
12 if config.registration_disabled then
13 error("registration disabled")
14 end
15 member = Member:new_selector()
16 :add_where{ "invite_code = ?", code }
17 :add_where{ "activated ISNULL" }
18 :add_where{ "NOT locked" }
19 :optional_object_mode()
20 :for_update()
21 :exec()
22 end
25 if not member then
26 slot.put_into("error", _"The code you've entered is invalid")
27 request.redirect{
28 mode = "forward",
29 module = "index",
30 view = "register"
31 }
32 return false
33 end
35 local notify_email = param.get("notify_email")
37 if not util.is_profile_field_locked(member, "notify_email") and notify_email then
38 if #notify_email < 5 then
39 slot.put_into("error", _"Email address too short!")
40 request.redirect{
41 mode = "redirect",
42 module = "index",
43 view = "register",
44 params = { code = member.invite_code }
45 }
46 return false
47 end
48 end
50 if member and not util.is_profile_field_locked(member, "notify_email") and not notify_email then
51 request.redirect{
52 mode = "redirect",
53 module = "index",
54 view = "register",
55 params = { code = member.invite_code, step = 1 }
56 }
57 return false
58 end
61 local name = util.trim(param.get("name"))
63 if not util.is_profile_field_locked(member, "name") and name then
65 if #name < 3 then
66 slot.put_into("error", _"This screen name is too short!")
67 request.redirect{
68 mode = "redirect",
69 module = "index",
70 view = "register",
71 params = {
72 code = member.invite_code,
73 notify_email = notify_email,
74 step = 1
75 }
76 }
77 return false
78 end
80 local check_member = Member:by_name(name)
81 if check_member and check_member.id ~= member.id then
82 slot.put_into("error", _"This name is already taken, please choose another one!")
83 request.redirect{
84 mode = "redirect",
85 module = "index",
86 view = "register",
87 params = {
88 code = member.invite_code,
89 notify_email = notify_email,
90 step = 1
91 }
92 }
93 return false
94 end
96 member.name = name
98 end
100 if notify_email and not util.is_profile_field_locked(member, "name") and not member.name then
101 request.redirect{
102 mode = "redirect",
103 module = "index",
104 view = "register",
105 params = {
106 code = member.invite_code,
107 notify_email = notify_email,
108 step = 1
109 }
110 }
111 return false
112 end
114 local login = util.trim(param.get("login"))
116 if not util.is_profile_field_locked(member, "login") and login then
117 if #login < 3 then
118 slot.put_into("error", _"This login is too short!")
119 request.redirect{
120 mode = "redirect",
121 module = "index",
122 view = "register",
123 params = {
124 code = member.invite_code,
125 notify_email = notify_email,
126 name = member.name,
127 step = 1
128 }
129 }
130 return false
131 end
133 local check_member = Member:by_login(login)
134 if check_member and check_member.id ~= member.id then
135 slot.put_into("error", _"This login is already taken, please choose another one!")
136 request.redirect{
137 mode = "redirect",
138 module = "index",
139 view = "register",
140 params = {
141 code = member.invite_code,
142 notify_email = notify_email,
143 name = member.name,
144 step = 1
145 }
146 }
147 return false
148 end
149 member.login = login
150 end
152 if member.name and not util.is_profile_field_locked(member, "login") and not member.login then
153 request.redirect{
154 mode = "redirect",
155 module = "index",
156 view = "register",
157 params = {
158 code = member.invite_code,
159 notify_email = notify_email,
160 name = member.name,
161 step = 1
162 }
163 }
164 return false
165 end
167 local step = param.get("step", atom.integer)
169 if step > 2 then
171 for i, checkbox in ipairs(config.use_terms_checkboxes) do
172 local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean)
173 if not accepted then
174 slot.put_into("error", checkbox.not_accepted_error)
175 return false
176 end
177 end
179 if not member.authority == "ldap" then
181 local password1 = param.get("password1")
182 local password2 = param.get("password2")
184 if login and not password1 then
185 request.redirect{
186 mode = "redirect",
187 module = "index",
188 view = "register",
189 params = {
190 code = member.invite_code,
191 notify_email = notify_email,
192 name = member.name,
193 login = member.login
194 }
195 }
196 --]]
197 return false
198 end
200 if password1 ~= password2 then
201 slot.put_into("error", _"Passwords don't match!")
202 return false
203 end
205 if #password1 < 8 then
206 slot.put_into("error", _"Passwords must consist of at least 8 characters!")
207 return false
208 end
209 end
211 if not util.is_profile_field_locked(member, "login") then
212 member.login = login
213 end
215 if not util.is_profile_field_locked(member, "name") then
216 member.name = name
217 end
219 if notify_email ~= member.notify_email then
220 local success = member:set_notify_email(notify_email)
221 if not success then
222 slot.put_into("error", _"Can't send confirmation email")
223 return
224 end
225 end
227 if not member.authority == "ldap" then
228 member:set_password(password1)
229 end
231 local now = db:query("SELECT now() AS now", "object").now
233 for i, checkbox in ipairs(config.use_terms_checkboxes) do
234 local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean)
235 member:set_setting("use_terms_checkbox_" .. checkbox.name, "accepted at " .. tostring(now))
236 end
238 member.activated = 'now'
239 member.active = true
240 member.last_activity = 'now'
241 member:save()
243 slot.put_into("notice", _"You've successfully registered and you can login now with your login and password!")
245 request.redirect{
246 mode = "redirect",
247 module = "index",
248 view = "login",
249 }
250 end

Impressum / About Us