From 1d68ff430b190dce7d40e2e88049c5396736d597 Mon Sep 17 00:00:00 2001 From: Jean Date: Tue, 7 Nov 2023 10:06:47 -0400 Subject: [PATCH] FEATURE: Add custom fields to members on group index (#24232) * FEATURE: Add custom fields to members on group index --- .../discourse/app/templates/group-index.hbs | 11 +++++++++ app/controllers/groups_controller.rb | 5 +++- ...roup_user_with_custom_fields_serializer.rb | 23 +++++++++++++++++++ spec/requests/groups_controller_spec.rb | 21 +++++++++++++++++ 4 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 app/serializers/group_user_with_custom_fields_serializer.rb diff --git a/app/assets/javascripts/discourse/app/templates/group-index.hbs b/app/assets/javascripts/discourse/app/templates/group-index.hbs index 9fbbb8abab7..88dc6800b24 100644 --- a/app/assets/javascripts/discourse/app/templates/group-index.hbs +++ b/app/assets/javascripts/discourse/app/templates/group-index.hbs @@ -101,6 +101,11 @@ > {{/if}} + + {{/if}} + + +
{{i18n "groups.member_added"}} diff --git a/app/controllers/groups_controller.rb b/app/controllers/groups_controller.rb index e11904ea11b..5d16b7e4b2c 100644 --- a/app/controllers/groups_controller.rb +++ b/app/controllers/groups_controller.rb @@ -312,8 +312,11 @@ class GroupsController < ApplicationController members = users.limit(limit).offset(offset) owners = users.where("group_users.owner") + group_members_serializer = + params[:include_custom_fields] ? GroupUserWithCustomFieldsSerializer : GroupUserSerializer + render json: { - members: serialize_data(members, GroupUserSerializer), + members: serialize_data(members, group_members_serializer), owners: serialize_data(owners, GroupUserSerializer), meta: { total: total, diff --git a/app/serializers/group_user_with_custom_fields_serializer.rb b/app/serializers/group_user_with_custom_fields_serializer.rb new file mode 100644 index 00000000000..fb3ec5ac66b --- /dev/null +++ b/app/serializers/group_user_with_custom_fields_serializer.rb @@ -0,0 +1,23 @@ +# frozen_string_literal: true + +class GroupUserWithCustomFieldsSerializer < UserWithCustomFieldsSerializer + include UserPrimaryGroupMixin + + attributes :name, :title, :last_posted_at, :last_seen_at, :added_at, :timezone, :status + + def timezone + user.user_option.timezone + end + + def include_added_at? + object.respond_to? :added_at + end + + def include_status? + SiteSetting.enable_user_status && user.has_status? + end + + def status + UserStatusSerializer.new(user.user_status, root: false) + end +end diff --git a/spec/requests/groups_controller_spec.rb b/spec/requests/groups_controller_spec.rb index 738545d3609..95c70c30cf9 100644 --- a/spec/requests/groups_controller_spec.rb +++ b/spec/requests/groups_controller_spec.rb @@ -644,6 +644,27 @@ RSpec.describe GroupsController do expect(response.parsed_body["members"].map { |u| u["id"] }).to eq([user.id, other_user.id]) expect(response.parsed_body["owners"].map { |u| u["id"] }).to eq([other_user.id]) end + + context "when include_custom_fields is true" do + fab!(:user_field) { Fabricate(:user_field) } + let(:user_field_name) { "user_field_#{user_field.id}" } + let!(:custom_user_field) do + UserCustomField.create!(user_id: user.id, name: user_field_name, value: "A custom field") + end + + before do + sign_in(user) + SiteSetting.public_user_custom_fields = user_field_name + end + + it "shows custom the fields" do + get "/groups/#{group.name}/members.json", params: { include_custom_fields: true } + + expect(response.status).to eq(200) + response_custom_fields = response.parsed_body["members"].first["custom_fields"] + expect(response_custom_fields[user_field_name]).to eq("A custom field") + end + end end describe "#posts_feed" do