diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/pleroma/user.ex | 12 | ||||
| -rw-r--r-- | lib/pleroma/user/query.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/api_spec/schemas/account.ex | 2 | ||||
| -rw-r--r-- | lib/pleroma/web/mastodon_api/views/account_view.ex | 26 | ||||
| -rw-r--r-- | lib/pleroma/web/pleroma_api/controllers/account_controller.ex | 2 | 
5 files changed, 35 insertions, 9 deletions
diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex index cb7740292..5655762ac 100644 --- a/lib/pleroma/user.ex +++ b/lib/pleroma/user.ex @@ -535,7 +535,8 @@ defmodule Pleroma.User do          :actor_type,          :accepts_chat_messages,          :disclose_client, -        :birth_date +        :birth_date, +        :hide_birth_date        ]      )      |> validate_min_age() @@ -2583,4 +2584,13 @@ defmodule Pleroma.User do        _ -> {:error, user}      end    end + +  def get_friends_birthdays_query(%User{} = user, day, month) do +    User.Query.build(%{ +      friends: user, +      deactivated: false, +      birth_day: day, +      birth_month: month +    }) +  end  end diff --git a/lib/pleroma/user/query.ex b/lib/pleroma/user/query.ex index 9e594013a..ea1706c9e 100644 --- a/lib/pleroma/user/query.ex +++ b/lib/pleroma/user/query.ex @@ -234,12 +234,14 @@ defmodule Pleroma.User.Query do    defp compose_query({:birth_day, day}, query) do      query +    |> where([u], u.hide_birth_date == false)      |> where([u], not is_nil(u.birth_date))      |> where([u], fragment("date_part('day', ?)", u.birth_date) == ^day)    end    defp compose_query({:birth_month, month}, query) do      query +    |> where([u], u.hide_birth_date == false)      |> where([u], not is_nil(u.birth_date))      |> where([u], fragment("date_part('month', ?)", u.birth_date) == ^month)    end diff --git a/lib/pleroma/web/api_spec/schemas/account.ex b/lib/pleroma/web/api_spec/schemas/account.ex index a20964342..3796bccfd 100644 --- a/lib/pleroma/web/api_spec/schemas/account.ex +++ b/lib/pleroma/web/api_spec/schemas/account.ex @@ -54,7 +54,7 @@ defmodule Pleroma.Web.ApiSpec.Schemas.Account do              description:                "whether the user account is waiting on email confirmation to be activated"            }, -          hide_birth_date: %Schema{type: :boolean}, +          hide_birth_date: %Schema{type: :boolean, nullable: true},            hide_favorites: %Schema{type: :boolean},            hide_followers_count: %Schema{              type: :boolean, diff --git a/lib/pleroma/web/mastodon_api/views/account_view.ex b/lib/pleroma/web/mastodon_api/views/account_view.ex index f42d13aa6..07b3c776f 100644 --- a/lib/pleroma/web/mastodon_api/views/account_view.ex +++ b/lib/pleroma/web/mastodon_api/views/account_view.ex @@ -249,11 +249,6 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do          nil        end -    birth_date = -      if !user.hide_birth_date or opts[:for] == user, -        do: user.birth_date, -        else: nil -      %{        id: to_string(user.id),        username: username_from_nickname(user.nickname), @@ -303,7 +298,8 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do          background_image: image_url(user.background) |> MediaProxy.url(),          accepts_chat_messages: user.accepts_chat_messages,          favicon: favicon, -        birth_date: birth_date +        birth_date: user.birth_date, +        hide_birth_date: user.hide_birth_date        }      }      |> maybe_put_role(user, opts[:for]) @@ -317,6 +313,7 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do      |> maybe_put_unread_conversation_count(user, opts[:for])      |> maybe_put_unread_notification_count(user, opts[:for])      |> maybe_put_email_address(user, opts[:for]) +    |> maybe_hide_birth_date(user, opts[:for])    end    defp username_from_nickname(string) when is_binary(string) do @@ -438,6 +435,23 @@ defmodule Pleroma.Web.MastodonAPI.AccountView do    defp maybe_put_email_address(data, _, _), do: data +  defp maybe_hide_birth_date(data, %User{id: user_id}, %User{id: user_id}) do +    data +  end + +  defp maybe_hide_birth_date(data, %User{hide_birth_date: true}, _) do +    data +    |> Kernel.pop_in([:pleroma, :birth_date]) +    |> Kernel.pop_in([:pleroma, :hide_birth_date]) +    |> elem(1) +  end + +  defp maybe_hide_birth_date(data, _, _) do +    data +    |> Kernel.pop_in([:pleroma, :hide_birth_date]) +    |> elem(1) +  end +    defp image_url(%{"url" => [%{"href" => href} | _]}), do: href    defp image_url(_), do: nil  end diff --git a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex index 4a833275e..20697fa46 100644 --- a/lib/pleroma/web/pleroma_api/controllers/account_controller.ex +++ b/lib/pleroma/web/pleroma_api/controllers/account_controller.ex @@ -146,7 +146,7 @@ defmodule Pleroma.Web.PleromaAPI.AccountController do    @doc "GET /api/v1/pleroma/birthday_reminders"    def birthdays(%{assigns: %{user: %User{} = user}} = conn, %{day: day, month: month} = _params) do      birthdays = -      User.Query.build(%{friends: user, deactivated: false, birth_day: day, birth_month: month}) +      User.get_friends_birthdays_query(user, day, month)        |> Pleroma.Repo.all()      conn  | 
