Fork of Pleroma with site-specific changes and feature branches https://git.pleroma.social/pleroma/pleroma
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

95 lines
2.4KB

  1. defmodule Pleroma.Repo.Migrations.MoveWelcomeSettings do
  2. use Ecto.Migration
  3. alias Pleroma.ConfigDB
  4. @old_keys [:welcome_user_nickname, :welcome_message]
  5. def up do
  6. with {:ok, config, {keep_values, move_values}} <- get_old_values() do
  7. insert_welcome_settings(move_values)
  8. update_instance_config(config, keep_values)
  9. end
  10. end
  11. def down do
  12. with {:ok, welcome_config, revert_values} <- get_revert_values() do
  13. revert_instance_config(revert_values)
  14. Pleroma.Repo.delete(welcome_config)
  15. end
  16. end
  17. defp insert_welcome_settings([_ | _] = values) do
  18. unless String.trim(values[:welcome_message]) == "" do
  19. config_values = [
  20. direct_message: %{
  21. enabled: true,
  22. sender_nickname: values[:welcome_user_nickname],
  23. message: values[:welcome_message]
  24. },
  25. email: %{
  26. enabled: false,
  27. sender: nil,
  28. subject: "Welcome to <%= instance_name %>",
  29. html: "Welcome to <%= instance_name %>",
  30. text: "Welcome to <%= instance_name %>"
  31. }
  32. ]
  33. {:ok, _} =
  34. %ConfigDB{}
  35. |> ConfigDB.changeset(%{group: :pleroma, key: :welcome, value: config_values})
  36. |> Pleroma.Repo.insert()
  37. end
  38. :ok
  39. end
  40. defp insert_welcome_settings(_), do: :noop
  41. defp revert_instance_config(%{} = revert_values) do
  42. values = [
  43. welcome_user_nickname: revert_values[:sender_nickname],
  44. welcome_message: revert_values[:message]
  45. ]
  46. ConfigDB.update_or_create(%{group: :pleroma, key: :instance, value: values})
  47. end
  48. defp revert_instance_config(_), do: :noop
  49. defp update_instance_config(config, values) do
  50. {:ok, _} =
  51. config
  52. |> ConfigDB.changeset(%{value: values})
  53. |> Pleroma.Repo.update()
  54. :ok
  55. end
  56. defp get_revert_values do
  57. config = ConfigDB.get_by_params(%{group: :pleroma, key: :welcome})
  58. cond do
  59. is_nil(config) -> {:noop, nil, nil}
  60. true -> {:ok, config, config.value[:direct_message]}
  61. end
  62. end
  63. defp get_old_values do
  64. config = ConfigDB.get_by_params(%{group: :pleroma, key: :instance})
  65. cond do
  66. is_nil(config) ->
  67. {:noop, config, {}}
  68. is_binary(config.value[:welcome_message]) ->
  69. {:ok, config,
  70. {Keyword.drop(config.value, @old_keys), Keyword.take(config.value, @old_keys)}}
  71. true ->
  72. {:ok, config, {Keyword.drop(config.value, @old_keys), []}}
  73. end
  74. end
  75. end