Use issues without hooks

This commit is contained in:
Alexander Meindl
2017-05-10 10:52:21 +02:00
parent f25dda021e
commit 69a4070dcb
2 changed files with 60 additions and 72 deletions

View File

@@ -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

View File

@@ -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