From: Eric Davis Date: Tue, 27 May 2008 23:04:50 +0000 (-0700) Subject: Adding Redmine::Plugin::Hook class to register and use hooks X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=404e6164cb31f4840d890ec6eb2d0e50396d87af;p=redmine.git Adding Redmine::Plugin::Hook class to register and use hooks #1147 --- diff --git a/lib/redmine/plugin.rb b/lib/redmine/plugin.rb index 36632c13e..32ec29dae 100644 --- a/lib/redmine/plugin.rb +++ b/lib/redmine/plugin.rb @@ -116,10 +116,61 @@ module Redmine #:nodoc: self.instance_eval(&block) @project_module = nil end + + def add_hook(hook_name, method) + Redmine::Plugin::Hook.add_listener(hook_name, method) + end # Returns +true+ if the plugin can be configured. def configurable? settings && settings.is_a?(Hash) && !settings[:partial].blank? end + + # TODO: Doc + class Hook + + # Hooks and the procs added + @@hooks = { + :issue_show => [], + :issue_edit => [], + :issue_bulk_edit => [], + :issue_update => [], + :project_member_list_header => [], + :project_member_list_column_three => [] + } + + cattr_reader :hooks + + class << self + + # TODO: Doc + def valid_hook?(hook_name) + return @@hooks.has_key?(hook_name) + end + + # TODO: Doc + def add_listener(hook_name, method) + if valid_hook?(hook_name) + @@hooks[hook_name.to_sym] << method + puts "Listener added for #{hook_name.to_s}" + end + end + + # TODO: Doc + def call_hook(hook_name, context = { }) + response = '' + @@hooks[hook_name.to_sym].each do |method| + response += method.call(context) + end + response + end + + # TODO: Doc + def hook_registered?(hook_name) + return @@hooks[hook_name.to_sym].size > 0 + end + end + + end end end