FIX: Show membership requests link just for group owners. (#7543)

This commit is contained in:
Bianca Nenciu 2019-08-06 13:28:22 +03:00 committed by GitHub
parent 4ae8065f2c
commit b60b2a342f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 48 additions and 12 deletions

View File

@ -443,20 +443,12 @@ class GroupsController < ApplicationController
.pluck("users.username")
)
raw = <<~EOF
#{reason}
---
<a href="#{Discourse.base_uri}/g/#{group.name}/requests">
#{I18n.t('groups.request_membership_pm.handle')}
</a>
EOF
post = PostCreator.new(current_user,
title: I18n.t('groups.request_membership_pm.title', group_name: group.name),
raw: raw,
raw: params[:reason],
archetype: Archetype.private_message,
target_usernames: usernames.join(','),
custom_fields: { requested_group_id: group.id },
skip_validations: true
).create!

View File

@ -38,7 +38,27 @@ class BasicPostSerializer < ApplicationSerializer
I18n.t('flagging.user_must_edit')
end
else
object.filter_quotes(@parent_post)
cooked = object.filter_quotes(@parent_post)
if scope&.user
group = Group
.joins('JOIN group_users ON groups.id = group_users.group_id')
.find_by(
id: object.custom_fields['requested_group_id'].to_i,
group_users: { user_id: scope.user.id, owner: true }
)
if group
cooked << <<~EOF
<hr />
<a href="#{Discourse.base_uri}/g/#{group.name}/requests">
#{I18n.t('groups.request_membership_pm.handle')}
</a>
EOF
end
end
cooked
end
end

View File

@ -40,7 +40,7 @@ class TopicView
end
def self.default_post_custom_fields
@default_post_custom_fields ||= ["action_code_who", "notice_type", "notice_args"]
@default_post_custom_fields ||= ["action_code_who", "notice_type", "notice_args", "requested_group_id"]
end
def self.post_custom_fields_whitelisters

View File

@ -1351,6 +1351,7 @@ describe GroupsController do
body = JSON.parse(response.body)
expect(body['relative_url']).to eq(topic.relative_url)
expect(post.custom_fields['requested_group_id'].to_i).to eq(group.id)
expect(post.user).to eq(user)
expect(topic.title).to eq(I18n.t('groups.request_membership_pm.title',

View File

@ -24,4 +24,27 @@ describe BasicPostSerializer do
end
context "cooked" do
it "includes membership requests" do
user = Fabricate(:user)
member = Fabricate(:user)
owner = Fabricate(:user)
group = Fabricate(:group)
group.add(member)
group.add_owner(owner)
post = Fabricate(:post, custom_fields: { requested_group_id: group.id })
json = BasicPostSerializer.new(post, scope: Guardian.new(user), root: false).as_json
expect(json[:cooked]).not_to include(I18n.t('groups.request_membership_pm.handle'))
json = BasicPostSerializer.new(post, scope: Guardian.new(member), root: false).as_json
expect(json[:cooked]).not_to include(I18n.t('groups.request_membership_pm.handle'))
json = BasicPostSerializer.new(post, scope: Guardian.new(owner), root: false).as_json
expect(json[:cooked]).to include(I18n.t('groups.request_membership_pm.handle'))
end
end
end