Remove Vereinfacht-required logic from settings and member validation
- Member field settings: required only from email + settings (no API override) - Member resource validation: required fields from settings only - Gettext: remove obsolete 'Required for Vereinfacht integration' string
This commit is contained in:
parent
96ca857e06
commit
0ac39c646f
7 changed files with 27 additions and 86 deletions
|
|
@ -550,11 +550,9 @@ defmodule Mv.Membership.Member do
|
|||
end,
|
||||
where: [action_is([:create_member, :update_member])]
|
||||
|
||||
# Validate member fields that are marked as required in settings or by Vereinfacht.
|
||||
# When settings cannot be loaded, we still enforce email + Vereinfacht-required fields.
|
||||
# Validate member fields that are marked as required in settings.
|
||||
# When settings cannot be loaded, enforce only email.
|
||||
validate fn changeset, _context ->
|
||||
vereinfacht_required? = Mv.Config.vereinfacht_configured?()
|
||||
|
||||
required_fields =
|
||||
case Mv.Membership.get_settings() do
|
||||
{:ok, settings} ->
|
||||
|
|
@ -562,20 +560,17 @@ defmodule Mv.Membership.Member do
|
|||
normalized = VisibilityConfig.normalize(required_config)
|
||||
|
||||
Enum.filter(Mv.Constants.member_fields(), fn field ->
|
||||
field == :email ||
|
||||
(vereinfacht_required? && Mv.Constants.vereinfacht_required_field?(field)) ||
|
||||
Map.get(normalized, field, false)
|
||||
field == :email || Map.get(normalized, field, false)
|
||||
end)
|
||||
|
||||
{:error, reason} ->
|
||||
Logger.warning(
|
||||
"Member required-fields validation: could not load settings (#{inspect(reason)}). " <>
|
||||
"Enforcing only email and Vereinfacht-required fields."
|
||||
"Enforcing only email."
|
||||
)
|
||||
|
||||
Enum.filter(Mv.Constants.member_fields(), fn field ->
|
||||
field == :email ||
|
||||
(vereinfacht_required? && Mv.Constants.vereinfacht_required_field?(field))
|
||||
field == :email
|
||||
end)
|
||||
end
|
||||
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ defmodule MvWeb.MemberFieldLive.FormComponent do
|
|||
assigns
|
||||
|> assign(:field_attributes, get_field_attributes(assigns.member_field))
|
||||
|> assign(:is_email_field?, assigns.member_field == :email)
|
||||
|> assign(:vereinfacht_required_field?, vereinfacht_required_field?(assigns))
|
||||
|> assign(:field_label, MemberFields.label(assigns.member_field))
|
||||
|
||||
~H"""
|
||||
|
|
@ -120,22 +119,12 @@ defmodule MvWeb.MemberFieldLive.FormComponent do
|
|||
|
||||
<%!-- Line break before Required / Show in overview block --%>
|
||||
<div class="mt-4">
|
||||
<%!-- Required: disabled for email (always required) or Vereinfacht-required fields when integration is active --%>
|
||||
<%!-- Required: disabled for email (always required); else configurable in settings --%>
|
||||
<div
|
||||
:if={@is_email_field? or @vereinfacht_required_field?}
|
||||
:if={@is_email_field?}
|
||||
class="tooltip tooltip-right"
|
||||
data-tip={
|
||||
if(@is_email_field?,
|
||||
do: gettext("This is a technical field and cannot be changed"),
|
||||
else: gettext("Required for Vereinfacht integration and cannot be disabled.")
|
||||
)
|
||||
}
|
||||
aria-label={
|
||||
if(@is_email_field?,
|
||||
do: gettext("This is a technical field and cannot be changed"),
|
||||
else: gettext("Required for Vereinfacht integration and cannot be disabled.")
|
||||
)
|
||||
}
|
||||
data-tip={gettext("This is a technical field and cannot be changed")}
|
||||
aria-label={gettext("This is a technical field and cannot be changed")}
|
||||
>
|
||||
<fieldset class="mb-2 fieldset">
|
||||
<label>
|
||||
|
|
@ -164,7 +153,7 @@ defmodule MvWeb.MemberFieldLive.FormComponent do
|
|||
</fieldset>
|
||||
</div>
|
||||
<.input
|
||||
:if={not @is_email_field? and not @vereinfacht_required_field?}
|
||||
:if={not @is_email_field?}
|
||||
field={@form[:required]}
|
||||
type="checkbox"
|
||||
label={gettext("Required")}
|
||||
|
|
@ -211,12 +200,11 @@ defmodule MvWeb.MemberFieldLive.FormComponent do
|
|||
end
|
||||
|
||||
required =
|
||||
socket.assigns.vereinfacht_required_field? ||
|
||||
if Map.has_key?(member_field_params, "required") do
|
||||
TypeParsers.parse_boolean(member_field_params["required"])
|
||||
else
|
||||
form.source["required"]
|
||||
end
|
||||
if Map.has_key?(member_field_params, "required") do
|
||||
TypeParsers.parse_boolean(member_field_params["required"])
|
||||
else
|
||||
form.source["required"]
|
||||
end
|
||||
|
||||
# Merge so we keep name/value_type and have current checkbox state; use as new form source
|
||||
merged_source =
|
||||
|
|
@ -247,12 +235,11 @@ defmodule MvWeb.MemberFieldLive.FormComponent do
|
|||
end
|
||||
|
||||
required =
|
||||
socket.assigns.vereinfacht_required_field? ||
|
||||
if Map.has_key?(member_field_params, "required") do
|
||||
TypeParsers.parse_boolean(member_field_params["required"])
|
||||
else
|
||||
form.source["required"]
|
||||
end
|
||||
if Map.has_key?(member_field_params, "required") do
|
||||
TypeParsers.parse_boolean(member_field_params["required"])
|
||||
else
|
||||
form.source["required"]
|
||||
end
|
||||
|
||||
field_string = Atom.to_string(socket.assigns.member_field)
|
||||
|
||||
|
|
@ -292,20 +279,10 @@ defmodule MvWeb.MemberFieldLive.FormComponent do
|
|||
normalized_visibility = VisibilityConfig.normalize(visibility_config)
|
||||
normalized_required = VisibilityConfig.normalize(required_config)
|
||||
show_in_overview = Map.get(normalized_visibility, member_field, true)
|
||||
vereinfacht_required? = Mv.Config.vereinfacht_configured?()
|
||||
# Persist in socket so validate/save can enforce server-side without relying on render assigns
|
||||
socket =
|
||||
assign(
|
||||
socket,
|
||||
:vereinfacht_required_field?,
|
||||
vereinfacht_required_field?(%{member_field: member_field})
|
||||
)
|
||||
|
||||
# Email always required; Vereinfacht-required fields when integration active; else from settings
|
||||
# Email always required; else from settings
|
||||
required =
|
||||
member_field == :email ||
|
||||
(vereinfacht_required? && Mv.Constants.vereinfacht_required_field?(member_field)) ||
|
||||
Map.get(normalized_required, member_field, false)
|
||||
member_field == :email || Map.get(normalized_required, member_field, false)
|
||||
|
||||
form_data = %{
|
||||
"name" => MemberFields.label(member_field),
|
||||
|
|
@ -338,9 +315,4 @@ defmodule MvWeb.MemberFieldLive.FormComponent do
|
|||
defp format_error(error) do
|
||||
inspect(error)
|
||||
end
|
||||
|
||||
defp vereinfacht_required_field?(assigns) do
|
||||
Mv.Config.vereinfacht_configured?() &&
|
||||
Mv.Constants.vereinfacht_required_field?(assigns.member_field)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -172,19 +172,15 @@ defmodule MvWeb.MemberFieldLive.IndexComponent do
|
|||
member_fields = Mv.Constants.member_fields()
|
||||
visibility_config = settings.member_field_visibility || %{}
|
||||
required_config = settings.member_field_required || %{}
|
||||
vereinfacht_required? = Mv.Config.vereinfacht_configured?()
|
||||
|
||||
normalized_visibility = VisibilityConfig.normalize(visibility_config)
|
||||
normalized_required = VisibilityConfig.normalize(required_config)
|
||||
|
||||
Enum.map(member_fields, fn field ->
|
||||
show_in_overview = Map.get(normalized_visibility, field, true)
|
||||
|
||||
# Email always required; Vereinfacht-required fields when integration active; else from settings
|
||||
# Email always required; else from settings
|
||||
required =
|
||||
field == :email ||
|
||||
(vereinfacht_required? && Mv.Constants.vereinfacht_required_field?(field)) ||
|
||||
Map.get(normalized_required, field, false)
|
||||
field == :email || Map.get(normalized_required, field, false)
|
||||
|
||||
attribute = Info.attribute(Mv.Membership.Member, field)
|
||||
|
||||
|
|
|
|||
|
|
@ -398,8 +398,6 @@ defmodule MvWeb.MemberLive.Form do
|
|||
end
|
||||
|
||||
defp get_member_field_required_map do
|
||||
vereinfacht_required? = Mv.Config.vereinfacht_configured?()
|
||||
|
||||
case Membership.get_settings() do
|
||||
{:ok, settings} ->
|
||||
required_config = settings.member_field_required || %{}
|
||||
|
|
@ -407,20 +405,15 @@ defmodule MvWeb.MemberLive.Form do
|
|||
|
||||
Mv.Constants.member_fields()
|
||||
|> Enum.map(fn field ->
|
||||
required =
|
||||
field == :email ||
|
||||
(vereinfacht_required? && Mv.Constants.vereinfacht_required_field?(field)) ||
|
||||
Map.get(normalized, field, false)
|
||||
|
||||
required = field == :email || Map.get(normalized, field, false)
|
||||
{field, required}
|
||||
end)
|
||||
|> Map.new()
|
||||
|
||||
{:error, _} ->
|
||||
# Email always required; Vereinfacht fields when integration active
|
||||
# When settings cannot be loaded, only email is required
|
||||
Map.new(Mv.Constants.member_fields(), fn f ->
|
||||
{f,
|
||||
f == :email || (vereinfacht_required? && Mv.Constants.vereinfacht_required_field?(f))}
|
||||
{f, f == :email}
|
||||
end)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue