| rev |
line source |
|
bsw@1071
|
1 local ldap_uid
|
|
bsw@1071
|
2
|
|
bsw@1071
|
3 if config.ldap.member and app.session.authority == "ldap" then
|
|
bsw@1074
|
4 ldap_uid = app.session.authority_uid
|
|
bsw@1071
|
5 end
|
|
bsw@1071
|
6
|
|
bsw@1071
|
7 if config.registration_disabled and not ldap_uid then
|
|
bsw/jbe@1309
|
8 return execute.view { module = "index", view = "404" }
|
|
bsw@1071
|
9 end
|
|
bsw@1071
|
10
|
|
bsw@441
|
11 execute.view{ module = "index", view = "_lang_chooser" }
|
|
bsw@441
|
12
|
|
bsw@286
|
13 local step = param.get("step", atom.integer)
|
|
bsw/jbe@5
|
14 local code = param.get("code")
|
|
bsw/jbe@6
|
15 local notify_email = param.get("notify_email")
|
|
bsw/jbe@5
|
16 local name = param.get("name")
|
|
bsw/jbe@5
|
17 local login = param.get("login")
|
|
bsw/jbe@5
|
18
|
|
bsw@1073
|
19 local member
|
|
bsw/jbe@5
|
20
|
|
bsw@1073
|
21 if ldap_uid then
|
|
bsw@1073
|
22 member, err = ldap.create_member(ldap_uid, true)
|
|
bsw@1073
|
23 if err then
|
|
bsw@1073
|
24 error(err)
|
|
bsw@1073
|
25 end
|
|
bsw@1073
|
26 elseif code then
|
|
bsw@1073
|
27 member = Member:new_selector()
|
|
bsw@1073
|
28 :add_where{ "invite_code = ?", code }
|
|
bsw@1073
|
29 :add_where{ "activated ISNULL" }
|
|
bsw@1073
|
30 :optional_object_mode()
|
|
bsw@1073
|
31 :exec()
|
|
bsw@1073
|
32 end
|
|
bsw@286
|
33
|
|
bsw@1073
|
34
|
|
bsw@1073
|
35
|
|
bsw/jbe@1309
|
36 ui.container{ attr = { class = "mdl-grid" }, content = function()
|
|
bsw/jbe@1309
|
37 ui.container{ attr = { class = "mdl-cell mdl-cell--12-col" }, content = function()
|
|
bsw/jbe@1309
|
38 ui.heading{ level = 1, content = _"Account registration" }
|
|
bsw/jbe@1309
|
39 --[[
|
|
bsw@1073
|
40 if not code and not ldap_uid then
|
|
bsw/jbe@1309
|
41 ui.heading{ level = 1, content = _"Registration (step 1 of 3: Invite code)" }
|
|
bsw@1073
|
42 elseif (not member.notify_email and not notify_email)
|
|
bsw@1071
|
43 or (not member.name and not name)
|
|
bsw@1071
|
44 or (not member.login and not login and not member.authority)
|
|
bsw@1071
|
45 or step == 1 then
|
|
bsw/jbe@1309
|
46 ui.heading { level = 1, content = _"Registration (step 2 of 3: Personal information)" }
|
|
bsw@1073
|
47 else
|
|
bsw/jbe@1309
|
48 ui.heading { level = 1, content = _"Registration (step 3 of 3: Terms of use and password)" }
|
|
bsw@1073
|
49 end
|
|
bsw/jbe@1309
|
50 --]]
|
|
bsw@1073
|
51 ui.sectionRow( function()
|
|
bsw@1073
|
52 ui.form{
|
|
bsw@1073
|
53 attr = { class = "wide" },
|
|
bsw@1073
|
54 module = 'index',
|
|
bsw@1073
|
55 action = 'register',
|
|
bsw@1073
|
56 params = {
|
|
bsw@1073
|
57 code = code,
|
|
bsw@1073
|
58 notify_email = notify_email,
|
|
bsw@1073
|
59 name = name,
|
|
bsw/jbe@1309
|
60 login = login,
|
|
bsw/jbe@1309
|
61 skip = param.get("skip"),
|
|
bsw/jbe@1309
|
62 redirect_module = param.get("redirect_module"),
|
|
bsw/jbe@1309
|
63 redirect_view = param.get("redirect_view"),
|
|
bsw/jbe@1309
|
64 redirect_id = param.get("redirect_id"),
|
|
bsw/jbe@1309
|
65 redirect_params = param.get("redirect_params")
|
|
bsw@1073
|
66 },
|
|
bsw@1073
|
67 content = function()
|
|
bsw@1073
|
68
|
|
bsw@1073
|
69 if not code and not ldap_uid then
|
|
bsw@1073
|
70 ui.field.hidden{ name = "step", value = 1 }
|
|
bsw/jbe@1309
|
71 ui.tag { tag = "p", content = _"Please enter the invite code you've received" }
|
|
bsw@1073
|
72 ui.field.text{
|
|
bsw/jbe@1309
|
73 container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
|
|
bsw/jbe@1309
|
74 attr = { id = "lf-register__code", class = "mdl-textfield__input" },
|
|
bsw/jbe@1309
|
75 label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
|
|
bsw/jbe@1309
|
76 label = _'Invite code',
|
|
bsw/jbe@1309
|
77 name = 'code',
|
|
bsw/jbe@1309
|
78 value = ''
|
|
bsw@1073
|
79 }
|
|
bsw/jbe@1309
|
80 slot.put("<br /><br />")
|
|
bsw/jbe@1309
|
81 ui.tag{
|
|
bsw/jbe@1309
|
82 tag = "input",
|
|
bsw/jbe@1309
|
83 attr = {
|
|
bsw/jbe@1309
|
84 type = "submit",
|
|
bsw/jbe@1309
|
85 class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
|
|
bsw/jbe@1309
|
86 value = _'proceed with registration'
|
|
bsw/jbe@1309
|
87 }
|
|
bsw@745
|
88 }
|
|
bsw@1045
|
89 slot.put(" ")
|
|
bsw@1073
|
90 else
|
|
bsw@1073
|
91 if (not member.notify_email and not notify_email)
|
|
bsw@1073
|
92 or (not member.name and not name)
|
|
bsw@1073
|
93 or (not member.login and not login and not member.authority)
|
|
bsw@1073
|
94 or step == 1 then
|
|
bsw@1073
|
95 ui.field.hidden{ name = "step", value = 2 }
|
|
bsw@286
|
96
|
|
bsw@1073
|
97 ui.tag{
|
|
bsw@1073
|
98 tag = "p",
|
|
bsw@1073
|
99 content = _"This invite key is connected with the following information:"
|
|
bsw@1073
|
100 }
|
|
bsw@1073
|
101
|
|
bsw@1073
|
102 execute.view{ module = "member", view = "_profile", params = { member = member, for_registration = true } }
|
|
bsw@1045
|
103
|
|
bsw/jbe@1309
|
104 slot.put("<br /><br />")
|
|
bsw/jbe@1309
|
105
|
|
bsw/jbe@1309
|
106 if not util.is_profile_field_locked(member, "notify_email") and not member.notify_email then
|
|
bsw@1073
|
107 ui.tag{
|
|
bsw@1073
|
108 tag = "p",
|
|
bsw@1073
|
109 content = _"Please enter your email address. This address will be used for automatic notifications (if you request them) and in case you've lost your password. This address will not be published. After registration you will receive an email with a confirmation link."
|
|
bsw@1073
|
110 }
|
|
bsw@1073
|
111 ui.field.text{
|
|
bsw/jbe@1309
|
112 container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
|
|
bsw/jbe@1309
|
113 attr = { id = "lf-register__code", class = "mdl-textfield__input" },
|
|
bsw/jbe@1309
|
114 label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
|
|
bsw/jbe@1309
|
115 label = _'Email address',
|
|
bsw/jbe@1309
|
116 name = 'notify_email',
|
|
bsw@1073
|
117 value = param.get("notify_email") or member.notify_email
|
|
bsw@1073
|
118 }
|
|
bsw@1073
|
119 end
|
|
bsw@1073
|
120 if not util.is_profile_field_locked(member, "name") then
|
|
bsw@1073
|
121 ui.tag{
|
|
bsw@1073
|
122 tag = "p",
|
|
bsw@1073
|
123 content = _"Please choose a name, i.e. your real name or your nick name. This name will be shown to others to identify you."
|
|
bsw@1073
|
124 }
|
|
bsw@1073
|
125 ui.field.text{
|
|
bsw/jbe@1309
|
126 container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
|
|
bsw/jbe@1309
|
127 attr = { id = "lf-register__code", class = "mdl-textfield__input" },
|
|
bsw/jbe@1309
|
128 label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
|
|
bsw/jbe@1309
|
129 label = _'Screen name',
|
|
bsw@1073
|
130 name = 'name',
|
|
bsw@1073
|
131 value = param.get("name") or member.name
|
|
bsw@1073
|
132 }
|
|
bsw@1073
|
133 end
|
|
bsw@1073
|
134 if not util.is_profile_field_locked(member, "login") then
|
|
bsw@1073
|
135 ui.tag{
|
|
bsw@1073
|
136 tag = "p",
|
|
bsw@1073
|
137 content = _"Please choose a login name. This name will not be shown to others and is used only by you to login into the system. The login name is case sensitive."
|
|
bsw@1073
|
138 }
|
|
bsw@1073
|
139 ui.field.text{
|
|
bsw/jbe@1309
|
140 container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
|
|
bsw/jbe@1309
|
141 attr = { id = "lf-register__code", class = "mdl-textfield__input" },
|
|
bsw/jbe@1309
|
142 label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
|
|
bsw/jbe@1309
|
143 label = _'Login name',
|
|
bsw@1073
|
144 name = 'login',
|
|
bsw@1073
|
145 value = param.get("login") or member.login
|
|
bsw@1073
|
146 }
|
|
bsw@1073
|
147 end
|
|
bsw/jbe@1309
|
148 slot.put("<br /><br />")
|
|
bsw/jbe@1309
|
149 ui.tag{
|
|
bsw/jbe@1309
|
150 tag = "input",
|
|
bsw/jbe@1309
|
151 attr = {
|
|
bsw/jbe@1309
|
152 type = "submit",
|
|
bsw/jbe@1309
|
153 class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
|
|
bsw/jbe@1309
|
154 value = _'proceed with registration'
|
|
bsw@1073
|
155 }
|
|
bsw@1073
|
156 }
|
|
bsw/jbe@1309
|
157 if param.get("skip") ~= "1" then
|
|
bsw/jbe@1309
|
158 slot.put(" ")
|
|
bsw/jbe@1309
|
159 ui.link{
|
|
bsw/jbe@1309
|
160 attr = { class = "mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--underlined" },
|
|
bsw/jbe@1309
|
161 content = _"one step back",
|
|
bsw/jbe@1309
|
162 module = "index",
|
|
bsw/jbe@1309
|
163 view = "register",
|
|
bsw/jbe@1309
|
164 params = {
|
|
bsw/jbe@1309
|
165 invite = code,
|
|
bsw/jbe@1309
|
166 redirect_module = param.get("redirect_module"),
|
|
bsw/jbe@1309
|
167 redirect_view = param.get("redirect_view"),
|
|
bsw/jbe@1309
|
168 redirect_id = param.get("redirect_id"),
|
|
bsw/jbe@1309
|
169 redirect_params = param.get("redirect_params")
|
|
bsw/jbe@1309
|
170 }
|
|
bsw/jbe@1309
|
171 }
|
|
bsw/jbe@1309
|
172 end
|
|
bsw/jbe@1309
|
173 else
|
|
bsw@1073
|
174 ui.field.hidden{ name = "step", value = "3" }
|
|
bsw/jbe@1309
|
175
|
|
bsw/jbe@1309
|
176 local need_to_accept_terms = false
|
|
bsw@1045
|
177
|
|
bsw@1073
|
178 for i, checkbox in ipairs(config.use_terms_checkboxes) do
|
|
bsw/jbe@1309
|
179 local member_useterms = MemberUseterms:new_selector()
|
|
bsw/jbe@1309
|
180 :add_where{ "member_id = ?", member.id }
|
|
bsw/jbe@1309
|
181 :add_where{ "contract_identifier = ?", checkbox.name }
|
|
bsw/jbe@1309
|
182 :exec()
|
|
bsw/jbe@1309
|
183 if #member_useterms == 0 then
|
|
bsw/jbe@1309
|
184 need_to_accept_terms = true
|
|
bsw/jbe@1309
|
185 end
|
|
bsw/jbe@1309
|
186 end
|
|
bsw/jbe@1309
|
187
|
|
bsw/jbe@1309
|
188 if need_to_accept_terms then
|
|
bsw/jbe@1309
|
189 ui.container{
|
|
bsw/jbe@1309
|
190 attr = { class = "wiki use_terms" },
|
|
bsw@1073
|
191 content = function()
|
|
bsw/jbe@1309
|
192 slot.put(config.use_terms)
|
|
bsw/jbe@1309
|
193 end
|
|
bsw/jbe@1309
|
194 }
|
|
bsw/jbe@1309
|
195
|
|
bsw/jbe@1309
|
196 for i, checkbox in ipairs(config.use_terms_checkboxes) do
|
|
bsw/jbe@1309
|
197 local member_useterms = MemberUseterms:new_selector()
|
|
bsw/jbe@1309
|
198 :add_where{ "member_id = ?", member.id }
|
|
bsw/jbe@1309
|
199 :add_where{ "contract_identifier = ?", checkbox.name }
|
|
bsw/jbe@1309
|
200 :exec()
|
|
bsw/jbe@1309
|
201 if #member_useterms == 0 then
|
|
bsw/jbe@1309
|
202 slot.put("<br />")
|
|
bsw@1073
|
203 ui.tag{
|
|
bsw/jbe@1309
|
204 tag = "div",
|
|
bsw/jbe@1309
|
205 content = function()
|
|
bsw/jbe@1309
|
206 ui.tag{
|
|
bsw/jbe@1309
|
207 tag = "input",
|
|
bsw/jbe@1309
|
208 attr = {
|
|
bsw/jbe@1309
|
209 type = "checkbox",
|
|
bsw/jbe@1309
|
210 id = "use_terms_checkbox_" .. checkbox.name,
|
|
bsw/jbe@1309
|
211 name = "use_terms_checkbox_" .. checkbox.name,
|
|
bsw/jbe@1309
|
212 value = "1",
|
|
bsw/jbe@1309
|
213 style = "float: left;",
|
|
bsw/jbe@1309
|
214 checked = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) and "checked" or nil
|
|
bsw/jbe@1309
|
215 }
|
|
bsw/jbe@1309
|
216 }
|
|
bsw/jbe@1309
|
217 slot.put(" ")
|
|
bsw/jbe@1309
|
218 ui.tag{
|
|
bsw/jbe@1309
|
219 tag = "label",
|
|
bsw/jbe@1309
|
220 attr = { ['for'] = "use_terms_checkbox_" .. checkbox.name },
|
|
bsw/jbe@1309
|
221 content = function() slot.put(checkbox.html) end
|
|
bsw/jbe@1309
|
222 }
|
|
bsw/jbe@1309
|
223 end
|
|
bsw@1073
|
224 }
|
|
bsw@1073
|
225 end
|
|
bsw/jbe@1309
|
226 end
|
|
bsw@1073
|
227
|
|
bsw/jbe@1309
|
228 slot.put("<br />")
|
|
bsw/jbe@1309
|
229 end
|
|
bsw/jbe@1309
|
230
|
|
bsw@1073
|
231 member.notify_email = notify_email or member.notify_email
|
|
bsw@1073
|
232 member.name = name or member.name
|
|
bsw@1073
|
233 member.login = login or member.login
|
|
bsw@1073
|
234
|
|
bsw/jbe@1309
|
235 -- ui.heading { level = 2, content = _"Personal information" }
|
|
bsw/jbe@1309
|
236 -- execute.view{ module = "member", view = "_profile", params = {
|
|
bsw/jbe@1309
|
237 -- member = member, include_private_data = true
|
|
bsw/jbe@1309
|
238 -- } }
|
|
bsw/jbe@1309
|
239 -- ui.field.text{
|
|
bsw/jbe@1309
|
240 -- readonly = true,
|
|
bsw/jbe@1309
|
241 -- label = _'Login name',
|
|
bsw/jbe@1309
|
242 -- name = 'login',
|
|
bsw/jbe@1309
|
243 -- value = member.login
|
|
bsw/jbe@1309
|
244 -- }
|
|
bsw@1073
|
245
|
|
bsw@1073
|
246 if not (member.authority == "ldap") then
|
|
bsw@1073
|
247 ui.tag{
|
|
bsw@1073
|
248 tag = "p",
|
|
bsw@1073
|
249 content = _"Please choose a password and enter it twice. The password is case sensitive."
|
|
bsw@1073
|
250 }
|
|
bsw@1073
|
251 ui.field.password{
|
|
bsw/jbe@1309
|
252 container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
|
|
bsw/jbe@1309
|
253 attr = { id = "lf-register__code", class = "mdl-textfield__input" },
|
|
bsw/jbe@1309
|
254 label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
|
|
bsw/jbe@1309
|
255 label = _'Password',
|
|
bsw@1073
|
256 name = 'password1',
|
|
bsw@1073
|
257 }
|
|
bsw/jbe@1309
|
258 slot.put("<br />")
|
|
bsw@1073
|
259 ui.field.password{
|
|
bsw/jbe@1309
|
260 container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
|
|
bsw/jbe@1309
|
261 attr = { id = "lf-register__code", class = "mdl-textfield__input" },
|
|
bsw/jbe@1309
|
262 label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
|
|
bsw/jbe@1309
|
263 label = _'Repeat password',
|
|
bsw@1073
|
264 name = 'password2',
|
|
bsw@1073
|
265 }
|
|
bsw@1073
|
266 end
|
|
bsw@1073
|
267
|
|
bsw/jbe@1309
|
268 slot.put("<br /><br />")
|
|
bsw/jbe@1309
|
269 ui.tag{
|
|
bsw/jbe@1309
|
270 tag = "input",
|
|
bsw/jbe@1309
|
271 attr = {
|
|
bsw/jbe@1309
|
272 type = "submit",
|
|
bsw/jbe@1309
|
273 class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
|
|
bsw/jbe@1309
|
274 value = _'activate account'
|
|
bsw/jbe@1309
|
275 }
|
|
bsw@1071
|
276 }
|
|
bsw@1073
|
277 slot.put(" ")
|
|
bsw@1073
|
278 ui.link{
|
|
bsw/jbe@1309
|
279 attr = { class = "mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--underlined" },
|
|
bsw@1073
|
280 content = _"one step back",
|
|
bsw@1073
|
281 module = "index",
|
|
bsw@1073
|
282 view = "register",
|
|
bsw@1073
|
283 params = {
|
|
bsw@1073
|
284 code = code,
|
|
bsw@1073
|
285 notify_email = notify_email,
|
|
bsw@1073
|
286 name = name,
|
|
bsw/jbe@1309
|
287 login = login,
|
|
bsw/jbe@1309
|
288 skip = param.get("skip"),
|
|
bsw/jbe@1309
|
289 step = 1,
|
|
bsw/jbe@1309
|
290 redirect_module = param.get("redirect_module"),
|
|
bsw/jbe@1309
|
291 redirect_view = param.get("redirect_view"),
|
|
bsw/jbe@1309
|
292 redirect_id = param.get("redirect_id"),
|
|
bsw/jbe@1309
|
293 redirect_params = param.get("redirect_params")
|
|
bsw@1073
|
294 }
|
|
bsw@1071
|
295 }
|
|
bsw@1071
|
296 end
|
|
bsw@1073
|
297 end
|
|
bsw@286
|
298 end
|
|
bsw@1073
|
299 }
|
|
bsw@1073
|
300
|
|
bsw@1073
|
301 slot.put("<br /><br />")
|
|
bsw/jbe@5
|
302
|
|
bsw@1073
|
303 ui.link{
|
|
bsw/jbe@1309
|
304 attr = { class = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect" },
|
|
bsw/jbe@1309
|
305 content = _"cancel",
|
|
bsw@1073
|
306 module = "index",
|
|
bsw@1073
|
307 action = "cancel_register",
|
|
bsw@1073
|
308 routing = { default = {
|
|
bsw/jbe@1309
|
309 mode = "redirect", module = "index", view = "login", params = {
|
|
bsw/jbe@1309
|
310 redirect_module = param.get("redirect_module"),
|
|
bsw/jbe@1309
|
311 redirect_view = param.get("redirect_view"),
|
|
bsw/jbe@1309
|
312 redirect_id = param.get("redirect_id"),
|
|
bsw/jbe@1309
|
313 redirect_params = param.get("redirect_params")
|
|
bsw/jbe@1309
|
314 }
|
|
bsw@1073
|
315 } }
|
|
bsw@1073
|
316 }
|
|
bsw@1073
|
317 end )
|
|
bsw/jbe@1309
|
318 end }
|
|
bsw/jbe@1309
|
319 end }
|
|
bsw/jbe@5
|
320
|