Redmineのカレンダーの休日に色を付ける
ふと思い立って、会社のプロジェクトでRedmineを導入してみた(テスト導入的な)。目的はタスク管理+カレンダーによる可視化、プラスアルファで各メンバが持っている作業をもっとアピールして欲しい、です。目的のカレンダー機能ですが、休日に色がつかない模様です。ちょっぴり改造してカレンダーの休日に色を付けてみましたのでメモとして残しておこうと思います。本当は洒落たプラグインを入れたりするのが楽なんでしょうが、会社の環境では外部のネットワークに繋がらないので、ハックしたほうが楽だったりするわけです。
ちなみにデフォルト画面はこんな感じ。当日の黄色とカレンダー表示月以外の灰色はCSSをいじくって若干濃くしています(後述)。
Redmineについて(あまり関係ないので読み飛ばしても)
会社ではかなりクローズドな環境なので外部のネットワークに繋がりません。ので、BitNamiのInstallerを使ってさくっとインストール。
BitNami Redmine:http://bitnami.com/stack/redmine
この記事を執筆するのにあたって、Windows7 64bit+Ruby2↑+sqlite3(のちにMysql)で環境構築しようとしましたが、sqlite3もMysqlもRubyのドライバーがインストール出来ない不具合*1が発生。結局、vmwareにCentOS6.4をインストールして環境構築をしました。
Redmine.JP Blog:http://blog.redmine.jp/articles/2_3/installation_centos/
カレンダーに色を付ける
以下のページを参考にさせて頂いております。
Redmine hack! -カレンダーに休日色を-:http://fmkt.blog65.fc2.com/blog-entry-37.html
まずは祝日を取得できるようにするため、Rubyのdate2ライブラリをインストールします。所定のページからtar.gzをダウンロード、解凍、インストールをするだけです。wgetするファイルはリンク先のページを確認して、最新版になるようにして下さい。BitNami版では、tar.gzを解凍して、Rubyのlibディレクトリあたりに手で配置しました。
date2:http://www.funaba.org/ruby.html#date2
# wget http://www.funaba.org/archive/date2-4.0.19.tar.gz # gunzip date2-4.0.19.tar.gz # tar -xvf date2-4.0.19.tar # cd date2-4.0.19 # ruby install.rb
/redmine-2.3.2/public/stylesheets/application.css
環境構築したマシンによってファイルのパスが若干異なるかもしれませんので、適宜読み替えて下さい。一応、BitNami版(Windows)と通常パッケージ版(Linux)では同じでした。休日の色(.holiday)と、休日+カレンダーの表示月以外となった場合の色(.odd.holiday)を指定します。追加で.odd(表示月以外)と.today(当日)の色を若干濃くしています。行数は参考程度で。
234 .odd {background-color: #e3e4e5;} 235 .even {background-color: #fff;} 236 .holiday {background-color: #ff9999;} 237 .odd.holiday {background-color: #e3e4e5;} ... 665 table.cal td.today {background:#ffff99;}
/redmine-2.3.2/app/views/common/_calendar.html.erb
休日の色を表示するクラスを出力するようにします。10行目でcalendar.holiday?メソッドを呼び出すようにし、休日であれば、「holiday」クラスを出力するようにします。
010 <td class="<%= day.month==calendar.month ? 'even' : 'odd' %><%= ' today' if Date.today == day %><%= ' holiday' if calendar.holiday?(day) %>">
/redmine-2.3.2/lib/redmine/helpers/calendar.rb
最後に、erbから呼び出したメソッド「.holiday?」をCalendarクラスに実装します。dateとdate/holidayのrequireを忘れずに。日本語コメントを入れる場合は、UTF8で保存しましょう。
018 require 'date' 019 require 'date/holiday' ... 068 # 休日(祝日含む)であれば、trueを返却 069 def holiday?(day) 070 071 # 土日であれば、trueを返却 072 # それ以外であれば、処理を続行 073 # 0 = 日曜 ... 6 = 土曜 074 case day.wday 075 when 0 076 return true 077 when 6 078 return true 079 end 080 081 # 祝日であれば、trueを返却 082 # それ以外であれば、falseを返却 083 if day.national_holiday? 084 return true 085 else 086 return false 087 end 088 end
あとはサービスを起動しなおせば、休日が休日色になっているはずです。なお、色の強さは、
当日(黄色)>表示月以外(グレー)>休日(ピンク色)>平日(白)
となっています。その辺はCSSの設定をいじくれば変更できるはずです。お好みでどうぞ。
今回、初めてRubyを触ったのですが、大変軽快でよろしいなと思いましたね。セミコロンを書かないだけでこんなに気楽になるものかと。初めてのRubyなので、Ruby的でない書き方だったらゴメンナサイ。それでは。
*1:自分的不具合だと思ってますが、あんなにボンボン落ちられても困る!