bsw@1071: local ldap_uid
bsw@1071:
bsw@1071: if config.ldap.member and app.session.authority == "ldap" then
bsw@1074: ldap_uid = app.session.authority_uid
bsw@1071: end
bsw@1071:
bsw@1071: if config.registration_disabled and not ldap_uid then
bsw/jbe@1309: return execute.view { module = "index", view = "404" }
bsw@1071: end
bsw@1071:
bsw@441: execute.view{ module = "index", view = "_lang_chooser" }
bsw@441:
bsw@286: local step = param.get("step", atom.integer)
bsw/jbe@5: local code = param.get("code")
bsw/jbe@6: local notify_email = param.get("notify_email")
bsw/jbe@5: local name = param.get("name")
bsw/jbe@5: local login = param.get("login")
bsw/jbe@5:
bsw@1073: local member
bsw/jbe@5:
bsw@1073: if ldap_uid then
bsw@1073: member, err = ldap.create_member(ldap_uid, true)
bsw@1073: if err then
bsw@1073: error(err)
bsw@1073: end
bsw@1073: elseif code then
bsw@1073: member = Member:new_selector()
bsw@1073: :add_where{ "invite_code = ?", code }
bsw@1073: :add_where{ "activated ISNULL" }
bsw@1073: :optional_object_mode()
bsw@1073: :exec()
bsw@1073: end
bsw@286:
bsw@1073:
bsw@1073:
bsw/jbe@1309: ui.container{ attr = { class = "mdl-grid" }, content = function()
bsw/jbe@1309: ui.container{ attr = { class = "mdl-cell mdl-cell--12-col" }, content = function()
bsw/jbe@1309: ui.heading{ level = 1, content = _"Account registration" }
bsw/jbe@1309: --[[
bsw@1073: if not code and not ldap_uid then
bsw/jbe@1309: ui.heading{ level = 1, content = _"Registration (step 1 of 3: Invite code)" }
bsw@1073: elseif (not member.notify_email and not notify_email)
bsw@1071: or (not member.name and not name)
bsw@1071: or (not member.login and not login and not member.authority)
bsw@1071: or step == 1 then
bsw/jbe@1309: ui.heading { level = 1, content = _"Registration (step 2 of 3: Personal information)" }
bsw@1073: else
bsw/jbe@1309: ui.heading { level = 1, content = _"Registration (step 3 of 3: Terms of use and password)" }
bsw@1073: end
bsw/jbe@1309: --]]
bsw@1073: ui.sectionRow( function()
bsw@1073: ui.form{
bsw@1073: attr = { class = "wide" },
bsw@1073: module = 'index',
bsw@1073: action = 'register',
bsw@1073: params = {
bsw@1073: code = code,
bsw@1073: notify_email = notify_email,
bsw@1073: name = name,
bsw/jbe@1309: login = login,
bsw/jbe@1309: skip = param.get("skip"),
bsw/jbe@1309: redirect_module = param.get("redirect_module"),
bsw/jbe@1309: redirect_view = param.get("redirect_view"),
bsw/jbe@1309: redirect_id = param.get("redirect_id"),
bsw/jbe@1309: redirect_params = param.get("redirect_params")
bsw@1073: },
bsw@1073: content = function()
bsw@1073:
bsw@1073: if not code and not ldap_uid then
bsw@1073: ui.field.hidden{ name = "step", value = 1 }
bsw/jbe@1309: ui.tag { tag = "p", content = _"Please enter the invite code you've received" }
bsw@1073: ui.field.text{
bsw/jbe@1309: container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
bsw/jbe@1309: attr = { id = "lf-register__code", class = "mdl-textfield__input" },
bsw/jbe@1309: label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
bsw/jbe@1309: label = _'Invite code',
bsw/jbe@1309: name = 'code',
bsw/jbe@1309: value = ''
bsw@1073: }
bsw/jbe@1309: slot.put("
")
bsw/jbe@1309: ui.tag{
bsw/jbe@1309: tag = "input",
bsw/jbe@1309: attr = {
bsw/jbe@1309: type = "submit",
bsw/jbe@1309: class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
bsw/jbe@1309: value = _'proceed with registration'
bsw/jbe@1309: }
bsw@745: }
bsw@1045: slot.put(" ")
bsw@1073: else
bsw@1073: if (not member.notify_email and not notify_email)
bsw@1073: or (not member.name and not name)
bsw@1073: or (not member.login and not login and not member.authority)
bsw@1073: or step == 1 then
bsw@1073: ui.field.hidden{ name = "step", value = 2 }
bsw@286:
bsw@1073: ui.tag{
bsw@1073: tag = "p",
bsw@1073: content = _"This invite key is connected with the following information:"
bsw@1073: }
bsw@1073:
bsw@1073: execute.view{ module = "member", view = "_profile", params = { member = member, for_registration = true } }
bsw@1045:
bsw/jbe@1309: slot.put("
")
bsw/jbe@1309:
bsw/jbe@1309: if not util.is_profile_field_locked(member, "notify_email") and not member.notify_email then
bsw@1073: ui.tag{
bsw@1073: tag = "p",
bsw@1073: 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: }
bsw@1073: ui.field.text{
bsw/jbe@1309: container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
bsw/jbe@1309: attr = { id = "lf-register__code", class = "mdl-textfield__input" },
bsw/jbe@1309: label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
bsw/jbe@1309: label = _'Email address',
bsw/jbe@1309: name = 'notify_email',
bsw@1073: value = param.get("notify_email") or member.notify_email
bsw@1073: }
bsw@1073: end
bsw@1073: if not util.is_profile_field_locked(member, "name") then
bsw@1073: ui.tag{
bsw@1073: tag = "p",
bsw@1073: 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: }
bsw@1073: ui.field.text{
bsw/jbe@1309: container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
bsw/jbe@1309: attr = { id = "lf-register__code", class = "mdl-textfield__input" },
bsw/jbe@1309: label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
bsw/jbe@1309: label = _'Screen name',
bsw@1073: name = 'name',
bsw@1073: value = param.get("name") or member.name
bsw@1073: }
bsw@1073: end
bsw@1073: if not util.is_profile_field_locked(member, "login") then
bsw@1073: ui.tag{
bsw@1073: tag = "p",
bsw@1073: 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: }
bsw@1073: ui.field.text{
bsw/jbe@1309: container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
bsw/jbe@1309: attr = { id = "lf-register__code", class = "mdl-textfield__input" },
bsw/jbe@1309: label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
bsw/jbe@1309: label = _'Login name',
bsw@1073: name = 'login',
bsw@1073: value = param.get("login") or member.login
bsw@1073: }
bsw@1073: end
bsw/jbe@1309: slot.put("
")
bsw/jbe@1309: ui.tag{
bsw/jbe@1309: tag = "input",
bsw/jbe@1309: attr = {
bsw/jbe@1309: type = "submit",
bsw/jbe@1309: class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
bsw/jbe@1309: value = _'proceed with registration'
bsw@1073: }
bsw@1073: }
bsw/jbe@1309: if param.get("skip") ~= "1" then
bsw/jbe@1309: slot.put(" ")
bsw/jbe@1309: ui.link{
bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--underlined" },
bsw/jbe@1309: content = _"one step back",
bsw/jbe@1309: module = "index",
bsw/jbe@1309: view = "register",
bsw/jbe@1309: params = {
bsw/jbe@1309: invite = code,
bsw/jbe@1309: redirect_module = param.get("redirect_module"),
bsw/jbe@1309: redirect_view = param.get("redirect_view"),
bsw/jbe@1309: redirect_id = param.get("redirect_id"),
bsw/jbe@1309: redirect_params = param.get("redirect_params")
bsw/jbe@1309: }
bsw/jbe@1309: }
bsw/jbe@1309: end
bsw/jbe@1309: else
bsw@1073: ui.field.hidden{ name = "step", value = "3" }
bsw/jbe@1309:
bsw/jbe@1309: local need_to_accept_terms = false
bsw@1045:
bsw@1073: for i, checkbox in ipairs(config.use_terms_checkboxes) do
bsw/jbe@1309: local member_useterms = MemberUseterms:new_selector()
bsw/jbe@1309: :add_where{ "member_id = ?", member.id }
bsw/jbe@1309: :add_where{ "contract_identifier = ?", checkbox.name }
bsw/jbe@1309: :exec()
bsw/jbe@1309: if #member_useterms == 0 then
bsw/jbe@1309: need_to_accept_terms = true
bsw/jbe@1309: end
bsw/jbe@1309: end
bsw/jbe@1309:
bsw/jbe@1309: if need_to_accept_terms then
bsw/jbe@1309: ui.container{
bsw/jbe@1309: attr = { class = "wiki use_terms" },
bsw@1073: content = function()
bsw/jbe@1309: slot.put(config.use_terms)
bsw/jbe@1309: end
bsw/jbe@1309: }
bsw/jbe@1309:
bsw/jbe@1309: for i, checkbox in ipairs(config.use_terms_checkboxes) do
bsw/jbe@1309: local member_useterms = MemberUseterms:new_selector()
bsw/jbe@1309: :add_where{ "member_id = ?", member.id }
bsw/jbe@1309: :add_where{ "contract_identifier = ?", checkbox.name }
bsw/jbe@1309: :exec()
bsw/jbe@1309: if #member_useterms == 0 then
bsw/jbe@1309: slot.put("
")
bsw@1073: ui.tag{
bsw/jbe@1309: tag = "div",
bsw/jbe@1309: content = function()
bsw/jbe@1309: ui.tag{
bsw/jbe@1309: tag = "input",
bsw/jbe@1309: attr = {
bsw/jbe@1309: type = "checkbox",
bsw/jbe@1309: id = "use_terms_checkbox_" .. checkbox.name,
bsw/jbe@1309: name = "use_terms_checkbox_" .. checkbox.name,
bsw/jbe@1309: value = "1",
bsw/jbe@1309: style = "float: left;",
bsw/jbe@1309: checked = param.get("use_terms_checkbox_" .. checkbox.name, atom.boolean) and "checked" or nil
bsw/jbe@1309: }
bsw/jbe@1309: }
bsw/jbe@1309: slot.put(" ")
bsw/jbe@1309: ui.tag{
bsw/jbe@1309: tag = "label",
bsw/jbe@1309: attr = { ['for'] = "use_terms_checkbox_" .. checkbox.name },
bsw/jbe@1309: content = function() slot.put(checkbox.html) end
bsw/jbe@1309: }
bsw/jbe@1309: end
bsw@1073: }
bsw@1073: end
bsw/jbe@1309: end
bsw@1073:
bsw/jbe@1309: slot.put("
")
bsw/jbe@1309: end
bsw/jbe@1309:
bsw@1073: member.notify_email = notify_email or member.notify_email
bsw@1073: member.name = name or member.name
bsw@1073: member.login = login or member.login
bsw@1073:
bsw/jbe@1309: -- ui.heading { level = 2, content = _"Personal information" }
bsw/jbe@1309: -- execute.view{ module = "member", view = "_profile", params = {
bsw/jbe@1309: -- member = member, include_private_data = true
bsw/jbe@1309: -- } }
bsw/jbe@1309: -- ui.field.text{
bsw/jbe@1309: -- readonly = true,
bsw/jbe@1309: -- label = _'Login name',
bsw/jbe@1309: -- name = 'login',
bsw/jbe@1309: -- value = member.login
bsw/jbe@1309: -- }
bsw@1073:
bsw@1073: if not (member.authority == "ldap") then
bsw@1073: ui.tag{
bsw@1073: tag = "p",
bsw@1073: content = _"Please choose a password and enter it twice. The password is case sensitive."
bsw@1073: }
bsw@1073: ui.field.password{
bsw/jbe@1309: container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
bsw/jbe@1309: attr = { id = "lf-register__code", class = "mdl-textfield__input" },
bsw/jbe@1309: label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
bsw/jbe@1309: label = _'Password',
bsw@1073: name = 'password1',
bsw@1073: }
bsw/jbe@1309: slot.put("
")
bsw@1073: ui.field.password{
bsw/jbe@1309: container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
bsw/jbe@1309: attr = { id = "lf-register__code", class = "mdl-textfield__input" },
bsw/jbe@1309: label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__code" },
bsw/jbe@1309: label = _'Repeat password',
bsw@1073: name = 'password2',
bsw@1073: }
bsw@1073: end
bsw@1073:
bsw/jbe@1309: slot.put("
")
bsw/jbe@1309: ui.tag{
bsw/jbe@1309: tag = "input",
bsw/jbe@1309: attr = {
bsw/jbe@1309: type = "submit",
bsw/jbe@1309: class = "mdl-button mdl-js-button mdl-button--raised mdl-button--colored",
bsw/jbe@1309: value = _'activate account'
bsw/jbe@1309: }
bsw@1071: }
bsw@1073: slot.put(" ")
bsw@1073: ui.link{
bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--underlined" },
bsw@1073: content = _"one step back",
bsw@1073: module = "index",
bsw@1073: view = "register",
bsw@1073: params = {
bsw@1073: code = code,
bsw@1073: notify_email = notify_email,
bsw@1073: name = name,
bsw/jbe@1309: login = login,
bsw/jbe@1309: skip = param.get("skip"),
bsw/jbe@1309: step = 1,
bsw/jbe@1309: redirect_module = param.get("redirect_module"),
bsw/jbe@1309: redirect_view = param.get("redirect_view"),
bsw/jbe@1309: redirect_id = param.get("redirect_id"),
bsw/jbe@1309: redirect_params = param.get("redirect_params")
bsw@1073: }
bsw@1071: }
bsw@1071: end
bsw@1073: end
bsw@286: end
bsw@1073: }
bsw@1073:
bsw@1073: slot.put("
")
bsw/jbe@5:
bsw@1073: ui.link{
bsw/jbe@1309: attr = { class = "mdl-button mdl-js-button mdl-button--raised mdl-js-ripple-effect" },
bsw/jbe@1309: content = _"cancel",
bsw@1073: module = "index",
bsw@1073: action = "cancel_register",
bsw@1073: routing = { default = {
bsw/jbe@1309: mode = "redirect", module = "index", view = "login", params = {
bsw/jbe@1309: redirect_module = param.get("redirect_module"),
bsw/jbe@1309: redirect_view = param.get("redirect_view"),
bsw/jbe@1309: redirect_id = param.get("redirect_id"),
bsw/jbe@1309: redirect_params = param.get("redirect_params")
bsw/jbe@1309: }
bsw@1073: } }
bsw@1073: }
bsw@1073: end )
bsw/jbe@1309: end }
bsw/jbe@1309: end }
bsw/jbe@5: