mirror of
https://akkoma.dev/AkkomaGang/akkoma.git
synced 2024-12-30 20:27:22 +00:00
84 lines
1.8 KiB
Elixir
84 lines
1.8 KiB
Elixir
defmodule Mix.Tasks.Pleroma.NotificationSettings do
|
|
@shortdoc "Enable&Disable privacy option for push notifications"
|
|
@moduledoc """
|
|
Example:
|
|
|
|
> mix pleroma.notification_settings --privacy-option=false --nickname-users="parallel588" # set false only for parallel588 user
|
|
> mix pleroma.notification_settings --privacy-option=true # set true for all users
|
|
|
|
"""
|
|
|
|
use Mix.Task
|
|
import Mix.Pleroma
|
|
import Ecto.Query
|
|
|
|
def run(args) do
|
|
start_pleroma()
|
|
|
|
{options, _, _} =
|
|
OptionParser.parse(
|
|
args,
|
|
strict: [
|
|
privacy_option: :boolean,
|
|
email_users: :string,
|
|
nickname_users: :string
|
|
]
|
|
)
|
|
|
|
privacy_option = Keyword.get(options, :privacy_option)
|
|
|
|
if not is_nil(privacy_option) do
|
|
privacy_option
|
|
|> build_query(options)
|
|
|> Pleroma.Repo.update_all([])
|
|
end
|
|
|
|
shell_info("Done")
|
|
end
|
|
|
|
defp build_query(privacy_option, options) do
|
|
query =
|
|
from(u in Pleroma.User,
|
|
update: [
|
|
set: [
|
|
notification_settings:
|
|
fragment(
|
|
"jsonb_set(notification_settings, '{privacy_option}', ?)",
|
|
^privacy_option
|
|
)
|
|
]
|
|
]
|
|
)
|
|
|
|
user_emails =
|
|
options
|
|
|> Keyword.get(:email_users, "")
|
|
|> String.split(",")
|
|
|> Enum.map(&String.trim(&1))
|
|
|> Enum.reject(&(&1 == ""))
|
|
|
|
query =
|
|
if length(user_emails) > 0 do
|
|
where(query, [u], u.email in ^user_emails)
|
|
else
|
|
query
|
|
end
|
|
|
|
user_nicknames =
|
|
options
|
|
|> Keyword.get(:nickname_users, "")
|
|
|> String.split(",")
|
|
|> Enum.map(&String.trim(&1))
|
|
|> Enum.reject(&(&1 == ""))
|
|
|
|
query =
|
|
if length(user_nicknames) > 0 do
|
|
where(query, [u], u.nickname in ^user_nicknames)
|
|
else
|
|
query
|
|
end
|
|
|
|
query
|
|
end
|
|
end
|