diff options
author | Tusooa Zhu <tusooa@kazv.moe> | 2022-03-08 18:21:20 -0500 |
---|---|---|
committer | Tusooa Zhu <tusooa@kazv.moe> | 2022-03-08 18:21:20 -0500 |
commit | fcf3c9057ec1c49a0c9a400985c1dde4a5d7e9db (patch) | |
tree | 41362b3881426deebc56333eb2a0fc3dad88c8e1 /lib | |
parent | 009817c9ee95f131d6a06e52c06c662ec95a38d4 (diff) | |
download | pleroma-fcf3c9057ec1c49a0c9a400985c1dde4a5d7e9db.tar.gz pleroma-fcf3c9057ec1c49a0c9a400985c1dde4a5d7e9db.zip |
Implement visibility filtering for announcements
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pleroma/announcement.ex | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/pleroma/announcement.ex b/lib/pleroma/announcement.ex index b0e787fe0..b3c88b441 100644 --- a/lib/pleroma/announcement.ex +++ b/lib/pleroma/announcement.ex @@ -6,6 +6,7 @@ defmodule Pleroma.Announcement do use Ecto.Schema import Ecto.Changeset, only: [cast: 3, validate_required: 2] + import Ecto.Query alias Pleroma.AnnouncementReadRelationship alias Pleroma.Repo @@ -15,16 +16,36 @@ defmodule Pleroma.Announcement do schema "announcements" do field(:data, :map) + field(:starts_at, :naive_datetime) + field(:ends_at, :naive_datetime) timestamps() end def change(struct, params \\ %{}) do struct + |> validate_params() |> cast(params, [:data]) |> validate_required([:data]) end + defp validate_params(params) do + base_struct = %{ + "content" => "", + "all_day" => false + } + + merged_data = + Map.merge(base_struct, params.data) + |> Map.take(["content", "all_day"]) + + %{ + data: merged_data, + starts_at: Map.get(params, "starts_at"), + ends_at: Map.get(params, "ends_at") + } + end + def add(params) do changeset = change(%__MODULE__{}, params) @@ -86,4 +107,17 @@ defmodule Pleroma.Announcement do base |> Map.merge(extra_params) end + + # "visible" means: + # starts_at < time < ends_at + def list_all_visible_when(time) do + __MODULE__ + |> where([a], is_nil(a.starts_at) or a.starts_at < ^time) + |> where([a], is_nil(a.ends_at) or a.ends_at > ^time) + |> Repo.all() + end + + def list_all_visible do + list_all_visible_when(NaiveDateTime.utc_now()) + end end |