Packages
phoenix_kit
1.7.192
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/users/comment_resources.ex
defmodule PhoenixKit.Users.CommentResources do
@moduledoc """
Resolves `"user"` comment resources for the comments moderation admin.
A comment attached to a user (`resource_type: "user"`, `resource_uuid:
user_uuid`) resolves to the user's display name + admin detail page
(`/admin/users/view/:uuid`), with their avatar as the chip thumbnail — so the
moderation list links to the user instead of showing a bare uuid.
Registered as the `"user"` handler by `phoenix_kit_comments`'
`resolve_comment_resources/1` dispatch (gated on this module being loaded).
Mirrors `PhoenixKit.Annotations.resolve_comment_resources/1` (the `"file"`
handler).
"""
import Ecto.Query, only: [from: 2]
alias PhoenixKit.Modules.Storage.URLSigner
alias PhoenixKit.RepoHelper
alias PhoenixKit.Users.Auth.User
@spec resolve_comment_resources([binary()]) :: %{binary() => map()}
def resolve_comment_resources(resource_uuids) when is_list(resource_uuids) do
from(u in User, where: u.uuid in ^resource_uuids)
|> RepoHelper.all()
|> Map.new(fn user ->
# Raw path — the comments module applies Routes.path/1 once when rendering
# the chip (pre-applying it here would double-prefix under a url_prefix).
info = %{
title: display_name(user),
path: "/admin/users/view/#{user.uuid}"
}
info =
case avatar_thumb(user) do
nil -> info
url -> Map.put(info, :thumb_url, url)
end
{user.uuid, info}
end)
rescue
_ -> %{}
end
# Prefer the user's name; fall back to their email so the chip is never blank.
defp display_name(user) do
case User.full_name(user) do
name when is_binary(name) and name != "" -> name
_ -> user.email
end
end
# Same avatar precedence the `user_avatar` component uses: an uploaded avatar
# (storage thumbnail), then an OAuth avatar URL, else none (chip shows a badge).
defp avatar_thumb(%{custom_fields: %{"avatar_file_uuid" => file_id}})
when is_binary(file_id) and file_id != "" do
URLSigner.signed_url(file_id, "thumbnail")
end
defp avatar_thumb(%{custom_fields: %{"oauth_avatar_url" => url}})
when is_binary(url) and url != "" do
url
end
defp avatar_thumb(_user), do: nil
end