mirror of
https://github.com/discourse/discourse.git
synced 2026-08-13 06:25:11 -05:00
FEATURE: Let users select flair (#13587)
User flair was given by user's primary group. This PR separates the two, adds a new field to the user model for flair group ID and users can select their flair from user preferences now.
This commit is contained in:
@@ -4,9 +4,10 @@ module UserPrimaryGroupMixin
|
||||
|
||||
def self.included(klass)
|
||||
klass.attributes :primary_group_name,
|
||||
:primary_group_flair_url,
|
||||
:primary_group_flair_bg_color,
|
||||
:primary_group_flair_color,
|
||||
:flair_name,
|
||||
:flair_url,
|
||||
:flair_bg_color,
|
||||
:flair_color,
|
||||
:admin,
|
||||
:moderator,
|
||||
:trust_level
|
||||
@@ -20,28 +21,36 @@ module UserPrimaryGroupMixin
|
||||
object&.primary_group.present?
|
||||
end
|
||||
|
||||
def primary_group_flair_url
|
||||
object&.primary_group&.flair_url
|
||||
def flair_name
|
||||
object&.flair_group&.name
|
||||
end
|
||||
|
||||
def include_primary_group_flair_url?
|
||||
object&.primary_group&.flair_url.present?
|
||||
def include_flair_group_name?
|
||||
object&.flair_group.present?
|
||||
end
|
||||
|
||||
def primary_group_flair_bg_color
|
||||
object&.primary_group&.flair_bg_color
|
||||
def flair_url
|
||||
object&.flair_group&.flair_url
|
||||
end
|
||||
|
||||
def include_primary_group_flair_bg_color?
|
||||
object&.primary_group&.flair_bg_color.present?
|
||||
def include_flair_url?
|
||||
object&.flair_group&.flair_url.present?
|
||||
end
|
||||
|
||||
def primary_group_flair_color
|
||||
object&.primary_group&.flair_color
|
||||
def flair_bg_color
|
||||
object&.flair_group&.flair_bg_color
|
||||
end
|
||||
|
||||
def include_primary_group_flair_color?
|
||||
object&.primary_group&.flair_color.present?
|
||||
def include_flair_bg_color?
|
||||
object&.flair_group&.flair_bg_color.present?
|
||||
end
|
||||
|
||||
def flair_color
|
||||
object&.flair_group&.flair_color
|
||||
end
|
||||
|
||||
def include_flair_color?
|
||||
object&.flair_group&.flair_color.present?
|
||||
end
|
||||
|
||||
def include_admin?
|
||||
|
||||
@@ -48,6 +48,7 @@ class CurrentUserSerializer < BasicUserSerializer
|
||||
:previous_visit_at,
|
||||
:seen_notification_id,
|
||||
:primary_group_id,
|
||||
:flair_group_id,
|
||||
:can_create_topic,
|
||||
:can_create_group,
|
||||
:link_posting_access,
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class FlairGroupSerializer < ApplicationSerializer
|
||||
attributes :id, :name, :flair_url, :flair_bg_color, :flair_color
|
||||
end
|
||||
@@ -36,9 +36,10 @@ class PostSerializer < BasicPostSerializer
|
||||
:category_id,
|
||||
:display_username,
|
||||
:primary_group_name,
|
||||
:primary_group_flair_url,
|
||||
:primary_group_flair_bg_color,
|
||||
:primary_group_flair_color,
|
||||
:flair_name,
|
||||
:flair_url,
|
||||
:flair_bg_color,
|
||||
:flair_color,
|
||||
:version,
|
||||
:can_edit,
|
||||
:can_delete,
|
||||
@@ -188,16 +189,20 @@ class PostSerializer < BasicPostSerializer
|
||||
end
|
||||
end
|
||||
|
||||
def primary_group_flair_url
|
||||
object.user&.primary_group&.flair_url
|
||||
def flair_name
|
||||
object.user&.flair_group&.name
|
||||
end
|
||||
|
||||
def primary_group_flair_bg_color
|
||||
object.user&.primary_group&.flair_bg_color
|
||||
def flair_url
|
||||
object.user&.flair_group&.flair_url
|
||||
end
|
||||
|
||||
def primary_group_flair_color
|
||||
object.user&.primary_group&.flair_color
|
||||
def flair_bg_color
|
||||
object.user&.flair_group&.flair_bg_color
|
||||
end
|
||||
|
||||
def flair_color
|
||||
object.user&.flair_group&.flair_color
|
||||
end
|
||||
|
||||
def link_counts
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class PrimaryGroupSerializer < ApplicationSerializer
|
||||
attributes :id, :name, :flair_url, :flair_bg_color, :flair_color
|
||||
attributes :id, :name
|
||||
end
|
||||
|
||||
@@ -3,7 +3,7 @@
|
||||
class TopicPostCountSerializer < BasicUserSerializer
|
||||
|
||||
attributes :post_count, :primary_group_name,
|
||||
:primary_group_flair_url, :primary_group_flair_color, :primary_group_flair_bg_color,
|
||||
:flair_name, :flair_url, :flair_color, :flair_bg_color,
|
||||
:admin, :moderator, :trust_level,
|
||||
|
||||
def id
|
||||
@@ -23,16 +23,20 @@ class TopicPostCountSerializer < BasicUserSerializer
|
||||
object[:user]&.primary_group&.name
|
||||
end
|
||||
|
||||
def primary_group_flair_url
|
||||
object[:user]&.primary_group&.flair_url
|
||||
def flair_name
|
||||
object[:user]&.flair_group&.name
|
||||
end
|
||||
|
||||
def primary_group_flair_bg_color
|
||||
object[:user]&.primary_group&.flair_bg_color
|
||||
def flair_url
|
||||
object[:user]&.flair_group&.flair_url
|
||||
end
|
||||
|
||||
def primary_group_flair_color
|
||||
object[:user]&.primary_group&.flair_color
|
||||
def flair_bg_color
|
||||
object[:user]&.flair_group&.flair_bg_color
|
||||
end
|
||||
|
||||
def flair_color
|
||||
object[:user]&.flair_group&.flair_color
|
||||
end
|
||||
|
||||
def include_admin?
|
||||
|
||||
@@ -5,4 +5,5 @@ class TopicPosterSerializer < ApplicationSerializer
|
||||
|
||||
has_one :user, serializer: PosterSerializer
|
||||
has_one :primary_group, serializer: PrimaryGroupSerializer
|
||||
has_one :flair_group, serializer: FlairGroupSerializer
|
||||
end
|
||||
|
||||
@@ -59,9 +59,10 @@ class UserCardSerializer < BasicUserSerializer
|
||||
:recent_time_read,
|
||||
:primary_group_id,
|
||||
:primary_group_name,
|
||||
:primary_group_flair_url,
|
||||
:primary_group_flair_bg_color,
|
||||
:primary_group_flair_color,
|
||||
:flair_name,
|
||||
:flair_url,
|
||||
:flair_bg_color,
|
||||
:flair_color,
|
||||
:featured_topic,
|
||||
:timezone
|
||||
|
||||
@@ -181,19 +182,23 @@ class UserCardSerializer < BasicUserSerializer
|
||||
end
|
||||
|
||||
def primary_group_name
|
||||
object.primary_group.try(:name)
|
||||
object.primary_group&.name
|
||||
end
|
||||
|
||||
def primary_group_flair_url
|
||||
object.try(:primary_group).try(:flair_url)
|
||||
def flair_name
|
||||
object.flair_group&.name
|
||||
end
|
||||
|
||||
def primary_group_flair_bg_color
|
||||
object.try(:primary_group).try(:flair_bg_color)
|
||||
def flair_url
|
||||
object.flair_group&.flair_url
|
||||
end
|
||||
|
||||
def primary_group_flair_color
|
||||
object.try(:primary_group).try(:flair_color)
|
||||
def flair_bg_color
|
||||
object.flair_group&.flair_bg_color
|
||||
end
|
||||
|
||||
def flair_color
|
||||
object.flair_group&.flair_color
|
||||
end
|
||||
|
||||
def featured_topic
|
||||
|
||||
@@ -29,9 +29,10 @@ class UserSummarySerializer < ApplicationSerializer
|
||||
:admin,
|
||||
:moderator,
|
||||
:trust_level,
|
||||
:primary_group_flair_url,
|
||||
:primary_group_flair_bg_color,
|
||||
:primary_group_flair_color,
|
||||
:flair_name,
|
||||
:flair_url,
|
||||
:flair_bg_color,
|
||||
:flair_color,
|
||||
:primary_group_name
|
||||
|
||||
def include_name?
|
||||
@@ -42,16 +43,20 @@ class UserSummarySerializer < ApplicationSerializer
|
||||
User.avatar_template(object[:username], object[:uploaded_avatar_id])
|
||||
end
|
||||
|
||||
def primary_group_flair_url
|
||||
object.primary_group&.flair_url
|
||||
def flair_name
|
||||
object.flair_group&.name
|
||||
end
|
||||
|
||||
def primary_group_flair_bg_color
|
||||
object.primary_group&.flair_bg_color
|
||||
def flair_url
|
||||
object.flair_group&.flair_url
|
||||
end
|
||||
|
||||
def primary_group_flair_color
|
||||
object.primary_group&.flair_color
|
||||
def flair_bg_color
|
||||
object.flair_group&.flair_bg_color
|
||||
end
|
||||
|
||||
def flair_color
|
||||
object.flair_group&.flair_color
|
||||
end
|
||||
|
||||
def primary_group_name
|
||||
|
||||
@@ -28,9 +28,9 @@ class WebHookPostSerializer < PostSerializer
|
||||
actions_summary
|
||||
can_view_edit_history
|
||||
yours
|
||||
primary_group_flair_url
|
||||
primary_group_flair_bg_color
|
||||
primary_group_flair_color
|
||||
flair_url
|
||||
flair_bg_color
|
||||
flair_color
|
||||
notice
|
||||
}.each do |attr|
|
||||
define_method("include_#{attr}?") do
|
||||
|
||||
Reference in New Issue
Block a user