Redmineでトラッカー毎にデフォルトステータスを変える(View customize plugin)

もうすぐ出るRedmineの3.0で解消するとのことですが、、3.0にすぐにあげられない方に向けて、Redmineでトラッカー毎にデフォルトステータスを設定する方法をView customize pluginを使って考えてみました。

対処方法

今回の変更を行うにあたって気を付けなければならないのは、チケット画面のフォームは、選択項目の変更によって中身を丸ごと差し替える場合があるということです。
たとえば、トラッカーを切り替えると、フォーム自体の置き換え(DOMが破棄されて別のDOMが追加される)が発生します。これは、トラッカー毎に選択可能な項目が変わるため、その情報をサーバ側から取り出して、それでフォーム自体を差し替えるような形となっているからです。
そのため、トラッカーの切り替えのタイミングでステータスの選択項目を切り替えるためには、フォーム自体の置き換えが終わってから行わなければなりません。
今回は、これを行うために、フォームの差し替え処理を行っている関数(application.jsのreplaceIssueFormWith関数)を差し替えて、フォームの差し替え後にトラッカーの切り替えによるフォームの差し替えならば、ステータスも変えるといった処理を行うようにしました。

あと、画面のロード完了時にoptionのselectedの情報をもとに、選択項目を再設定する処理があったので、選択項目の変更時は、明示的にselected属性で行うように変えています。

設定内容

View customize pluginでの設定内容は下記のようになりました。

Path pattern

新規チケット作成画面だけを対象にします。

/issues/new
Type、Code

Type:JavaScript として、下記スクリプトを登録します。

setDefaultStatus関数のtracker_idとstatus_idのマッピング部分は、対応させたいトラッカーとステータスに応じて変更してください。

なお、動作確認はRedmine 2.5.2 で行っており、画面構成が変わったり、関数名が変わったりすると動かなくなる可能性がありますので、ご注意ください。

Change default status by tracker (Redmine view cus ...

おわりに

簡単にできると思って手を付けたのですが、結構はまって時間がかかってしまいました…

Redmineはどんどん進化しており、こういった部分もちゃんと標準の機能として改善されていくのはすばらしいですね!