diff --git a/lib/redmine_messenger/hooks.rb b/lib/redmine_messenger/hooks.rb index fd8d324..189c9c8 100644 --- a/lib/redmine_messenger/hooks.rb +++ b/lib/redmine_messenger/hooks.rb @@ -2,65 +2,6 @@ module RedmineMessenger class MessengerListener < Redmine::Hook::Listener - def redmine_rocketchat_issues_new_after_save(context = {}) - issue = context[:issue] - - channels = Messenger.channels_for_project issue.project - url = Messenger.url_for_project issue.project - post_private_issues = Messenger.post_private_issues_for_project(issue.project) - - return unless channels.present? && url - return if issue.is_private? && post_private_issues != '1' - - msg = "[#{ERB::Util.html_escape(issue.project)}] #{ERB::Util.html_escape(issue.author)} created <#{Messenger.object_url issue}|#{ERB::Util.html_escape(issue)}>#{Messenger.mentions issue.description if RedmineMessenger.settings[:auto_mentions] == '1'}" - - attachment = {} - attachment[:text] = ERB::Util.html_escape(issue.description) if issue.description && RedmineMessenger.settings[:new_include_description] == '1' - attachment[:fields] = [{ - title: I18n.t(:field_status), - value: ERB::Util.html_escape(issue.status.to_s), - short: true - }, { - title: I18n.t(:field_priority), - value: ERB::Util.html_escape(issue.priority.to_s), - short: true - }, { - title: I18n.t(:field_assigned_to), - value: ERB::Util.html_escape(issue.assigned_to.to_s), - short: true - }] - - attachment[:fields] << { - title: I18n.t(:field_watcher), - value: ERB::Util.html_escape(issue.watcher_users.join(', ')), - short: true - } if RedmineMessenger.settings[:display_watchers] == '1' - - speak msg, channels, attachment, url - end - - def redmine_rocketchat_issues_edit_after_save(context={}) - issue = context[:issue] - journal = context[:journal] - - channels = Messenger.channels_for_project issue.project - url = Messenger.url_for_project issue.project - post_private_issues = Messenger.post_private_issues_for_project(issue.project) - post_private_notes = Messenger.post_private_notes_for_project(issue.project) - - return unless channels.present? && url && RedmineMessenger.settings[:post_updates] == '1' - return if issue.is_private? && post_private_issues != '1' - return if journal.private_notes? && post_private_notes != '1' - - msg = "[#{ERB::Util.html_escape(issue.project)}] #{ERB::Util.html_escape(journal.user.to_s)} updated <#{Messenger.object_url issue}|#{ERB::Util.html_escape(issue)}>#{Messenger.mentions journal.notes if RedmineMessenger.settings[:auto_mentions] == '1'}" - - attachment = {} - attachment[:text] = ERB::Util.html_escape(journal.notes) if journal.notes && RedmineMessenger.settings[:updated_include_description] == '1' - attachment[:fields] = journal.details.map { |d| Messenger.detail_to_field d } - - speak msg, channels, attachment, url - end - def model_changeset_scan_commit_for_issue_ids_pre_issue_update(context = {}) issue = context[:issue] journal = issue.current_journal @@ -106,7 +47,7 @@ module RedmineMessenger attachment[:text] = ll(Setting.default_language, :text_status_changed_by_changeset, "<#{revision_url}|#{ERB::Util.html_escape(changeset.comments)}>") attachment[:fields] = journal.details.map { |d| Messenger.detail_to_field d } - speak msg, channels, attachment, url + Messenger.speak msg, channels, attachment, url end def controller_wiki_edit_after_save(context = {}) @@ -131,7 +72,7 @@ module RedmineMessenger attachment[:text] = "#{ERB::Util.html_escape(page.content.comments)}" end - speak comment, channels, attachment, url + Messenger.speak comment, channels, attachment, url end end end diff --git a/lib/redmine_messenger/patches/issue_patch.rb b/lib/redmine_messenger/patches/issue_patch.rb index 8f6f0ac..6836891 100644 --- a/lib/redmine_messenger/patches/issue_patch.rb +++ b/lib/redmine_messenger/patches/issue_patch.rb @@ -3,26 +3,73 @@ module RedmineMessenger module Patches module IssuePatch - def self.included(base) # :nodoc: + def self.included(base) base.send(:include, InstanceMethods) base.class_eval do - after_create :create_from_issue - after_save :save_from_issue + after_create :send_messenger_create + after_save :send_messenger_save end end module InstanceMethods - def create_from_issue - @create_already_fired = true - Redmine::Hook.call_hook(:redmine_rocketchat_issues_new_after_save, issue: self) - true + def send_messenger_create + channels = Messenger.channels_for_project project + url = Messenger.url_for_project project + post_private_issues = Messenger.post_private_issues_for_project(project) + + return unless channels.present? && url + return if is_private? && post_private_issues != '1' + + msg = "[#{ERB::Util.html_escape(project)}] #{ERB::Util.html_escape(author)} created <#{Messenger.object_url(self)}|#{ERB::Util.html_escape(self)}>#{Messenger.mentions description if RedmineMessenger.settings[:auto_mentions] == '1'}" + + attachment = {} + attachment[:text] = ERB::Util.html_escape(description) if description && RedmineMessenger.settings[:new_include_description] == '1' + attachment[:fields] = [{ + title: I18n.t(:field_status), + value: ERB::Util.html_escape(status.to_s), + short: true + }, { + title: I18n.t(:field_priority), + value: ERB::Util.html_escape(priority.to_s), + short: true + }, { + title: I18n.t(:field_assigned_to), + value: ERB::Util.html_escape(assigned_to.to_s), + short: true + }] + + if RedmineMessenger.settings[:display_watchers] == '1' + attachment[:fields] << { + title: I18n.t(:field_watcher), + value: ERB::Util.html_escape(watcher_users.join(', ')), + short: true + } + end + + Messenger.speak msg, channels, attachment, url end - def save_from_issue - unless @create_already_fired - Redmine::Hook.call_hook(:redmine_rocketchat_issues_edit_after_save, issue: self, journal: self.current_journal) unless self.current_journal.nil? + def send_messenger_save + return if current_journal.nil? + + channels = Messenger.channels_for_project project + url = Messenger.url_for_project project + post_private_issues = Messenger.post_private_issues_for_project(project) + post_private_notes = Messenger.post_private_notes_for_project(project) + + return unless channels.present? && url && RedmineMessenger.settings[:post_updates] == '1' + return if is_private? && post_private_issues != '1' + return if current_journal.private_notes? && post_private_notes != '1' + + msg = "[#{ERB::Util.html_escape(project)}] #{ERB::Util.html_escape(current_journal.user.to_s)} updated <#{Messenger.object_url self}|#{ERB::Util.html_escape(self)}>#{Messenger.mentions current_journal.notes if RedmineMessenger.settings[:auto_mentions] == '1'}" + + attachment = {} + if current_journal.notes && RedmineMessenger.settings[:updated_include_description] == '1' + attachment[:text] = ERB::Util.html_escape(current_journal.notes) end - true + attachment[:fields] = current_journal.details.map { |d| Messenger.detail_to_field d } + + Messenger.speak msg, channels, attachment, url end end end