diff --git a/init.rb b/init.rb index 3baa790..1bc4456 100644 --- a/init.rb +++ b/init.rb @@ -8,7 +8,7 @@ Redmine::Plugin.register :redmine_mattermost do url 'https://github.com/altsol/redmine_mattermost' author_url 'http://altsol.gr' description 'Mattermost chat integration' - version '0.2' + version '0.3' requires_redmine :version_or_higher => '2.0.0' @@ -22,3 +22,10 @@ Redmine::Plugin.register :redmine_mattermost do }, :partial => 'settings/mattermost_settings' end + +ActionDispatch::Callbacks.to_prepare do + require_dependency 'issue' + unless Issue.included_modules.include? RedmineMattermost::IssuePatch + Issue.send(:include, RedmineMattermost::IssuePatch) + end +end diff --git a/lib/redmine_mattermost/issue_patch.rb b/lib/redmine_mattermost/issue_patch.rb new file mode 100644 index 0000000..9dd5148 --- /dev/null +++ b/lib/redmine_mattermost/issue_patch.rb @@ -0,0 +1,35 @@ +module RedmineMattermost + module IssuePatch + def self.included(base) # :nodoc: + base.extend(ClassMethods) + base.send(:include, InstanceMethods) + + base.class_eval do + unloadable # Send unloadable so it will not be unloaded in development + after_create :create_from_issue + after_save :save_from_issue + end + end + + module ClassMethods + end + + module InstanceMethods + def create_from_issue + self.reload + @create_already_fired = true + Redmine::Hook.call_hook(:redmine_mattermost_issues_new_after_save, { :issue => self}) + return true + end + + def save_from_issue + self.reload + if not @create_already_fired + Redmine::Hook.call_hook(:redmine_mattermost_issues_edit_after_save, { :issue => self, :journal => self.current_journal}) + end + return true + end + + end + end +end diff --git a/lib/redmine_mattermost/listener.rb b/lib/redmine_mattermost/listener.rb index 4f8e5e1..dcf3306 100644 --- a/lib/redmine_mattermost/listener.rb +++ b/lib/redmine_mattermost/listener.rb @@ -1,7 +1,7 @@ require 'httpclient' class MattermostListener < Redmine::Hook::Listener - def controller_issues_new_after_save(context={}) + def redmine_mattermost_issues_new_after_save(context={}) issue = context[:issue] channel = channel_for_project issue.project @@ -37,7 +37,7 @@ class MattermostListener < Redmine::Hook::Listener speak msg, channel, attachment, url end - def controller_issues_edit_after_save(context={}) + def redmine_mattermost_issues_edit_after_save(context={}) issue = context[:issue] journal = context[:journal]