mirror of
https://github.com/discourse/discourse.git
synced 2025-03-26 05:25:52 +08:00
FEATURE: Send a private message when a group membership is accepted (#9822)
* FEATURE: Send a private message when a group membership is accepted * DEV: Small code improvements * FIX: Send PM as group owner * Copy edits
This commit is contained in:
parent
41f742c2f9
commit
f47400475e
@ -340,18 +340,28 @@ class GroupsController < ApplicationController
|
|||||||
raise Discourse::InvalidParameters.new(:id) if group.blank?
|
raise Discourse::InvalidParameters.new(:id) if group.blank?
|
||||||
guardian.ensure_can_edit!(group)
|
guardian.ensure_can_edit!(group)
|
||||||
|
|
||||||
ActiveRecord::Base.transaction do
|
|
||||||
user = User.find_by(id: params[:user_id])
|
user = User.find_by(id: params[:user_id])
|
||||||
raise Discourse::InvalidParameters.new(:user_id) if user.blank?
|
raise Discourse::InvalidParameters.new(:user_id) if user.blank?
|
||||||
|
|
||||||
|
ActiveRecord::Base.transaction do
|
||||||
if params[:accept]
|
if params[:accept]
|
||||||
group.add(user, notify: true)
|
group.add(user)
|
||||||
GroupActionLogger.new(current_user, group).log_add_user_to_group(user)
|
GroupActionLogger.new(current_user, group).log_add_user_to_group(user)
|
||||||
end
|
end
|
||||||
|
|
||||||
GroupRequest.where(group_id: group.id, user_id: user.id).delete_all
|
GroupRequest.where(group_id: group.id, user_id: user.id).delete_all
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if params[:accept]
|
||||||
|
PostCreator.new(current_user,
|
||||||
|
title: I18n.t('groups.request_accepted_pm.title', group_name: group.name),
|
||||||
|
raw: I18n.t('groups.request_accepted_pm.body', group_name: group.name),
|
||||||
|
archetype: Archetype.private_message,
|
||||||
|
target_usernames: user.username,
|
||||||
|
skip_validations: true
|
||||||
|
).create!
|
||||||
|
end
|
||||||
|
|
||||||
render json: success_json
|
render json: success_json
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -616,16 +616,15 @@ class Group < ActiveRecord::Base
|
|||||||
PUBLISH_CATEGORIES_LIMIT = 10
|
PUBLISH_CATEGORIES_LIMIT = 10
|
||||||
|
|
||||||
def add(user, notify: false, automatic: false)
|
def add(user, notify: false, automatic: false)
|
||||||
self.users.push(user) unless self.users.include?(user)
|
return self if self.users.include?(user)
|
||||||
|
|
||||||
|
self.users.push(user)
|
||||||
|
|
||||||
if notify
|
if notify
|
||||||
Notification.create!(
|
Notification.create!(
|
||||||
notification_type: Notification.types[:membership_request_accepted],
|
notification_type: Notification.types[:membership_request_accepted],
|
||||||
user_id: user.id,
|
user_id: user.id,
|
||||||
data: {
|
data: { group_id: id, group_name: name }.to_json
|
||||||
group_id: id,
|
|
||||||
group_name: name
|
|
||||||
}.to_json
|
|
||||||
)
|
)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
@ -431,6 +431,10 @@ en:
|
|||||||
trust_level_4: "trust_level_4"
|
trust_level_4: "trust_level_4"
|
||||||
request_membership_pm:
|
request_membership_pm:
|
||||||
title: "Membership Request for @%{group_name}"
|
title: "Membership Request for @%{group_name}"
|
||||||
|
request_accepted_pm:
|
||||||
|
title: "You've been accepted into @%{group_name}"
|
||||||
|
body: |
|
||||||
|
Your request to enter @%{group_name} has been accepted and you are now a member.
|
||||||
view_hidden_topic_request_reason: "I would like to join the group '%{group_name}', so I may access [this topic](%{topic_url})"
|
view_hidden_topic_request_reason: "I would like to join the group '%{group_name}', so I may access [this topic](%{topic_url})"
|
||||||
|
|
||||||
education:
|
education:
|
||||||
|
@ -1325,6 +1325,25 @@ describe GroupsController do
|
|||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe "#handle_membership_request" do
|
||||||
|
before do
|
||||||
|
group.add_owner(user)
|
||||||
|
sign_in(user)
|
||||||
|
end
|
||||||
|
|
||||||
|
it "sends a private message when accepted" do
|
||||||
|
group_request = GroupRequest.create!(group: group, user: other_user)
|
||||||
|
expect { put "/groups/#{group.id}/handle_membership_request.json", params: { user_id: other_user.id, accept: true } }
|
||||||
|
.to change { Topic.count }.by(1)
|
||||||
|
.and change { Post.count }.by(1)
|
||||||
|
|
||||||
|
topic = Topic.last
|
||||||
|
expect(topic.archetype).to eq(Archetype.private_message)
|
||||||
|
expect(topic.title).to eq(I18n.t('groups.request_accepted_pm.title', group_name: group.name))
|
||||||
|
expect(topic.first_post.raw).to eq(I18n.t('groups.request_accepted_pm.body', group_name: group.name).strip)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
describe "#histories" do
|
describe "#histories" do
|
||||||
context 'when user is not signed in' do
|
context 'when user is not signed in' do
|
||||||
it 'should raise the right error' do
|
it 'should raise the right error' do
|
||||||
|
Loading…
x
Reference in New Issue
Block a user