Merge branch 'feature/more-actions-to-admin-api' into 'develop'
[akkoma] / lib / pleroma / user.ex
index 9a774e7b7da9e793ab16ce44c7216c1cfb00026c..12e0e818ebf0f6951603e53facb56245c5fb1a26 100644 (file)
@@ -273,7 +273,7 @@ defmodule Pleroma.User do
          Pleroma.Config.get([:instance, :account_activation_required]) do
       user
       |> Pleroma.UserEmail.account_confirmation_email()
-      |> Pleroma.Mailer.deliver()
+      |> Pleroma.Mailer.deliver_async()
     else
       {:ok, :noop}
     end
@@ -772,6 +772,12 @@ defmodule Pleroma.User do
     Enum.uniq_by(fts_results ++ trigram_results, & &1.id)
   end
 
+  def all_except_one(user) do
+    query = from(u in User, where: u.id != ^user.id)
+
+    Repo.all(query)
+  end
+
   defp do_search(subquery, for_user, options \\ []) do
     q =
       from(
@@ -888,26 +894,28 @@ defmodule Pleroma.User do
     )
   end
 
-  def mute(muter, %User{ap_id: ap_id} = muted) do
-    if following?(muter, muter) do
-      unfollow(muter, muter)
-    end
+  def mute(muter, %User{ap_id: ap_id}) do
+    info_cng =
+      muter.info
+      |> User.Info.add_to_mutes(ap_id)
 
-    mutes = muter.info["mutes"] || []
-    new_mutes = Enum.uniq([ap_id | mutes])
-    new_info = Map.put(muter.info, "mutes", new_mutes)
+    cng =
+      change(muter)
+      |> put_embed(:info, info_cng)
 
-    cs = User.info_changeset(muter, %{info: new_info})
-    update_and_set_cache(cs)
+    update_and_set_cache(cng)
   end
 
-  def unmute(user, %{ap_id: ap_id}) do
-    mutes = user.info["mutes"] || []
-    new_mutes = List.delete(mutes, ap_id)
-    new_info = Map.put(user.info, "mutes", new_mutes)
+  def unmute(muter, %{ap_id: ap_id}) do
+    info_cng =
+      muter.info
+      |> User.Info.remove_from_mutes(ap_id)
+
+    cng =
+      change(muter)
+      |> put_embed(:info, info_cng)
 
-    cs = User.info_changeset(user, %{info: new_info})
-    update_and_set_cache(cs)
+    update_and_set_cache(cng)
   end
 
   def block(blocker, %User{ap_id: ap_id} = blocked) do
@@ -952,7 +960,7 @@ defmodule Pleroma.User do
     update_and_set_cache(cng)
   end
 
-  def mutes?(user, %{ap_id: ap_id}), do: Enum.member?(user.info["mutes"] || [], ap_id)
+  def mutes?(user, %{ap_id: ap_id}), do: Enum.member?(user.info.mutes, ap_id)
 
   def blocks?(user, %{ap_id: ap_id}) do
     blocks = user.info.blocks
@@ -965,6 +973,9 @@ defmodule Pleroma.User do
       end)
   end
 
+  def muted_users(user),
+    do: Repo.all(from(u in User, where: u.ap_id in ^user.info.mutes))
+
   def blocked_users(user),
     do: Repo.all(from(u in User, where: u.ap_id in ^user.info.blocks))
 
@@ -1279,4 +1290,13 @@ defmodule Pleroma.User do
       inserted_at: NaiveDateTime.utc_now()
     }
   end
+
+  def all_superusers do
+    from(
+      u in User,
+      where: u.local == true,
+      where: fragment("?->'is_admin' @> 'true' OR ?->'is_moderator' @> 'true'", u.info, u.info)
+    )
+    |> Repo.all()
+  end
 end