mirror of
https://akkoma.dev/AkkomaGang/akkoma.git
synced 2024-12-11 13:40:12 +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
|