Change The World

changeworldのblogですよん。

Redmine に手を入れずに色々する方法

Redmine Advent Calendar jp 2011 Changeworld on Redmine 11日目の参加記事です。

Redmine に手を入れずに色々する方法について、簡単にご紹介します。

Redmine はプラグインで機能拡張や修正することが意識されています。その結果、 Hook というものが準備されており、手軽に既存の処理に対して色々することが出来ます。

様々な Hookが準備されており、Hookの一覧は以下のコマンドを実行することで確認出来ます。

rake redmine:plugins:hook_list

ここからは具体例をあげて説明しようと思います。通常、チケットの進捗率はステータスに関係がありません。その為、チケットがクローズされているのに、進捗率が0%ということもありえます。これをどうにかして弾こうと思います。上記のコマンドを実行すると、各 Hook が一覧になって表示されます。

app/models/issue.rb:
  * [597] :controller_issues_edit_before_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal})
  * [601] :controller_issues_edit_after_save, { :params => params, :issue => self, :time_entry => @time_entry, :journal => @current_journal})

これはチケット(Issue)を保存する前後に割り込める様に準備されている Hook です。 “チケットがクローズされているのに、進捗率が0%”を回避したいのですから、使うのはcontroller_issues_edit_before_saveになります。

ここからはプラグインの作成についても伝える必要がありますが、プラグイン作成については プラグイン開発ガイド - r-labs - Redmine が詳しいので、そちらを参照してください。

具体的にどういう風にコーディングすれば良いかについては Issue Extensions - r-labs - Redmine で紹介しているプラグインが上記の機能を実装しているプラグインなので、そちらを参照していただければと思います。分かり易くない部分があれば、質問していただければ、回答致します。