diff options
| author | Maxim Filippov <colixer@gmail.com> | 2019-10-04 19:00:58 +0300 | 
|---|---|---|
| committer | Maxim Filippov <colixer@gmail.com> | 2019-10-04 19:00:58 +0300 | 
| commit | 8dcc2f9f5ecbbc81bc026c85582695de4fbc1a0f (patch) | |
| tree | cbc478b557f43d05b2df76ab76cbe7549ab16b83 /lib | |
| parent | 795ea5dfc2549b50265cea2f7b7a774356a735b4 (diff) | |
| download | pleroma-8dcc2f9f5ecbbc81bc026c85582695de4fbc1a0f.tar.gz pleroma-8dcc2f9f5ecbbc81bc026c85582695de4fbc1a0f.zip | |
Admin API: Allow changing the state of multiple reports at once
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/web/activity_pub/utils.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/web/admin_api/admin_api_controller.ex | 29 | ||||
| -rw-r--r-- | lib/pleroma/web/common_api/common_api.ex | 7 | ||||
| -rw-r--r-- | lib/pleroma/web/router.ex | 2 | 
4 files changed, 39 insertions, 11 deletions
| diff --git a/lib/pleroma/web/activity_pub/utils.ex b/lib/pleroma/web/activity_pub/utils.ex index 0828591ee..824957314 100644 --- a/lib/pleroma/web/activity_pub/utils.ex +++ b/lib/pleroma/web/activity_pub/utils.ex @@ -672,6 +672,18 @@ defmodule Pleroma.Web.ActivityPub.Utils do      |> Repo.update()    end +  def update_report_state(activity_ids, state) when state in @supported_report_states do +    activities_num = length(activity_ids) + +    from(a in Activity, where: a.id in ^activity_ids) +    |> update(set: [data: fragment("jsonb_set(data, '{state}', ?)", ^state)]) +    |> Repo.update_all([]) +    |> case do +      {^activities_num, _} -> :ok +      _ -> {:error, activity_ids} +    end +  end +    def update_report_state(_, _), do: {:error, "Unsupported state"}    def update_activity_visibility(activity, visibility) when visibility in @valid_visibilities do diff --git a/lib/pleroma/web/admin_api/admin_api_controller.ex b/lib/pleroma/web/admin_api/admin_api_controller.ex index 21da8a7ff..0e8c9dac8 100644 --- a/lib/pleroma/web/admin_api/admin_api_controller.ex +++ b/lib/pleroma/web/admin_api/admin_api_controller.ex @@ -480,17 +480,26 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do      end    end -  def report_update_state(%{assigns: %{user: admin}} = conn, %{"id" => id, "state" => state}) do -    with {:ok, report} <- CommonAPI.update_report_state(id, state) do -      ModerationLog.insert_log(%{ -        action: "report_update", -        actor: admin, -        subject: report -      }) +  def reports_update(%{assigns: %{user: admin}} = conn, %{"reports" => reports}) do +    result = +      reports +      |> Enum.map(fn report -> +        with {:ok, activity} <- CommonAPI.update_report_state(report["id"], report["state"]) do +          ModerationLog.insert_log(%{ +            action: "report_update", +            actor: admin, +            subject: activity +          }) + +          activity +        else +          {:error, message} -> %{id: report["id"], error: message} +        end +      end) -      conn -      |> put_view(ReportView) -      |> render("show.json", Report.extract_report_info(report)) +    case Enum.any?(result, &Map.has_key?(&1, :error)) do +      true -> json_response(conn, :bad_request, result) +      false -> json_response(conn, :no_content, "")      end    end diff --git a/lib/pleroma/web/common_api/common_api.ex b/lib/pleroma/web/common_api/common_api.ex index ce73b3270..2b80598ea 100644 --- a/lib/pleroma/web/common_api/common_api.ex +++ b/lib/pleroma/web/common_api/common_api.ex @@ -346,6 +346,13 @@ defmodule Pleroma.Web.CommonAPI do      end    end +  def update_report_state(activity_ids, state) when is_list(activity_ids) do +    case Utils.update_report_state(activity_ids, state) do +      :ok -> {:ok, activity_ids} +      _ -> {:error, dgettext("errors", "Could not update state")} +    end +  end +    def update_report_state(activity_id, state) do      with %Activity{} = activity <- Activity.get_by_id(activity_id) do        Utils.update_report_state(activity, state) diff --git a/lib/pleroma/web/router.ex b/lib/pleroma/web/router.ex index f91af8137..563b01dc5 100644 --- a/lib/pleroma/web/router.ex +++ b/lib/pleroma/web/router.ex @@ -194,7 +194,7 @@ defmodule Pleroma.Web.Router do      get("/reports", AdminAPIController, :list_reports)      get("/reports/:id", AdminAPIController, :report_show) -    put("/reports/:id", AdminAPIController, :report_update_state) +    patch("/reports", AdminAPIController, :reports_update)      post("/reports/:id/respond", AdminAPIController, :report_respond)      put("/statuses/:id", AdminAPIController, :status_update) | 
