liquid_feedback_frontend
view app/main/registration_admin/verification.lua @ 1852:e593570a23c5
More efficient algorithm
| author | bsw | 
|---|---|
| date | Tue Mar 22 10:35:44 2022 +0100 (2022-03-22) | 
| parents | 63ce1a5c05c1 | 
| children | 
 line source
     1 local verification = Verification:by_id(param.get_id())
     2 local data = verification.verification_data or verification.request_data
     4 local identification = config.self_registration.identification_func(data)
     5 local member
     6 if verification.verified_member_id then
     7   member = Member:by_id(verification.verified_member_id)
     8   identification = member.identification
     9 end
    11 local group, title, view
    12 if verification.verified_member_id then
    13   if member.deleted then
    14     group = _"Cancelled accounts"
    15     title = _"Cancelled account"
    16     view = "verification_cancelled"
    17   else
    18     group = _"Accredited users"
    19     title = member.identification
    20     view = "verification_accredited"
    21   end
    22 elseif verification.denied then
    23   group = "Rejected requests"
    24   title = _"Rejected request"
    25   view = "verification_rejected"
    26 else
    27   group = "Open requests"
    28   title = _"Open request"
    29   view = "verification_requests"
    30 end
    33 ui.title(function()
    34   ui.link { module = "registration_admin", view = "index", content = _"User management" }
    35   slot.put ( " » " )
    36   ui.link { module = "registration_admin", view = view, content = group }
    37   slot.put ( " » " )
    38   ui.tag { tag = "span", content = title }
    39 end)
    40 app.html_title.title = _"User management"
    42 ui.container{ attr = { class = "mdl-grid" }, content = function()
    43   ui.container{ attr = { class = "mdl-cell mdl-cell--12-col" }, content = function()
    44     ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp" }, content = function()
    45       ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function()
    46         ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = title }
    47       end }
    50       ui.form{
    51         module = "registration_admin", action = "update_verification", id = verification.id,
    52         routing = { ok = { mode = "redirect", module = "registration_admin", view = "verification", id = verification.id } },
    53         record = data,
    54         content = function()
    56           if not verification.verified_member_id then
    57             ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function()
    58               ui.container{ content = verification.comment and verification.comment:gsub("///", " / ") or ""}
    59             end }
    60           end
    62           ui.container{ attr = { class = "mdl-card__content" }, content = function()
    64             for i, field in ipairs(config.self_registration.fields) do
    65               ui.container{ content = function()
    66                 if field.type == "image" then
    67                   ui.link{ content = field.label, module = "registration_admin", view = "verification_image", id = verification.request_data[field.name], params = { field = i }, attr = { target = "_blank" } }
    68                 elseif field.name == "unit" then
    69                   local units_selector = Unit:new_selector()
    70                     :add_where{ "active" }
    71                     :add_order_by("name")
    72                   if field.where then
    73                     units_selector:add_where(field.where)
    74                   end
    75                   local units = {}
    76                   if field.optional then
    77                     table.insert(units, {
    78                       id = "",
    79                       name = _"None"
    80                     })
    81                   end
    82                   for i_unit, unit in ipairs(units_selector:exec()) do
    83                     table.insert(units, unit)
    84                   end
    85                   ui.field.select{
    86                     container_attr = { style = "display: inline-block;" },
    87                     label = field.label,
    88                     foreign_records = units,
    89                     foreign_id = "id",
    90                     foreign_name = "name",
    91                     name = field.name,
    92                     value = tonumber(data[field.name])
    93                   }
    94                   local requested_unit = Unit:by_id(tonumber(verification.request_data.unit))
    95                   ui.tag{ content = requested_unit and requested_unit.name or "-" }
    96                 elseif field.name == "sequential_number" then
    97                   ui.tag{ tag = "label", content = field.label }
    98 		  slot.put(" ")
    99                   ui.tag{ tag = "span", content = data.sequential_number or _"None yet" }
   100                 else
   101                   ui.field.text{
   102                     container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label" },
   103                     attr = { id = "lf-register__data_" .. field.name, class = "mdl-textfield__input" },
   104                     label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__data" .. field.name },
   105                     label = field.label,
   106                     name = field.name
   107                   }
   108                   ui.tag{ content = verification.request_data[field.name] }
   109                 end
   110               end }
   111             end
   113             ui.field.text{
   114               container_attr = { class = "mdl-textfield mdl-js-textfield mdl-textfield--floating-label", style = "width: 30em;" },
   115               attr = { id = "lf-register__data_identification", class = "mdl-textfield__input" },
   116               label_attr = { class = "mdl-textfield__label", ["for"] = "lf-register__data_identification" },
   117               label = "Identification",
   118               name = "identification",
   119               value = identification
   120             }
   122             if member and not member.activated and member.invite_code then
   123               ui.container{ content = "Invite-Code: " .. member.invite_code }
   124             end
   126           end }
   128           ui.container{ attr = { class = "mdl-card__actions mdl-card--border" }, content = function()
   130             if verification.denied then
   131               ui.link{ attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, module = "registration_admin", view = view, content = "Back" }
   132             elseif verification.verified_member_id then
   133               ui.submit{ attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, value = "Save personal data" }
   134               slot.put("   ")
   135               if not member.activated and not config.self_registration.manual_invitation then
   136                 ui.submit{ name = "invite", attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, value = "Send email invitation again" }
   137                 slot.put("   ")
   138               end
   139               ui.link{ attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, module = "registration_admin", view = view, content = "Back" }
   140               slot.put("   ")
   141               ui.link{ attr = { class = "mdl-button mdl-js-button" }, module = "admin", view = "member_edit", id = member.id, content = "User account" }
   142               slot.put("   ")
   143               ui.submit{ name = "cancel", attr = { class = "mdl-button mdl-js-button" }, value = _"Delete account" }
   144             else
   145               ui.submit{ name = "accredit", attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, value = "Accredit user" }
   146               slot.put("   ")
   147               ui.submit{ attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, value = "Save personal data" }
   148               slot.put("   ")
   149               ui.link{ attr = { class = "mdl-button mdl-js-button mdl-button--raised" }, module = "registration_admin", view = view, content = "Back" }
   150               slot.put("   ")
   151               ui.submit{ name = "drop", attr = { class = "mdl-button mdl-js-button" }, value = "Reject request" }
   152             end
   153           end }
   155         end 
   156       }
   157     end }
   159     local verifications = Verification:new_selector()
   160       :join("member", nil, "member.id = verification.verified_member_id")
   161       :add_where{ "member.identification = ?", identification }
   162       :add_where{ "verification.id <> ?", verification.id }
   163       :exec()
   165     if #verifications > 0 then
   167       ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp" }, content = function()
   168         ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function()
   169           ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = function()
   170             ui.tag{ content = _"Same identification" }
   171           end }
   172         end }
   173         ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function()
   174           execute.view{ module = "registration_admin", view = "_verification_list", params = { verifications = verifications } }
   175         end }
   176       end }
   177     end
   179     for i, field_name in ipairs(config.self_registration.match_fields) do
   180       local field
   181       for j, f in ipairs(config.self_registration.fields) do
   182         if f.name == field_name then
   183           field = f
   184         end
   185       end
   186       local verifications = Verification:new_selector()
   187         :add_where("verified_member_id NOTNULL")
   188         :add_where{ "lower(request_data->>'" .. field.name .. "') = lower(?)", data[field.name] }
   189         :add_where{ "verification.id <> ?", verification.id }
   190         :exec()
   192       if #verifications > 0 then
   193         ui.container{ attr = { class = "mdl-card mdl-card__fullwidth mdl-shadow--2dp" }, content = function()
   194           ui.container{ attr = { class = "mdl-card__title mdl-card--border" }, content = function()
   195             ui.heading { attr = { class = "mdl-card__title-text" }, level = 2, content = function()
   196               ui.tag{ content = _"Same " .. field.label }
   197             end }
   198           end }
   199           ui.container{ attr = { class = "mdl-card__content mdl-card--border" }, content = function()
   200             execute.view{ module = "registration_admin", view = "_verification_list", params = { verifications = verifications } }
   201           end }
   202         end }
   203       end
   204     end
   206   end }
   207 end }
