summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorTusooa Zhu <tusooa@kazv.moe>2022-03-08 18:21:20 -0500
committerTusooa Zhu <tusooa@kazv.moe>2022-03-08 18:21:20 -0500
commitfcf3c9057ec1c49a0c9a400985c1dde4a5d7e9db (patch)
tree41362b3881426deebc56333eb2a0fc3dad88c8e1 /lib
parent009817c9ee95f131d6a06e52c06c662ec95a38d4 (diff)
downloadpleroma-fcf3c9057ec1c49a0c9a400985c1dde4a5d7e9db.tar.gz
pleroma-fcf3c9057ec1c49a0c9a400985c1dde4a5d7e9db.zip
Implement visibility filtering for announcements
Diffstat (limited to 'lib')
-rw-r--r--lib/pleroma/announcement.ex34
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