FEATURE: Shows note in moderator post (#335)
This commit is contained in:
parent
6db2e0991b
commit
43a3030707
|
@ -15,6 +15,7 @@ en:
|
|||
unassigned_group_from_post: "unassigned %{who} from <a href='%{path}'>post</a> %{when}"
|
||||
reassigned: "Reassigned %{who} %{when}"
|
||||
reassigned_group: "Reassigned %{who} %{when}"
|
||||
note_change: "changed assignment note for %{who} %{when}"
|
||||
discourse_assign:
|
||||
add_unassigned_filter: "Add 'unassigned' filter to category"
|
||||
cant_act: "You cannot act on flags that have been assigned to other users"
|
||||
|
|
|
@ -199,12 +199,34 @@ class ::Assigner
|
|||
end
|
||||
end
|
||||
|
||||
def update_note(assign_to, note, skip_small_action_post: false)
|
||||
@target.assignment.update!(note: note)
|
||||
|
||||
queue_notification(assign_to, skip_small_action_post)
|
||||
|
||||
assignment = @target.assignment
|
||||
publish_assignment(assignment, assign_to, note)
|
||||
|
||||
# email is skipped, for now
|
||||
|
||||
unless skip_small_action_post
|
||||
action_code = "note_change"
|
||||
add_small_action_post(action_code, assign_to, note)
|
||||
end
|
||||
|
||||
{ success: true }
|
||||
end
|
||||
|
||||
def assign(assign_to, note: nil, skip_small_action_post: false)
|
||||
assigned_to_type = assign_to.is_a?(User) ? "User" : "Group"
|
||||
|
||||
forbidden_reason = forbidden_reasons(assign_to: assign_to, type: assigned_to_type, note: note)
|
||||
return { success: false, reason: forbidden_reason } if forbidden_reason
|
||||
|
||||
if no_assignee_change?(assign_to)
|
||||
return update_note(assign_to, note, skip_small_action_post: skip_small_action_post)
|
||||
end
|
||||
|
||||
action_code = {}
|
||||
action_code[:user] = topic.assignment.present? ? "reassigned" : "assigned"
|
||||
action_code[:group] = topic.assignment.present? ? "reassigned_group" : "assigned_group"
|
||||
|
@ -217,13 +239,7 @@ class ::Assigner
|
|||
|
||||
first_post.publish_change_to_clients!(:revised, reload_topic: true)
|
||||
|
||||
Jobs.enqueue(:assign_notification,
|
||||
topic_id: topic.id,
|
||||
post_id: topic_target? ? first_post.id : @target.id,
|
||||
assigned_to_id: assign_to.id,
|
||||
assigned_to_type: assigned_to_type,
|
||||
assigned_by_id: @assigned_by.id,
|
||||
skip_small_action_post: skip_small_action_post)
|
||||
queue_notification(assign_to, skip_small_action_post)
|
||||
|
||||
publish_assignment(assignment, assign_to, note)
|
||||
|
||||
|
@ -250,20 +266,8 @@ class ::Assigner
|
|||
end
|
||||
|
||||
unless skip_small_action_post
|
||||
custom_fields = { "action_code_who" => assign_to.is_a?(User) ? assign_to.username : assign_to.name }
|
||||
|
||||
if post_target?
|
||||
custom_fields.merge!({ "action_code_path" => "/p/#{@target.id}", "action_code_post_id" => @target.id })
|
||||
end
|
||||
|
||||
topic.add_moderator_post(
|
||||
@assigned_by,
|
||||
nil,
|
||||
bump: false,
|
||||
post_type: SiteSetting.assigns_public ? Post.types[:small_action] : Post.types[:whisper],
|
||||
action_code: moderator_post_assign_action_code(assignment, action_code),
|
||||
custom_fields: custom_fields
|
||||
)
|
||||
post_action_code = moderator_post_assign_action_code(assignment, action_code)
|
||||
add_small_action_post(post_action_code, assign_to, note)
|
||||
end
|
||||
|
||||
# Create a webhook event
|
||||
|
@ -385,6 +389,33 @@ class ::Assigner
|
|||
|
||||
private
|
||||
|
||||
def queue_notification(assign_to, skip_small_action_post)
|
||||
Jobs.enqueue(:assign_notification,
|
||||
topic_id: topic.id,
|
||||
post_id: topic_target? ? first_post.id : @target.id,
|
||||
assigned_to_id: assign_to.id,
|
||||
assigned_to_type: assign_to.is_a?(User) ? "User" : "Group",
|
||||
assigned_by_id: @assigned_by.id,
|
||||
skip_small_action_post: skip_small_action_post)
|
||||
end
|
||||
|
||||
def add_small_action_post(action_code, assign_to, note)
|
||||
custom_fields = { "action_code_who" => assign_to.is_a?(User) ? assign_to.username : assign_to.name }
|
||||
|
||||
if post_target?
|
||||
custom_fields.merge!({ "action_code_path" => "/p/#{@target.id}", "action_code_post_id" => @target.id })
|
||||
end
|
||||
|
||||
topic.add_moderator_post(
|
||||
@assigned_by,
|
||||
note,
|
||||
bump: false,
|
||||
post_type: SiteSetting.assigns_public ? Post.types[:small_action] : Post.types[:whisper],
|
||||
action_code: action_code,
|
||||
custom_fields: custom_fields
|
||||
)
|
||||
end
|
||||
|
||||
def publish_assignment(assignment, assign_to, note)
|
||||
serializer = assignment.assigned_to_user? ? BasicUserSerializer : BasicGroupSerializer
|
||||
MessageBus.publish(
|
||||
|
|
|
@ -49,6 +49,11 @@ RSpec.describe Assigner do
|
|||
expect(topic.assignment.note).to eq "tomtom best mom"
|
||||
end
|
||||
|
||||
it "assign with note adds moderator post with note" do
|
||||
expect { assigner.assign(moderator, note: "tomtom best mom") }.to change { topic.posts.count }.by(1)
|
||||
expect(topic.posts.last.raw).to eq "tomtom best mom"
|
||||
end
|
||||
|
||||
it "publishes topic assignment after assign and unassign" do
|
||||
messages = MessageBus.track_publish('/staff/topic-assignment') do
|
||||
assigner = described_class.new(topic, moderator_2)
|
||||
|
@ -269,6 +274,61 @@ RSpec.describe Assigner do
|
|||
described_class.new(secure_category, moderator).assign(moderator)
|
||||
end.to raise_error(Discourse::InvalidAccess)
|
||||
end
|
||||
|
||||
describe "updating notes" do
|
||||
it "does not recreate assignment if no assignee change" do
|
||||
assigner.assign(moderator)
|
||||
|
||||
expect do
|
||||
assigner.assign(moderator, note: "new notes!")
|
||||
end.to_not change { Assignment.last.id }
|
||||
end
|
||||
|
||||
it "updates notes" do
|
||||
assigner.assign(moderator)
|
||||
|
||||
assigner.assign(moderator, note: "new notes!")
|
||||
|
||||
expect(Assignment.last.note).to eq "new notes!"
|
||||
end
|
||||
|
||||
it "queues notification" do
|
||||
assigner.assign(moderator)
|
||||
|
||||
expect_enqueued_with(job: :assign_notification) do
|
||||
assigner.assign(moderator, note: "new notes!")
|
||||
end
|
||||
end
|
||||
|
||||
it "publishes topic assignment with note" do
|
||||
assigner.assign(moderator)
|
||||
|
||||
messages = MessageBus.track_publish('/staff/topic-assignment') do
|
||||
assigner = described_class.new(topic, moderator_2)
|
||||
assigner.assign(moderator, note: "new notes!")
|
||||
end
|
||||
|
||||
expect(messages[0].channel).to eq "/staff/topic-assignment"
|
||||
expect(messages[0].data).to include({
|
||||
type: "assigned",
|
||||
topic_id: topic.id,
|
||||
post_id: false,
|
||||
post_number: false,
|
||||
assigned_type: "User",
|
||||
assigned_to: BasicUserSerializer.new(moderator, scope: Guardian.new, root: false).as_json,
|
||||
assignment_note: "new notes!"
|
||||
})
|
||||
end
|
||||
|
||||
it "adds a note_change small action post" do
|
||||
assigner.assign(moderator)
|
||||
|
||||
assigner.assign(moderator, note: "new notes!")
|
||||
|
||||
small_action_post = topic.posts.last
|
||||
expect(small_action_post.action_code).to eq "note_change"
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
context "assign_self_regex" do
|
||||
|
|
Loading…
Reference in New Issue