| 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@1071
|
7 error("access denied")
|
|
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@1071
|
13 error("registration disabled")
|
|
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@391
|
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@5
|
30 view = "register"
|
|
bsw/jbe@5
|
31 }
|
|
bsw/jbe@5
|
32 return false
|
|
bsw/jbe@5
|
33 end
|
|
bsw/jbe@5
|
34
|
|
bsw/jbe@6
|
35 local notify_email = param.get("notify_email")
|
|
bsw/jbe@5
|
36
|
|
bsw@1071
|
37 if not util.is_profile_field_locked(member, "notify_email") and notify_email then
|
|
bsw@286
|
38 if #notify_email < 5 then
|
|
bsw@286
|
39 slot.put_into("error", _"Email address too short!")
|
|
bsw@286
|
40 request.redirect{
|
|
bsw@286
|
41 mode = "redirect",
|
|
bsw@286
|
42 module = "index",
|
|
bsw@286
|
43 view = "register",
|
|
bsw@286
|
44 params = { code = member.invite_code }
|
|
bsw@286
|
45 }
|
|
bsw@286
|
46 return false
|
|
bsw@286
|
47 end
|
|
bsw/jbe@6
|
48 end
|
|
bsw/jbe@6
|
49
|
|
bsw@1071
|
50 if member and not util.is_profile_field_locked(member, "notify_email") and not notify_email then
|
|
bsw/jbe@5
|
51 request.redirect{
|
|
bsw/jbe@5
|
52 mode = "redirect",
|
|
bsw/jbe@5
|
53 module = "index",
|
|
bsw/jbe@5
|
54 view = "register",
|
|
bsw@286
|
55 params = { code = member.invite_code, step = 1 }
|
|
bsw/jbe@5
|
56 }
|
|
bsw/jbe@5
|
57 return false
|
|
bsw/jbe@5
|
58 end
|
|
bsw/jbe@5
|
59
|
|
bsw@286
|
60
|
|
bsw@286
|
61 local name = util.trim(param.get("name"))
|
|
bsw@286
|
62
|
|
bsw@1071
|
63 if not util.is_profile_field_locked(member, "name") and name then
|
|
bsw/jbe@6
|
64
|
|
bsw@286
|
65 if #name < 3 then
|
|
bsw@753
|
66 slot.put_into("error", _"This screen name is too short!")
|
|
bsw@286
|
67 request.redirect{
|
|
bsw@286
|
68 mode = "redirect",
|
|
bsw@286
|
69 module = "index",
|
|
bsw@286
|
70 view = "register",
|
|
bsw@286
|
71 params = {
|
|
bsw@286
|
72 code = member.invite_code,
|
|
bsw@952
|
73 notify_email = notify_email,
|
|
bsw@286
|
74 step = 1
|
|
bsw@286
|
75 }
|
|
bsw/jbe@6
|
76 }
|
|
bsw@286
|
77 return false
|
|
bsw@286
|
78 end
|
|
bsw@286
|
79
|
|
bsw@351
|
80 local check_member = Member:by_name(name)
|
|
bsw@353
|
81 if check_member and check_member.id ~= member.id then
|
|
bsw@286
|
82 slot.put_into("error", _"This name is already taken, please choose another one!")
|
|
bsw@286
|
83 request.redirect{
|
|
bsw@286
|
84 mode = "redirect",
|
|
bsw@286
|
85 module = "index",
|
|
bsw@286
|
86 view = "register",
|
|
bsw@286
|
87 params = {
|
|
bsw@286
|
88 code = member.invite_code,
|
|
bsw@952
|
89 notify_email = notify_email,
|
|
bsw@286
|
90 step = 1
|
|
bsw@286
|
91 }
|
|
bsw@286
|
92 }
|
|
bsw@286
|
93 return false
|
|
bsw@286
|
94 end
|
|
bsw@286
|
95
|
|
bsw@286
|
96 member.name = name
|
|
bsw@286
|
97
|
|
bsw/jbe@6
|
98 end
|
|
bsw/jbe@6
|
99
|
|
bsw@1071
|
100 if notify_email and not util.is_profile_field_locked(member, "name") and not member.name then
|
|
bsw/jbe@6
|
101 request.redirect{
|
|
bsw/jbe@6
|
102 mode = "redirect",
|
|
bsw/jbe@6
|
103 module = "index",
|
|
bsw/jbe@6
|
104 view = "register",
|
|
bsw/jbe@6
|
105 params = {
|
|
bsw@286
|
106 code = member.invite_code,
|
|
bsw@952
|
107 notify_email = notify_email,
|
|
bsw@286
|
108 step = 1
|
|
bsw/jbe@5
|
109 }
|
|
bsw/jbe@5
|
110 }
|
|
bsw/jbe@5
|
111 return false
|
|
bsw/jbe@5
|
112 end
|
|
bsw/jbe@5
|
113
|
|
bsw@286
|
114 local login = util.trim(param.get("login"))
|
|
bsw@286
|
115
|
|
bsw@1071
|
116 if not util.is_profile_field_locked(member, "login") and login then
|
|
bsw@286
|
117 if #login < 3 then
|
|
bsw@286
|
118 slot.put_into("error", _"This login is too short!")
|
|
bsw@286
|
119 request.redirect{
|
|
bsw@286
|
120 mode = "redirect",
|
|
bsw@286
|
121 module = "index",
|
|
bsw@286
|
122 view = "register",
|
|
bsw@286
|
123 params = {
|
|
bsw@286
|
124 code = member.invite_code,
|
|
bsw@952
|
125 notify_email = notify_email,
|
|
bsw@286
|
126 name = member.name,
|
|
bsw@286
|
127 step = 1
|
|
bsw@286
|
128 }
|
|
bsw/jbe@5
|
129 }
|
|
bsw@286
|
130 return false
|
|
bsw@286
|
131 end
|
|
bsw@286
|
132
|
|
bsw@354
|
133 local check_member = Member:by_login(login)
|
|
bsw@354
|
134 if check_member and check_member.id ~= member.id then
|
|
bsw@286
|
135 slot.put_into("error", _"This login is already taken, please choose another one!")
|
|
bsw@286
|
136 request.redirect{
|
|
bsw@286
|
137 mode = "redirect",
|
|
bsw@286
|
138 module = "index",
|
|
bsw@286
|
139 view = "register",
|
|
bsw@286
|
140 params = {
|
|
bsw@286
|
141 code = member.invite_code,
|
|
bsw@952
|
142 notify_email = notify_email,
|
|
bsw@286
|
143 name = member.name,
|
|
bsw@286
|
144 step = 1
|
|
bsw@286
|
145 }
|
|
bsw@286
|
146 }
|
|
bsw@286
|
147 return false
|
|
bsw@286
|
148 end
|
|
bsw@286
|
149 member.login = login
|
|
bsw/jbe@5
|
150 end
|
|
bsw/jbe@5
|
151
|
|
bsw@1071
|
152 if member.name and not util.is_profile_field_locked(member, "login") and not member.login then
|
|
bsw/jbe@5
|
153 request.redirect{
|
|
bsw/jbe@5
|
154 mode = "redirect",
|
|
bsw/jbe@5
|
155 module = "index",
|
|
bsw/jbe@5
|
156 view = "register",
|
|
bsw/jbe@5
|
157 params = {
|
|
bsw@286
|
158 code = member.invite_code,
|
|
bsw@952
|
159 notify_email = notify_email,
|
|
bsw@286
|
160 name = member.name,
|
|
bsw@286
|
161 step = 1
|
|
bsw/jbe@5
|
162 }
|
|
bsw/jbe@5
|
163 }
|
|
bsw/jbe@5
|
164 return false
|
|
bsw/jbe@5
|
165 end
|
|
bsw/jbe@5
|
166
|
|
bsw@286
|
167 local step = param.get("step", atom.integer)
|
|
bsw@286
|
168
|
|
bsw@286
|
169 if step > 2 then
|
|
bsw/jbe@5
|
170
|
|
bsw@286
|
171 for i, checkbox in ipairs(config.use_terms_checkboxes) do
|
|
bsw@286
|
172 local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean)
|
|
bsw@286
|
173 if not accepted then
|
|
bsw@286
|
174 slot.put_into("error", checkbox.not_accepted_error)
|
|
bsw@286
|
175 return false
|
|
bsw@286
|
176 end
|
|
bsw@286
|
177 end
|
|
bsw@286
|
178
|
|
bsw@1076
|
179 if member.authority ~= "ldap" then
|
|
bsw@1071
|
180
|
|
bsw@1071
|
181 local password1 = param.get("password1")
|
|
bsw@1071
|
182 local password2 = param.get("password2")
|
|
bsw/jbe@6
|
183
|
|
bsw@1071
|
184 if login and not password1 then
|
|
bsw@1071
|
185 request.redirect{
|
|
bsw@1071
|
186 mode = "redirect",
|
|
bsw@1071
|
187 module = "index",
|
|
bsw@1071
|
188 view = "register",
|
|
bsw@1071
|
189 params = {
|
|
bsw@1071
|
190 code = member.invite_code,
|
|
bsw@1071
|
191 notify_email = notify_email,
|
|
bsw@1071
|
192 name = member.name,
|
|
bsw@1071
|
193 login = member.login
|
|
bsw@1071
|
194 }
|
|
bsw@286
|
195 }
|
|
bsw@1071
|
196 --]]
|
|
bsw@1071
|
197 return false
|
|
bsw@1071
|
198 end
|
|
bsw@1071
|
199
|
|
bsw@1071
|
200 if password1 ~= password2 then
|
|
bsw@1071
|
201 slot.put_into("error", _"Passwords don't match!")
|
|
bsw@1071
|
202 return false
|
|
bsw@1071
|
203 end
|
|
bsw@1071
|
204
|
|
bsw@1071
|
205 if #password1 < 8 then
|
|
bsw@1071
|
206 slot.put_into("error", _"Passwords must consist of at least 8 characters!")
|
|
bsw@1071
|
207 return false
|
|
bsw@1071
|
208 end
|
|
bsw@1076
|
209
|
|
bsw@1076
|
210 member:set_password(password1)
|
|
bsw@1076
|
211
|
|
bsw@286
|
212 end
|
|
bsw/jbe@6
|
213
|
|
bsw@1071
|
214 if not util.is_profile_field_locked(member, "login") then
|
|
bsw@940
|
215 member.login = login
|
|
bsw@940
|
216 end
|
|
bsw@940
|
217
|
|
bsw@1071
|
218 if not util.is_profile_field_locked(member, "name") then
|
|
bsw@940
|
219 member.name = name
|
|
bsw@940
|
220 end
|
|
bsw@286
|
221
|
|
bsw@952
|
222 if notify_email ~= member.notify_email then
|
|
bsw@390
|
223 local success = member:set_notify_email(notify_email)
|
|
bsw@390
|
224 if not success then
|
|
bsw@390
|
225 slot.put_into("error", _"Can't send confirmation email")
|
|
bsw@390
|
226 return
|
|
bsw@390
|
227 end
|
|
bsw@286
|
228 end
|
|
bsw@390
|
229
|
|
bsw@286
|
230 local now = db:query("SELECT now() AS now", "object").now
|
|
bsw@79
|
231
|
|
bsw@286
|
232 for i, checkbox in ipairs(config.use_terms_checkboxes) do
|
|
bsw@286
|
233 local accepted = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean)
|
|
bsw@286
|
234 member:set_setting("use_terms_checkbox_" .. checkbox.name, "accepted at " .. tostring(now))
|
|
bsw@286
|
235 end
|
|
bsw/jbe@5
|
236
|
|
bsw@286
|
237 member.activated = 'now'
|
|
bsw@286
|
238 member.active = true
|
|
bsw@286
|
239 member.last_activity = 'now'
|
|
bsw@286
|
240 member:save()
|
|
bsw@1071
|
241
|
|
bsw@286
|
242 slot.put_into("notice", _"You've successfully registered and you can login now with your login and password!")
|
|
bsw@286
|
243
|
|
bsw@286
|
244 request.redirect{
|
|
bsw@286
|
245 mode = "redirect",
|
|
bsw@286
|
246 module = "index",
|
|
bsw@286
|
247 view = "login",
|
|
bsw@286
|
248 }
|
|
bsw@286
|
249 end
|
|
bsw@952
|
250
|