Fixes with addresses and iCalendar

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2019-11-05 17:49:40 +01:00
parent a46f4c058c
commit 33f7c14db6
6 changed files with 69 additions and 8 deletions

View File

@@ -69,4 +69,20 @@ defmodule Mobilizon.Addresses.Address do
put_change(changeset, :url, url)
end
def coords(nil), do: nil
def coords(%__MODULE__{} = address) do
with %Geo.Point{coordinates: {latitude, longitude}, srid: 4326} <- address.geom do
{latitude, longitude}
end
end
def representation(nil), do: nil
def representation(%__MODULE__{} = address) do
"#{address.street} #{address.postal_code} #{address.locality} #{address.region} #{
address.country
}"
end
end

View File

@@ -187,7 +187,8 @@ defmodule Mobilizon.Events.Event do
# In case the provided addresses is an existing one
@spec put_address(Changeset.t(), map) :: Changeset.t()
defp put_address(%Changeset{} = changeset, %{physical_address: %{id: id} = _physical_address}) when not is_nil(id) do
defp put_address(%Changeset{} = changeset, %{physical_address: %{id: id} = _physical_address})
when not is_nil(id) do
case Addresses.get_address(id) do
%Address{} = address ->
put_assoc(changeset, :physical_address, address)

View File

@@ -6,6 +6,7 @@ defmodule Mobilizon.Service.Export.ICalendar do
alias Mobilizon.{Actors, Events, Users}
alias Mobilizon.Actors.Actor
alias Mobilizon.Events.{Event, FeedToken}
alias Mobilizon.Addresses.Address
alias Mobilizon.Users.User
@doc """
@@ -31,7 +32,10 @@ defmodule Mobilizon.Service.Export.ICalendar do
dtend: event.ends_on,
description: HtmlSanitizeEx.strip_tags(event.description),
uid: event.uuid,
categories: event.tags |> Enum.map(& &1.slug)
url: event.url,
geo: Address.coords(event.physical_address),
location: Address.representation(event.physical_address),
categories: event.tags |> Enum.map(& &1.title)
}
end