+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
defmodule Pleroma.Web do
@moduledoc """
A module that keeps using definitions for controllers,
quote do
use Phoenix.Controller, namespace: Pleroma.Web
import Plug.Conn
- import Pleroma.Web.Router.Helpers
- import Pleroma.Web.Gettext
+ import Pleroma.Web.{Gettext, Router.Helpers}
end
end
def view do
quote do
- use Phoenix.View, root: "lib/pleroma/web/templates",
- namespace: Pleroma.Web
+ use Phoenix.View,
+ root: "lib/pleroma/web/templates",
+ namespace: Pleroma.Web
# Import convenience functions from controllers
import Phoenix.Controller, only: [get_csrf_token: 0, get_flash: 2, view_module: 1]
- import Pleroma.Web.Router.Helpers
- import Pleroma.Web.ErrorHelpers
- import Pleroma.Web.Gettext
+ import Pleroma.Web.{ErrorHelpers, Gettext, Router.Helpers}
+
+ require Logger
+
+ @doc "Same as `render/3` but wrapped in a rescue block"
+ def safe_render(view, template, assigns \\ %{}) do
+ Phoenix.View.render(view, template, assigns)
+ rescue
+ error ->
+ Logger.error(
+ "#{__MODULE__} failed to render #{inspect({view, template})}: #{inspect(error)}"
+ )
+
+ Logger.error(inspect(__STACKTRACE__))
+ nil
+ end
+
+ @doc """
+ Same as `render_many/4` but wrapped in rescue block.
+ """
+ def safe_render_many(collection, view, template, assigns \\ %{}) do
+ Enum.map(collection, fn resource ->
+ as = Map.get(assigns, :as) || view.__resource__
+ assigns = Map.put(assigns, as, resource)
+ safe_render(view, template, assigns)
+ end)
+ |> Enum.filter(& &1)
+ end
end
end
defmacro __using__(which) when is_atom(which) do
apply(__MODULE__, which, [])
end
+
+ def base_url do
+ Pleroma.Web.Endpoint.url()
+ end
end