カレンダー表示でチケットのカテゴリに応じて背景色を変える

これは Redmine Advent Calendar jp: 2011 の14日目の記事です。
今日記事を書きそこなったときの保険として昨日「Redmineで冷蔵庫内食品賞味期限管理」という記事も書きましたのでついでにご覧ください。

さて本題。

今週一週間何曜日にどんなチケットの期日がくるか一覧するにはカレンダー表示が便利です。
デフォルトではすべてチケットの背景色は同じで題名を読んでみないと区別ができません。

実はカレンダー表示で(チケット一覧表示ででもですが)はチケット毎に

<a href="/redmine/issues/123" class="issue status-1 priority-2 overdue created-by-me">

のようにステータスと重要度のクラスがすでに設定されていますのでそれに合わせて public/styleseets/application.css にスタイルを記述すると色や見た目を変えることができます。

でも「うちはステータスや重要度での分類とはちょっと違うんだ。カテゴリを【打ち合わせ】【作業】とかで分類してそれで背景色変えたいんだよね」というとこありますよね。(あるということにしてください)
そういうときは次の簡単なパッチで対応できます。

バージョン0.9系以降

--- app/models/issue.rb.org
+++ app/models/issue.rb
@@ -565,5 +565,5 @@
   # Returns a string of css classes that apply to the issue
   def css_classes
-    s = "issue status-#{status.position} priority-#{priority.position}"
+    s = "issue #{"category-"+category.id.to_s if category} status-#{status.position} priority-#{priority.position}"
     s << ' closed' if closed?
     s << ' overdue' if overdue?

これによってカレンダー表示での出力に

<a href="/redmine/issues/123" class="issue category-10 status-1 priority-2 overdue created-by-me">

のように「category-数」が追加されます。

こうしておいて public/stylesheets/application.css

table.cal div.category-10 {background:#ffcccc;}
table.cal div.category-11 {background:#ccccff;}

のような記述を追加するとカテゴリーに応じて背景色を変えることができます。
「table.cal」の部分はカレンダー表示のときだけ色を変えるためです。

category-10, status-1, priority-2 などハイフンの後ろの数字はそれぞれの値に割り振られる内部番号値です。

あー、討ち入りに行かないといけないので時間がない。
討ち入りから帰ってきたらもうちょっと修正します。

-- 追記 --

討ち入りに時間がかかって14日のうちに修正できませんでしたので補足します。

バージョン0.8系では修正するファイルも修正内容も少し違い以下のパッチになります。

--- app/helpers/issues_helper.rb.org
+++ app/helpers/issues_helper.rb
@@ -36,5 +36,5 @@
   # Returns a string of css classes that apply to the given issue
   def css_issue_classes(issue)
-    s = "issue status-#{issue.status.position} priority-#{issue.priority.position}"
+    s = "issue #{"category-"+issue.category.id.to_s if issue.category} status-#{issue.status.position}
     s << ' closed' if issue.closed?
     s << ' overdue' if issue.overdue?

category-10 などのハイフンの後ろの数字がどのカテゴリー値に対応しているか調べるには「新しいチケット」を実行しブラウザ機能の「ソースを表示」させると

<p><label for="issue_category_id">カテゴリ</label><select id="issue_category_id" name="issue[category_id]"><option value="" selected="selected"></option>
<option value="10">打ち合わせ</option>
<option value="11">作業</option>

のように【打ち合わせ】には 10 が、【作業】には 11 が対応することがわかります。
(他にもっと簡単に調べる方法はありませんかね?)