Browse Source

add mix task to set\unset privacy option of notification

remote-follow-auth-fix
Maksim Pechnikov 4 years ago
parent
commit
a36607c27e
1 changed files with 83 additions and 0 deletions
  1. +83
    -0
      lib/mix/tasks/pleroma/notification_settings.ex

+ 83
- 0
lib/mix/tasks/pleroma/notification_settings.ex View File

@@ -0,0 +1,83 @@
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

Loading…
Cancel
Save