diff options
Diffstat (limited to 'priv/repo/migrations')
| -rw-r--r-- | priv/repo/migrations/20200724133313_move_welcome_settings.exs | 94 | 
1 files changed, 94 insertions, 0 deletions
| diff --git a/priv/repo/migrations/20200724133313_move_welcome_settings.exs b/priv/repo/migrations/20200724133313_move_welcome_settings.exs new file mode 100644 index 000000000..323a8fcee --- /dev/null +++ b/priv/repo/migrations/20200724133313_move_welcome_settings.exs @@ -0,0 +1,94 @@ +defmodule Pleroma.Repo.Migrations.MoveWelcomeSettings do +  use Ecto.Migration + +  alias Pleroma.ConfigDB + +  @old_keys [:welcome_user_nickname, :welcome_message] + +  def up do +    with {:ok, config, {keep_values, move_values}} <- get_old_values() do +      insert_welcome_settings(move_values) +      update_instance_config(config, keep_values) +    end +  end + +  def down do +    with {:ok, welcome_config, revert_values} <- get_revert_values() do +      revert_instance_config(revert_values) +      Pleroma.Repo.delete(welcome_config) +    end +  end + +  defp insert_welcome_settings([_ | _] = values) do +    unless String.trim(values[:welcome_message]) == "" do +      config_values = [ +        direct_message: %{ +          enabled: true, +          sender_nickname: values[:welcome_user_nickname], +          message: values[:welcome_message] +        }, +        email: %{ +          enabled: false, +          sender: nil, +          subject: "Welcome to <%= instance_name %>", +          html: "Welcome to <%= instance_name %>", +          text: "Welcome to <%= instance_name %>" +        } +      ] + +      {:ok, _} = +        %ConfigDB{} +        |> ConfigDB.changeset(%{group: :pleroma, key: :welcome, value: config_values}) +        |> Pleroma.Repo.insert() +    end + +    :ok +  end + +  defp insert_welcome_settings(_), do: :noop + +  defp revert_instance_config(%{} = revert_values) do +    values = [ +      welcome_user_nickname: revert_values[:sender_nickname], +      welcome_message: revert_values[:message] +    ] + +    ConfigDB.update_or_create(%{group: :pleroma, key: :instance, value: values}) +  end + +  defp revert_instance_config(_), do: :noop + +  defp update_instance_config(config, values) do +    {:ok, _} = +      config +      |> ConfigDB.changeset(%{value: values}) +      |> Pleroma.Repo.update() + +    :ok +  end + +  defp get_revert_values do +    config = ConfigDB.get_by_params(%{group: :pleroma, key: :welcome}) + +    cond do +      is_nil(config) -> {:noop, nil, nil} +      true -> {:ok, config, config.value[:direct_message]} +    end +  end + +  defp get_old_values do +    config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance}) + +    cond do +      is_nil(config) -> +        {:noop, config, {}} + +      is_binary(config.value[:welcome_message]) -> +        {:ok, config, +         {Keyword.drop(config.value, @old_keys), Keyword.take(config.value, @old_keys)}} + +      true -> +        {:ok, config, {Keyword.drop(config.value, @old_keys), []}} +    end +  end +end | 
