rev |
line source |
mail@237
|
1 local code = util.trim(param.get("code"))
|
bsw@91
|
2
|
bsw@1071
|
3 local member
|
bsw@1071
|
4
|
bsw@1071
|
5 if app.session.authority == "ldap" then
|
bsw@1076
|
6 if not config.ldap.member or config.ldap.member.registration ~= "manual" then
|
bsw/jbe@1309
|
7 return execute.view { module = "index", view = "403" }
|
bsw@1071
|
8 end
|
bsw@1074
|
9 member = ldap.create_member(app.session.authority_uid, true)
|
bsw@1071
|
10
|
bsw@1071
|
11 else
|
bsw@1071
|
12 if config.registration_disabled then
|
bsw/jbe@1309
|
13 return execute.view { module = "index", view = "403" }
|
bsw@1071
|
14 end
|
bsw@1071
|
15 member = Member:new_selector()
|
bsw@1071
|
16 :add_where{ "invite_code = ?", code }
|
bsw@1071
|
17 :add_where{ "activated ISNULL" }
|
bsw@1071
|
18 :add_where{ "NOT locked" }
|
bsw@1071
|
19 :optional_object_mode()
|
bsw@1071
|
20 :for_update()
|
bsw@1071
|
21 :exec()
|
bsw@1071
|
22 end
|
bsw@1071
|
23
|
bsw/jbe@1309
|
24
|
bsw@286
|
25 if not member then
|
bsw@286
|
26 slot.put_into("error", _"The code you've entered is invalid")
|
bsw/jbe@5
|
27 request.redirect{
|
bsw/jbe@5
|
28 mode = "forward",
|
bsw/jbe@5
|
29 module = "index",
|
bsw/jbe@1309
|
30 view = "register", params = {
|
bsw/jbe@1309
|
31 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
32 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
33 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
34 redirect_params = param.get("redirect_params")
|
bsw/jbe@1309
|
35 }
|
bsw/jbe@5
|
36 }
|
bsw/jbe@5
|
37 return false
|
bsw/jbe@5
|
38 end
|
bsw/jbe@5
|
39
|
bsw/jbe@6
|
40 local notify_email = param.get("notify_email")
|
bsw/jbe@5
|
41
|
bsw/jbe@1309
|
42 if not util.is_profile_field_locked(member, "notify_email") and not member.notify_email and notify_email then
|
bsw@286
|
43 if #notify_email < 5 then
|
bsw@286
|
44 slot.put_into("error", _"Email address too short!")
|
bsw@286
|
45 request.redirect{
|
bsw@286
|
46 mode = "redirect",
|
bsw@286
|
47 module = "index",
|
bsw@286
|
48 view = "register",
|
bsw/jbe@1309
|
49 params = {
|
bsw/jbe@1309
|
50 code = member.invite_code,
|
bsw/jbe@1309
|
51 skip = param.get("skip"),
|
bsw/jbe@1309
|
52 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
53 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
54 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
55 redirect_params = param.get("redirect_params")
|
bsw/jbe@1309
|
56 }
|
bsw@286
|
57 }
|
bsw@286
|
58 return false
|
bsw@286
|
59 end
|
bsw/jbe@6
|
60 end
|
bsw/jbe@6
|
61
|
bsw/jbe@1309
|
62 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
|
63 request.redirect{
|
bsw/jbe@5
|
64 mode = "redirect",
|
bsw/jbe@5
|
65 module = "index",
|
bsw/jbe@5
|
66 view = "register",
|
bsw/jbe@1309
|
67 params = {
|
bsw/jbe@1309
|
68 code = member.invite_code,
|
bsw/jbe@1309
|
69 skip = param.get("skip"),
|
bsw/jbe@1309
|
70 step = 1,
|
bsw/jbe@1309
|
71 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
72 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
73 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
74 redirect_params = param.get("redirect_params")
|
bsw/jbe@1309
|
75 }
|
bsw/jbe@5
|
76 }
|
bsw/jbe@5
|
77 return false
|
bsw/jbe@5
|
78 end
|
bsw/jbe@5
|
79
|
bsw@286
|
80
|
bsw@286
|
81 local name = util.trim(param.get("name"))
|
bsw@286
|
82
|
bsw@1071
|
83 if not util.is_profile_field_locked(member, "name") and name then
|
bsw/jbe@6
|
84
|
bsw@286
|
85 if #name < 3 then
|
bsw@753
|
86 slot.put_into("error", _"This screen name is too short!")
|
bsw@286
|
87 request.redirect{
|
bsw@286
|
88 mode = "redirect",
|
bsw@286
|
89 module = "index",
|
bsw@286
|
90 view = "register",
|
bsw@286
|
91 params = {
|
bsw@286
|
92 code = member.invite_code,
|
bsw@952
|
93 notify_email = notify_email,
|
bsw/jbe@1309
|
94 step = 1,
|
bsw/jbe@1309
|
95 skip = param.get("skip"),
|
bsw/jbe@1309
|
96 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
97 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
98 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
99 redirect_params = param.get("redirect_params")
|
bsw@286
|
100 }
|
bsw/jbe@6
|
101 }
|
bsw@286
|
102 return false
|
bsw@286
|
103 end
|
bsw@286
|
104
|
bsw@351
|
105 local check_member = Member:by_name(name)
|
bsw@353
|
106 if check_member and check_member.id ~= member.id then
|
bsw@286
|
107 slot.put_into("error", _"This name is already taken, please choose another one!")
|
bsw@286
|
108 request.redirect{
|
bsw@286
|
109 mode = "redirect",
|
bsw@286
|
110 module = "index",
|
bsw@286
|
111 view = "register",
|
bsw@286
|
112 params = {
|
bsw@286
|
113 code = member.invite_code,
|
bsw@952
|
114 notify_email = notify_email,
|
bsw/jbe@1309
|
115 step = 1,
|
bsw/jbe@1309
|
116 skip = param.get("skip"),
|
bsw/jbe@1309
|
117 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
118 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
119 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
120 redirect_params = param.get("redirect_params")
|
bsw@286
|
121 }
|
bsw@286
|
122 }
|
bsw@286
|
123 return false
|
bsw@286
|
124 end
|
bsw@286
|
125
|
bsw@286
|
126 member.name = name
|
bsw@286
|
127
|
bsw/jbe@6
|
128 end
|
bsw/jbe@6
|
129
|
bsw@1071
|
130 if notify_email and not util.is_profile_field_locked(member, "name") and not member.name then
|
bsw/jbe@6
|
131 request.redirect{
|
bsw/jbe@6
|
132 mode = "redirect",
|
bsw/jbe@6
|
133 module = "index",
|
bsw/jbe@6
|
134 view = "register",
|
bsw/jbe@6
|
135 params = {
|
bsw@286
|
136 code = member.invite_code,
|
bsw@952
|
137 notify_email = notify_email,
|
bsw/jbe@1309
|
138 step = 1,
|
bsw/jbe@1309
|
139 skip = param.get("skip"),
|
bsw/jbe@1309
|
140 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
141 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
142 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
143 redirect_params = param.get("redirect_params")
|
bsw/jbe@5
|
144 }
|
bsw/jbe@5
|
145 }
|
bsw/jbe@5
|
146 return false
|
bsw/jbe@5
|
147 end
|
bsw/jbe@5
|
148
|
bsw@286
|
149 local login = util.trim(param.get("login"))
|
bsw@286
|
150
|
bsw@1071
|
151 if not util.is_profile_field_locked(member, "login") and login then
|
bsw@286
|
152 if #login < 3 then
|
bsw@286
|
153 slot.put_into("error", _"This login is too short!")
|
bsw@286
|
154 request.redirect{
|
bsw@286
|
155 mode = "redirect",
|
bsw@286
|
156 module = "index",
|
bsw@286
|
157 view = "register",
|
bsw@286
|
158 params = {
|
bsw@286
|
159 code = member.invite_code,
|
bsw@952
|
160 notify_email = notify_email,
|
bsw@286
|
161 name = member.name,
|
bsw/jbe@1309
|
162 step = 1,
|
bsw/jbe@1309
|
163 skip = param.get("skip"),
|
bsw/jbe@1309
|
164 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
165 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
166 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
167 redirect_params = param.get("redirect_params")
|
bsw@286
|
168 }
|
bsw/jbe@5
|
169 }
|
bsw@286
|
170 return false
|
bsw@286
|
171 end
|
bsw@286
|
172
|
bsw@354
|
173 local check_member = Member:by_login(login)
|
bsw@354
|
174 if check_member and check_member.id ~= member.id then
|
bsw@286
|
175 slot.put_into("error", _"This login is already taken, please choose another one!")
|
bsw@286
|
176 request.redirect{
|
bsw@286
|
177 mode = "redirect",
|
bsw@286
|
178 module = "index",
|
bsw@286
|
179 view = "register",
|
bsw@286
|
180 params = {
|
bsw@286
|
181 code = member.invite_code,
|
bsw@952
|
182 notify_email = notify_email,
|
bsw@286
|
183 name = member.name,
|
bsw/jbe@1309
|
184 step = 1,
|
bsw/jbe@1309
|
185 skip = param.get("skip"),
|
bsw/jbe@1309
|
186 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
187 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
188 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
189 redirect_params = param.get("redirect_params")
|
bsw@286
|
190 }
|
bsw@286
|
191 }
|
bsw@286
|
192 return false
|
bsw@286
|
193 end
|
bsw@286
|
194 member.login = login
|
bsw/jbe@5
|
195 end
|
bsw/jbe@5
|
196
|
bsw@1071
|
197 if member.name and not util.is_profile_field_locked(member, "login") and not member.login then
|
bsw/jbe@5
|
198 request.redirect{
|
bsw/jbe@5
|
199 mode = "redirect",
|
bsw/jbe@5
|
200 module = "index",
|
bsw/jbe@5
|
201 view = "register",
|
bsw/jbe@5
|
202 params = {
|
bsw@286
|
203 code = member.invite_code,
|
bsw@952
|
204 notify_email = notify_email,
|
bsw@286
|
205 name = member.name,
|
bsw/jbe@1309
|
206 step = 1,
|
bsw/jbe@1309
|
207 skip = param.get("skip"),
|
bsw/jbe@1309
|
208 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
209 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
210 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
211 redirect_params = param.get("redirect_params")
|
bsw/jbe@5
|
212 }
|
bsw/jbe@5
|
213 }
|
bsw/jbe@5
|
214 return false
|
bsw/jbe@5
|
215 end
|
bsw/jbe@5
|
216
|
bsw@286
|
217 local step = param.get("step", atom.integer)
|
bsw@286
|
218
|
bsw@286
|
219 if step > 2 then
|
bsw/jbe@5
|
220
|
bsw@286
|
221 for i, checkbox in ipairs(config.use_terms_checkboxes) do
|
bsw/jbe@1309
|
222 local member_useterms = MemberUseterms:new_selector()
|
bsw/jbe@1309
|
223 :add_where{ "member_id = ?", member.id }
|
bsw/jbe@1309
|
224 :add_where{ "contract_identifier = ?", checkbox.name }
|
bsw/jbe@1309
|
225 :exec()
|
bsw/jbe@1309
|
226 if #member_useterms == 0 then
|
bsw/jbe@1309
|
227 local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean)
|
bsw/jbe@1309
|
228 if not accepted then
|
bsw/jbe@1309
|
229 slot.put_into("error", checkbox.not_accepted_error)
|
bsw/jbe@1309
|
230 return false
|
bsw/jbe@1309
|
231 end
|
bsw@286
|
232 end
|
bsw@286
|
233 end
|
bsw@286
|
234
|
bsw@1076
|
235 if member.authority ~= "ldap" then
|
bsw@1071
|
236
|
bsw@1071
|
237 local password1 = param.get("password1")
|
bsw@1071
|
238 local password2 = param.get("password2")
|
bsw/jbe@6
|
239
|
bsw@1071
|
240 if login and not password1 then
|
bsw@1071
|
241 request.redirect{
|
bsw@1071
|
242 mode = "redirect",
|
bsw@1071
|
243 module = "index",
|
bsw@1071
|
244 view = "register",
|
bsw@1071
|
245 params = {
|
bsw@1071
|
246 code = member.invite_code,
|
bsw@1071
|
247 notify_email = notify_email,
|
bsw@1071
|
248 name = member.name,
|
bsw/jbe@1309
|
249 login = member.login,
|
bsw/jbe@1309
|
250 skip = param.get("skip"),
|
bsw/jbe@1309
|
251 redirect_module = param.get("redirect_module"),
|
bsw/jbe@1309
|
252 redirect_view = param.get("redirect_view"),
|
bsw/jbe@1309
|
253 redirect_id = param.get("redirect_id"),
|
bsw/jbe@1309
|
254 redirect_params = param.get("redirect_params")
|
bsw@1071
|
255 }
|
bsw@286
|
256 }
|
bsw@1071
|
257 --]]
|
bsw@1071
|
258 return false
|
bsw@1071
|
259 end
|
bsw@1071
|
260
|
bsw@1071
|
261 if password1 ~= password2 then
|
bsw@1071
|
262 slot.put_into("error", _"Passwords don't match!")
|
bsw@1071
|
263 return false
|
bsw@1071
|
264 end
|
bsw@1071
|
265
|
bsw@1071
|
266 if #password1 < 8 then
|
bsw@1071
|
267 slot.put_into("error", _"Passwords must consist of at least 8 characters!")
|
bsw@1071
|
268 return false
|
bsw@1071
|
269 end
|
bsw@1076
|
270
|
bsw@1076
|
271 member:set_password(password1)
|
bsw@1076
|
272
|
bsw@286
|
273 end
|
bsw/jbe@6
|
274
|
bsw@1071
|
275 if not util.is_profile_field_locked(member, "login") then
|
bsw@940
|
276 member.login = login
|
bsw@940
|
277 end
|
bsw@940
|
278
|
bsw@1071
|
279 if not util.is_profile_field_locked(member, "name") then
|
bsw@940
|
280 member.name = name
|
bsw@940
|
281 end
|
bsw@286
|
282
|
bsw/jbe@1309
|
283 if not member.notify_email then
|
bsw@390
|
284 local success = member:set_notify_email(notify_email)
|
bsw@390
|
285 if not success then
|
bsw@390
|
286 slot.put_into("error", _"Can't send confirmation email")
|
bsw@390
|
287 return
|
bsw@390
|
288 end
|
bsw@286
|
289 end
|
bsw@390
|
290
|
bsw@286
|
291 local now = db:query("SELECT now() AS now", "object").now
|
bsw@79
|
292
|
bsw@286
|
293 for i, checkbox in ipairs(config.use_terms_checkboxes) do
|
bsw@286
|
294 local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean)
|
bsw/jbe@1309
|
295 local member_useterms = MemberUseterms:new()
|
bsw/jbe@1309
|
296 member_useterms.member_id = member.id
|
bsw/jbe@1309
|
297 member_useterms.contract_identifier = checkbox.name
|
bsw/jbe@1309
|
298 member_useterms:save()
|
bsw@286
|
299 end
|
bsw/jbe@5
|
300
|
bsw@286
|
301 member.activated = 'now'
|
bsw@286
|
302 member.active = true
|
bsw@286
|
303 member.last_activity = 'now'
|
bsw@286
|
304 member:save()
|
bsw@1071
|
305
|
bsw/jbe@1309
|
306 if not member.profile then
|
bsw/jbe@1309
|
307 local profile = MemberProfile:new()
|
bsw/jbe@1309
|
308 profile.member_id = member.id
|
bsw/jbe@1309
|
309 profile.profile = json.object()
|
bsw/jbe@1309
|
310 profile:save()
|
bsw/jbe@1309
|
311 end
|
bsw/jbe@1309
|
312
|
bsw/jbe@1309
|
313 slot.put_into("notice", _"Registration succeeded")
|
bsw/jbe@1309
|
314
|
bsw/jbe@1309
|
315 app.session.member_id = member.id
|
bsw/jbe@1309
|
316 app.session:save()
|
bsw@286
|
317
|
bsw@286
|
318 request.redirect{
|
bsw@286
|
319 mode = "redirect",
|
bsw/jbe@1309
|
320 module = param.get("redirect_module") or "index",
|
bsw/jbe@1309
|
321 view = param.get("redirect_view") or "index",
|
bsw/jbe@1309
|
322 id = param.get("redirect_id"),
|
bsw@1486
|
323 params = json.import(param.get("redirect_params") or "")
|
bsw@286
|
324 }
|
bsw@286
|
325 end
|
bsw@952
|
326
|