From e899cc738fd42ad6dd1ef8e2279876f8fbd2b3c0 Mon Sep 17 00:00:00 2001 From: Moritz Date: Wed, 4 Mar 2026 19:22:41 +0100 Subject: [PATCH] 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 --- lib/membership/member.ex | 15 ++--- .../live/member_field_live/form_component.ex | 62 +++++-------------- .../live/member_field_live/index_component.ex | 8 +-- lib/mv_web/live/member_live/form.ex | 13 +--- priv/gettext/de/LC_MESSAGES/default.po | 5 -- priv/gettext/default.pot | 5 -- priv/gettext/en/LC_MESSAGES/default.po | 5 -- 7 files changed, 27 insertions(+), 86 deletions(-) diff --git a/lib/membership/member.ex b/lib/membership/member.ex index be99b7f..4e85fa8 100644 --- a/lib/membership/member.ex +++ b/lib/membership/member.ex @@ -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 diff --git a/lib/mv_web/live/member_field_live/form_component.ex b/lib/mv_web/live/member_field_live/form_component.ex index 5085b8b..84889e5 100644 --- a/lib/mv_web/live/member_field_live/form_component.ex +++ b/lib/mv_web/live/member_field_live/form_component.ex @@ -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 --%>
- <%!-- Required: disabled for email (always required) or Vereinfacht-required fields when integration is active --%> + <%!-- Required: disabled for email (always required); else configurable in settings --%>
<.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 diff --git a/lib/mv_web/live/member_field_live/index_component.ex b/lib/mv_web/live/member_field_live/index_component.ex index 97dc9ff..2285d90 100644 --- a/lib/mv_web/live/member_field_live/index_component.ex +++ b/lib/mv_web/live/member_field_live/index_component.ex @@ -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) diff --git a/lib/mv_web/live/member_live/form.ex b/lib/mv_web/live/member_live/form.ex index abb29e3..6d187fa 100644 --- a/lib/mv_web/live/member_live/form.ex +++ b/lib/mv_web/live/member_live/form.ex @@ -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 diff --git a/priv/gettext/de/LC_MESSAGES/default.po b/priv/gettext/de/LC_MESSAGES/default.po index 904386a..982798d 100644 --- a/priv/gettext/de/LC_MESSAGES/default.po +++ b/priv/gettext/de/LC_MESSAGES/default.po @@ -2820,11 +2820,6 @@ msgstr "Okt." msgid "Sep." msgstr "Sep." -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Required for Vereinfacht integration and cannot be disabled." -msgstr "Für die Vereinfacht-Integration erforderlich und kann nicht deaktiviert werden." - #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 8f66f55..5b6ef4c 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -2820,11 +2820,6 @@ msgstr "" msgid "Sep." msgstr "" -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Required for Vereinfacht integration and cannot be disabled." -msgstr "" - #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format diff --git a/priv/gettext/en/LC_MESSAGES/default.po b/priv/gettext/en/LC_MESSAGES/default.po index b8186ff..a566be0 100644 --- a/priv/gettext/en/LC_MESSAGES/default.po +++ b/priv/gettext/en/LC_MESSAGES/default.po @@ -2820,11 +2820,6 @@ msgstr "" msgid "Sep." msgstr "" -#: lib/mv_web/live/member_field_live/form_component.ex -#, elixir-autogen, elixir-format -msgid "Required for Vereinfacht integration and cannot be disabled." -msgstr "Required for Vereinfacht integration and cannot be disabled." - #: lib/mv_web/live/member_live/index.html.heex #: lib/mv_web/translations/member_fields.ex #, elixir-autogen, elixir-format