Hooks for plugins

This feature is just an idea, I don't have any particular application driving the requirement, although I think it could be used to allow people a bit more flexibility in implementing some of the feature requests into non-core plugins.

The technical requirements would be pre- and post-xxx hook functions defined around the major functions. Combined with ruby's ability to inject code into classes and redefine functions on the fly, I could create a module that customized the behavior of the system in small ways without patching the code directly.

For example, with a pre-issue-change hook I could implement issue reassignment based on the current state of the issue, so that new issues always went to the same person for triage, then when the bug is accepted it's assigned to the normal user-per-category. Then when resolved it could automatically get reassigned to QA person.

All it would take is some dummy functions that get fed pertinent data, which would allow a plugin writer to redefine for their own purposes.

History

I've been thinking about this a lot lately and it's one thing that I think Wordpress did good on. A practical example would be allow a plugin to hook into the issue edit page to render some extra HTML after the main form. I'd like to just be able to hook into it like:

Redmine.hooks[:post_issue_edit] << MyPluginController.action

Jean-Philippe Lang, I have a plugin coming up that we could use as an experiment for this API.

I wanted to post an update to this feature. I have successfully added hooks into Redmine and the Redmine Plugin API. It still needs some cleaning up before release but it's working great for a plugin I'm writting. Similar to Wordpress plugins, you can have a hook that inserts HTML or does an action. The plugin registers for a hook buy passing in a Ruby Proc to the add_hook method: