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