optionally apply a regex to post body when assigning stuff out

This commit is contained in:
Sam Saffron 2017-02-21 11:26:45 -05:00
parent 581e47055c
commit d7c74701f2
3 changed files with 28 additions and 2 deletions

View File

@ -4,6 +4,8 @@ en:
assigns_user_url_path: "Path to link all user links for assigned (use: {username} to subtitue username)"
assigns_by_staff_mention: "If a staff member mentions another staff member, topic is automatically assigned"
unassign_creates_tracking_post: "If you unassign a topic a whisper or small action will be created to track change"
assign_self_regex: "Regex that needs to pass for self assign. Example 'my list'"
assign_other_regex: "Regex that needs to pass for assigning topics to others via mention. Example 'your list'."
discourse_assign:
assigned_to: "Topic assigned to @%{username}"
unassigned: "Topic was unassigned"

View File

@ -2,6 +2,8 @@ plugins:
assigns_by_staff_mention: false
unassign_creates_tracking_post: true
assigns_public: false
assign_self_regex: ""
assign_other_regex: ""
assigns_user_url_path:
client: true
default: "/latest?assigned={username}"

View File

@ -45,14 +45,36 @@ SQL
puts "#{assigned} topics where automatically assigned to staff members"
end
def self.assign_self_passes?(post)
return false unless SiteSetting.assign_self_regex.present?
regex = Regexp.new(SiteSetting.assign_self_regex) rescue nil
!!(regex && regex.match(post.raw))
end
def self.assign_other_passes?(post)
return true unless SiteSetting.assign_other_regex.present?
regex = Regexp.new(SiteSetting.assign_other_regex) rescue nil
!!(regex && regex.match(post.raw))
end
def self.auto_assign(post, force: false)
return unless SiteSetting.assigns_by_staff_mention
if post.user && post.topic && post.user.staff?
can_assign = force || post.topic.custom_fields["assigned_to_id"].nil?
if can_assign && is_last_staff_post?(post) && user = mentioned_staff(post)
assign_other = assign_other_passes?(post) && mentioned_staff(post)
assign_self = assign_self_passes?(post) && post.user
if can_assign && is_last_staff_post?(post)
assigner = new(post.topic, post.user)
assigner.assign(user, silent: true)
if assign_other
assigner.assign(assign_other, silent: true)
elsif assign_self
assigner.assign(assign_self, silent: true)
end
end
end
end