Redmineのカレンダーで祝日を表示する

2013-01-30追記

本体のコードを修正しないで済むようにプラグイン化しました。 記事はこちら↓

Redmineのカレンダーに祝日を表示するプラグインを作りました - taktosの日記

基本的には以下のサイトと同じですが、祝日名を表示したいので、祝日判定にholidaysを使います。

http://suwork.hatenablog.com/entry/2013/09/04/003647

カレンダー表示時のクラス追加

holidaysのgemを入れます(redmine_backlogsプラグインが使うものでOK)

$ gem install holidays

カレンダー表示を書き換えて、祝日のとき(ついでに土日も)「holiday」クラスを追加します。

diff --git a/app/views/common/_calendar.html.erb b/app/views/common/_calendar.html.erb
index 7951b68..6fafcae 100644
--- a/app/views/common/_calendar.html.erb
+++ b/app/views/common/_calendar.html.erb
@@ -7,8 +7,11 @@
 <% day = calendar.startdt
 while day <= calendar.enddt %>
 <%= ("<td class='week-number' title='#{ l(:label_week) }'>#{(day+(11-day.cwday)%7).cweek}</td>".html_safe) if day.cwday == calendar.first_wday %>
-<td class="<%= day.month==calendar.month ? 'even' : 'odd' %><%= ' today' if Date.today == day %>">
-<p class="day-num"><%= day.day %></p>
+<td class="<%= day.month==calendar.month ? 'even' : 'odd' %><%= ' today' if Date.today == day %><%= ' holiday' if day.holiday?(:jp) || day.wday == 0 || day.wday == 6 %>">
+<p class="day-num">
+<% if day.holiday?(:jp) %><span style="float:left; padding: 1px;"><%= day.holidays(:jp).first[:name] %></span><% end %>
+<%= day.day %>
+</p>
 <% calendar.events_on(day).each do |i| %>
   <% if i.is_a? Issue %>
   <div class="<%= i.css_classes %> <%= 'starting' if day == i.start_date %> <%= 'ending' if day == i.due_date %> tooltip">

css修正

application.css など適当なCSSに、holidayクラスを追加します。

/* holiday */
table.cal td.odd.holiday {
    background-color: #e3e4e5;
}
table.cal td.even.holiday {
    background-color: #ff9999;
}