diff --git a/lib/who_need_help_web/live/admin_user_live.ex b/lib/who_need_help_web/live/admin_user_live.ex index 4b774fc..a48298a 100644 --- a/lib/who_need_help_web/live/admin_user_live.ex +++ b/lib/who_need_help_web/live/admin_user_live.ex @@ -32,10 +32,6 @@ defmodule WhoNeedHelpWeb.AdminUserLive do ) end - def handle_event("validate-moderation", %{"moderation" => params}, socket) do - {:noreply, assign(socket, :moderation_form, to_form(params, as: :moderation))} - end - def handle_event("set-staff-roles", %{"staff" => params}, socket) do roles = params |> Map.get("roles", []) |> List.wrap() |> Enum.reject(&(&1 == "")) @@ -181,7 +177,6 @@ defmodule WhoNeedHelpWeb.AdminUserLive do :if={can_moderate?(@current_scope.user, @user)} for={@moderation_form} id={"moderate-user-#{@user.id}"} - phx-change="validate-moderation" phx-submit="moderate-user" class="mt-4 space-y-4" > diff --git a/priv/gettext/default.pot b/priv/gettext/default.pot index 529e1e1..be61d37 100644 --- a/priv/gettext/default.pot +++ b/priv/gettext/default.pot @@ -205,8 +205,8 @@ msgstr "" msgid "Action center" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:113 -#: lib/who_need_help_web/live/admin_user_live.ex:193 +#: lib/who_need_help_web/live/admin_user_live.ex:109 +#: lib/who_need_help_web/live/admin_user_live.ex:188 #: lib/who_need_help_web/live/admin_users_live.ex:125 #: lib/who_need_help_web/live/admin_users_live.ex:185 #: lib/who_need_help_web/live/notification_live.ex:521 @@ -264,7 +264,7 @@ msgid "Add unverified link" msgstr "" #: lib/who_need_help_web/live/admin_dashboard_live.ex:135 -#: lib/who_need_help_web/live/admin_user_live.ex:102 +#: lib/who_need_help_web/live/admin_user_live.ex:98 #: lib/who_need_help_web/live/admin_users_live.ex:123 #, elixir-autogen, elixir-format msgid "Administrator" @@ -891,7 +891,7 @@ msgstr "" msgid "Interface language" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:201 +#: lib/who_need_help_web/live/admin_user_live.ex:196 #, elixir-autogen, elixir-format msgid "Internal note" msgstr "" @@ -1060,7 +1060,7 @@ msgid "Moderation" msgstr "" #: lib/who_need_help_web/live/admin_dashboard_live.ex:132 -#: lib/who_need_help_web/live/admin_user_live.ex:99 +#: lib/who_need_help_web/live/admin_user_live.ex:95 #: lib/who_need_help_web/live/admin_users_live.ex:120 #, elixir-autogen, elixir-format msgid "Moderator" @@ -1549,8 +1549,8 @@ msgstr "" msgid "Resolved" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:114 -#: lib/who_need_help_web/live/admin_user_live.ex:194 +#: lib/who_need_help_web/live/admin_user_live.ex:110 +#: lib/who_need_help_web/live/admin_user_live.ex:189 #: lib/who_need_help_web/live/admin_users_live.ex:126 #: lib/who_need_help_web/live/admin_users_live.ex:186 #, elixir-autogen, elixir-format @@ -1759,7 +1759,7 @@ msgstr "" msgid "Starts" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:191 +#: lib/who_need_help_web/live/admin_user_live.ex:186 #: lib/who_need_help_web/live/admin_users_live.ex:236 #: lib/who_need_help_web/live/moderation_live.ex:632 #: lib/who_need_help_web/live/moderation_live.ex:812 @@ -1792,8 +1792,8 @@ msgstr "" msgid "Submit review" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:115 -#: lib/who_need_help_web/live/admin_user_live.ex:195 +#: lib/who_need_help_web/live/admin_user_live.ex:111 +#: lib/who_need_help_web/live/admin_user_live.ex:190 #: lib/who_need_help_web/live/admin_users_live.ex:127 #: lib/who_need_help_web/live/admin_users_live.ex:187 #, elixir-autogen, elixir-format @@ -2795,7 +2795,7 @@ msgstr "" #: lib/who_need_help_web/controllers/support_html.ex:6 #: lib/who_need_help_web/controllers/support_html/new.html.heex:32 -#: lib/who_need_help_web/live/admin_user_live.ex:174 +#: lib/who_need_help_web/live/admin_user_live.ex:170 #: lib/who_need_help_web/live/support_operation_live.ex:140 #: lib/who_need_help_web/live/support_operations_live.ex:244 #: lib/who_need_help_web/live/support_operations_live.ex:395 @@ -3232,7 +3232,7 @@ msgstr "" #: lib/who_need_help_web/components/admin_components.ex:166 #: lib/who_need_help_web/components/layouts.ex:197 #: lib/who_need_help_web/live/admin_dashboard_live.ex:131 -#: lib/who_need_help_web/live/admin_user_live.ex:98 +#: lib/who_need_help_web/live/admin_user_live.ex:94 #: lib/who_need_help_web/live/admin_users_live.ex:119 #: lib/who_need_help_web/live/support_operations_live.ex:340 #, elixir-autogen, elixir-format @@ -5447,7 +5447,7 @@ msgstr "" msgid "Safety guidance for voluntary help, medicine pickup, roadside requests, location sharing, and in-person activities." msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:205 +#: lib/who_need_help_web/live/admin_user_live.ex:200 #: lib/who_need_help_web/live/support_operation_live.ex:335 #: lib/who_need_help_web/live/support_operation_live.ex:438 #, elixir-autogen, elixir-format @@ -6777,7 +6777,7 @@ msgstr[1] "" msgid "A single starting point for users, support, safety, legal work, analytics, roles, and audited staff actions." msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:222 +#: lib/who_need_help_web/live/admin_user_live.ex:217 #, elixir-autogen, elixir-format msgid "A staff member may hold several fixed roles." msgstr "" @@ -6828,7 +6828,7 @@ msgstr "" msgid "All metrics" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:111 +#: lib/who_need_help_web/live/admin_user_live.ex:107 #, elixir-autogen, elixir-format msgid "All permissions, staff roles, and audit log" msgstr "" @@ -6839,7 +6839,7 @@ msgid "An account may hold several roles. Permissions are the union of those rol msgstr "" #: lib/who_need_help_web/live/admin_dashboard_live.ex:134 -#: lib/who_need_help_web/live/admin_user_live.ex:101 +#: lib/who_need_help_web/live/admin_user_live.ex:97 #: lib/who_need_help_web/live/admin_users_live.ex:122 #, elixir-autogen, elixir-format msgid "Analyst" @@ -6948,7 +6948,7 @@ msgstr "" msgid "Back to queue" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:140 +#: lib/who_need_help_web/live/admin_user_live.ex:136 #, elixir-autogen, elixir-format msgid "Back to users" msgstr "" @@ -6958,7 +6958,7 @@ msgstr "" msgid "Chat message" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:95 +#: lib/who_need_help_web/live/admin_user_live.ex:91 #, elixir-autogen, elixir-format msgid "Check the status and internal note." msgstr "" @@ -6973,7 +6973,7 @@ msgstr "" msgid "Content locations" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:109 +#: lib/who_need_help_web/live/admin_user_live.ex:105 #, elixir-autogen, elixir-format msgid "Content-removal and legal notice queue" msgstr "" @@ -7055,7 +7055,7 @@ msgid "Joined %{date}" msgstr "" #: lib/who_need_help_web/live/admin_dashboard_live.ex:133 -#: lib/who_need_help_web/live/admin_user_live.ex:100 +#: lib/who_need_help_web/live/admin_user_live.ex:96 #: lib/who_need_help_web/live/admin_users_live.ex:121 #, elixir-autogen, elixir-format msgid "Legal" @@ -7099,7 +7099,7 @@ msgid "Manage %{name}" msgstr "" #: lib/who_need_help_web/live/admin_user_live.ex:20 -#: lib/who_need_help_web/live/admin_user_live.ex:135 +#: lib/who_need_help_web/live/admin_user_live.ex:131 #, elixir-autogen, elixir-format msgid "Manage user" msgstr "" @@ -7179,7 +7179,7 @@ msgstr "" msgid "Notice" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:93 +#: lib/who_need_help_web/live/admin_user_live.ex:89 #, elixir-autogen, elixir-format msgid "One or more staff roles are invalid." msgstr "" @@ -7189,7 +7189,7 @@ msgstr "" msgid "One row per date, metric, and non-identifying dimension." msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:267 +#: lib/who_need_help_web/live/admin_user_live.ex:262 #, elixir-autogen, elixir-format msgid "Only administrators can change staff roles." msgstr "" @@ -7245,7 +7245,7 @@ msgstr "" msgid "Previous" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:110 +#: lib/who_need_help_web/live/admin_user_live.ex:106 #, elixir-autogen, elixir-format msgid "Privacy-preserving aggregate product analytics" msgstr "" @@ -7320,14 +7320,14 @@ msgstr "" msgid "Registrations" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:159 +#: lib/who_need_help_web/live/admin_user_live.ex:155 #: lib/who_need_help_web/live/admin_users_live.ex:263 #: lib/who_need_help_web/live/admin_users_live.ex:304 #, elixir-autogen, elixir-format msgid "Regular user" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:107 +#: lib/who_need_help_web/live/admin_user_live.ex:103 #, elixir-autogen, elixir-format msgid "Reports, safety signals, user restrictions, and categories" msgstr "" @@ -7347,7 +7347,7 @@ msgstr "" msgid "Requests created" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:176 +#: lib/who_need_help_web/live/admin_user_live.ex:172 #, elixir-autogen, elixir-format msgid "Restrict or suspend access and record an internal reason." msgstr "" @@ -7357,7 +7357,7 @@ msgstr "" msgid "Restricted workspace" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:136 +#: lib/who_need_help_web/live/admin_user_live.ex:132 #, elixir-autogen, elixir-format msgid "Review account access and staff permissions for one user." msgstr "" @@ -7415,7 +7415,7 @@ msgstr "" msgid "SUBMISSION SAVED" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:206 +#: lib/who_need_help_web/live/admin_user_live.ex:201 #, elixir-autogen, elixir-format msgid "Save account status" msgstr "" @@ -7472,13 +7472,13 @@ msgstr "" msgid "Staff role" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:220 -#: lib/who_need_help_web/live/admin_user_live.ex:234 +#: lib/who_need_help_web/live/admin_user_live.ex:215 +#: lib/who_need_help_web/live/admin_user_live.ex:229 #, elixir-autogen, elixir-format msgid "Staff roles" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:45 +#: lib/who_need_help_web/live/admin_user_live.ex:41 #, elixir-autogen, elixir-format msgid "Staff roles updated." msgstr "" @@ -7513,7 +7513,7 @@ msgstr "" msgid "Support and legal operations" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:104 +#: lib/who_need_help_web/live/admin_user_live.ex:100 #, elixir-autogen, elixir-format msgid "Support conversations and verified support cases" msgstr "" @@ -7543,19 +7543,19 @@ msgstr "" msgid "Technical signal metadata" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:96 +#: lib/who_need_help_web/live/admin_user_live.ex:92 #, elixir-autogen, elixir-format msgid "The account could not be updated." msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:91 +#: lib/who_need_help_web/live/admin_user_live.ex:87 #, elixir-autogen, elixir-format msgid "The last active administrator cannot lose administrator access or be restricted." msgstr "" #: lib/who_need_help_web/live/admin_user_live.ex:14 -#: lib/who_need_help_web/live/admin_user_live.ex:57 -#: lib/who_need_help_web/live/admin_user_live.ex:94 +#: lib/who_need_help_web/live/admin_user_live.ex:53 +#: lib/who_need_help_web/live/admin_user_live.ex:90 #, elixir-autogen, elixir-format msgid "The selected account is no longer available." msgstr "" @@ -7610,13 +7610,13 @@ msgstr "" msgid "Unknown staff member" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:148 +#: lib/who_need_help_web/live/admin_user_live.ex:144 #: lib/who_need_help_web/live/admin_users_live.ex:129 #, elixir-autogen, elixir-format msgid "Unnamed user" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:259 +#: lib/who_need_help_web/live/admin_user_live.ex:254 #, elixir-autogen, elixir-format msgid "Update staff roles" msgstr "" @@ -7626,7 +7626,7 @@ msgstr "" msgid "Update status, assignment, and optionally reply." msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:257 +#: lib/who_need_help_web/live/admin_user_live.ex:252 #, elixir-autogen, elixir-format msgid "Updating…" msgstr "" @@ -7688,12 +7688,12 @@ msgstr "" msgid "Write the decision, next step, or information you need…" msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:214 +#: lib/who_need_help_web/live/admin_user_live.ex:209 #, elixir-autogen, elixir-format msgid "You can view this account but cannot change its access." msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:87 +#: lib/who_need_help_web/live/admin_user_live.ex:83 #, elixir-autogen, elixir-format msgid "You cannot restrict or suspend your own account." msgstr "" @@ -7709,7 +7709,7 @@ msgstr "" msgid "You do not have permission for this action." msgstr "" -#: lib/who_need_help_web/live/admin_user_live.ex:82 +#: lib/who_need_help_web/live/admin_user_live.ex:78 #, elixir-autogen, elixir-format msgid "You do not have permission for this action. Role changes also require a recent sign-in." msgstr "" diff --git a/test/who_need_help_web/live/admin_live_test.exs b/test/who_need_help_web/live/admin_live_test.exs index 987036d..d2aa33d 100644 --- a/test/who_need_help_web/live/admin_live_test.exs +++ b/test/who_need_help_web/live/admin_live_test.exs @@ -64,27 +64,26 @@ defmodule WhoNeedHelpWeb.AdminLiveTest do {:ok, user_view, html} = live(conn, ~p"/admin/users/#{target.id}") assert html =~ "Account under review" assert has_element?(user_view, "#staff-roles-#{target.id}") + refute has_element?(user_view, "#moderate-user-#{target.id}[phx-change]") user_view |> form("#moderate-user-#{target.id}", %{ "moderation" => %{ "moderation_status" => "restricted", - "moderation_note" => "Unsaved review note" + "moderation_note" => "Confirmed restricted account" } }) - |> render_change() + |> render_submit() + + restricted = Repo.reload!(target) + assert restricted.moderation_status == :restricted + assert restricted.moderation_note == "Confirmed restricted account" assert has_element?( user_view, "#moderate-user-#{target.id} option[value='restricted'][selected]" ) - assert has_element?( - user_view, - "#moderate-user-#{target.id} textarea", - "Unsaved review note" - ) - user_view |> form("#staff-roles-#{target.id}", %{ "staff" => %{"roles" => ["support", "moderator"]} @@ -106,17 +105,19 @@ defmodule WhoNeedHelpWeb.AdminLiveTest do assert Repo.reload!(target).moderation_status == :suspended assert Repo.exists?( - from event in AuditEvent, + from(event in AuditEvent, where: event.actor_id == ^admin.id and event.target_id == ^target.id and event.action == "user.staff_roles_changed" + ) ) assert Repo.exists?( - from event in AuditEvent, + from(event in AuditEvent, where: event.actor_id == ^admin.id and event.target_id == ^target.id and event.action == "user.moderated" + ) ) {:ok, _audit_view, audit_html} = live(conn, ~p"/admin/audit")