From bee79166d3d50ec0a0816369d476668f1f61c746 Mon Sep 17 00:00:00 2001 From: Thomas Citharel Date: Fri, 12 Jun 2020 19:19:19 +0200 Subject: [PATCH] Fix searchable unlisted events Signed-off-by: Thomas Citharel --- lib/graphql/resolvers/event.ex | 4 +--- lib/mobilizon/events/events.ex | 32 +++++++++++++------------------- 2 files changed, 14 insertions(+), 22 deletions(-) diff --git a/lib/graphql/resolvers/event.ex b/lib/graphql/resolvers/event.ex index 342b3d6b7..8c795bd5d 100644 --- a/lib/graphql/resolvers/event.ex +++ b/lib/graphql/resolvers/event.ex @@ -136,9 +136,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Event do events = if @number_of_related_events - length(events) > 0 do events - |> Enum.concat( - Events.list_events(1, @number_of_related_events, :begins_on, :asc, true, true) - ) + |> Enum.concat(Events.list_events(1, @number_of_related_events, :begins_on, :asc, true)) |> uniq_events() else events diff --git a/lib/mobilizon/events/events.ex b/lib/mobilizon/events/events.ex index 9a1d7155e..40a61433e 100644 --- a/lib/mobilizon/events/events.ex +++ b/lib/mobilizon/events/events.ex @@ -162,7 +162,7 @@ defmodule Mobilizon.Events do event = url |> event_by_url_query() - |> filter_public_visibility() + |> filter_unlisted_and_public_visibility() |> filter_draft() |> preload_for_event() |> Repo.one() @@ -184,7 +184,7 @@ defmodule Mobilizon.Events do def get_public_event_by_url_with_preload!(url) do url |> event_by_url_query() - |> filter_public_visibility() + |> filter_unlisted_and_public_visibility() |> filter_draft() |> preload_for_event() |> Repo.one!() @@ -197,7 +197,7 @@ defmodule Mobilizon.Events do def get_public_event_by_uuid_with_preload(uuid) do uuid |> event_by_uuid_query() - |> filter_public_visibility() + |> filter_unlisted_and_public_visibility() |> filter_draft() |> preload_for_event() |> Repo.one() @@ -345,13 +345,12 @@ defmodule Mobilizon.Events do @doc """ Returns the list of events. """ - @spec list_events(integer | nil, integer | nil, atom, atom, boolean, boolean) :: [Event.t()] + @spec list_events(integer | nil, integer | nil, atom, atom, boolean) :: [Event.t()] def list_events( page \\ nil, limit \\ nil, sort \\ :begins_on, direction \\ :asc, - is_unlisted \\ false, is_future \\ true ) do query = from(e in Event, preload: [:organizer_actor, :participants]) @@ -360,7 +359,6 @@ defmodule Mobilizon.Events do |> Page.paginate(page, limit) |> sort(sort, direction) |> filter_future_events(is_future) - |> filter_unlisted(is_unlisted) |> filter_draft() |> filter_local_or_from_followed_instances_events() |> Repo.all() @@ -445,7 +443,7 @@ defmodule Mobilizon.Events do @spec count_local_events :: integer def count_local_events do count_local_events_query() - |> filter_public_visibility() + |> filter_unlisted_and_public_visibility() |> filter_draft() |> Repo.one() end @@ -1273,7 +1271,7 @@ defmodule Mobilizon.Events do @spec events_for_search_query(String.t()) :: Ecto.Query.t() defp events_for_search_query(search_string) do Event - |> where([e], e.visibility in ^@public_visibility) + |> where([e], e.visibility == ^:public) |> do_event_for_search_query(search_string) end @@ -1304,7 +1302,7 @@ defmodule Mobilizon.Events do join: te in "events_tags", on: e.id == te.event_id, where: e.begins_on > ^DateTime.utc_now(), - where: e.visibility in ^@public_visibility, + where: e.visibility == ^:public, where: te.tag_id in ^tags_ids, order_by: [asc: e.begins_on], limit: ^limit @@ -1498,7 +1496,12 @@ defmodule Mobilizon.Events do @spec filter_public_visibility(Ecto.Query.t()) :: Ecto.Query.t() defp filter_public_visibility(query) do - from(e in query, where: e.visibility in ^@public_visibility) + from(e in query, where: e.visibility == ^:public) + end + + @spec filter_unlisted_and_public_visibility(Ecto.Query.t()) :: Ecto.Query.t() + defp filter_unlisted_and_public_visibility(query) do + from(q in query, where: q.visibility in ^@public_visibility) end @spec filter_not_event_uuid(Ecto.Query.t(), String.t() | nil) :: Ecto.Query.t() @@ -1530,15 +1533,6 @@ defmodule Mobilizon.Events do ) end - @spec filter_unlisted(Ecto.Query.t(), boolean) :: Ecto.Query.t() - defp filter_unlisted(query, true) do - from(q in query, where: q.visibility in ^@public_visibility) - end - - defp filter_unlisted(query, false) do - from(q in query, where: q.visibility == ^:public) - end - @spec filter_approved_role(Ecto.Query.t()) :: Ecto.Query.t() defp filter_approved_role(query) do filter_role(query, [:not_approved, :rejected])