Redmineカスタマイズその7 ユーザ活動履歴プルダウン追加

カスタマイズその7。*1
プロジェクト概要の「メンバー一覧」から選択すればユーザ活動見れますが、
いつでもどこでも簡単に選択できると使い勝手が良いのでは?
と思い立ちましたのでカスタマイズしてみました。

$RAILS_ROOT/app/views/layouts/base.rhtml

--- redmine-0.8.0_RC1-org/app/views/layouts/base.rhtml  2008-12-07 20:10:23.000000000 +0900
+++ redmine-0.8.0_RC1/app/views/layouts/base.rhtml      2009-02-15 13:49:37.000000000 +0900
@@ -35,6 +35,9 @@
         <%= text_field_tag 'q', @question, :size => 20, :class => 'small', :accesskey => accesskey(:quick_search) %>
         <% end %>
         <%= render :partial => 'layouts/project_selector' if User.current.memberships.any? %>
+        <div style="margin-top: 5px; text-align:right;">
+          <%= render :partial => 'layouts/user_selector' if User.current.memberships.any? %>
+        </div>
     </div>

     <h1><%= h(@project && !@project.new_record? ? @project.name : Setting.app_title) %></h1>

htmlのテンプレートとなるbase.htmlを編集します。
プロジェクト選択プルダウンの下辺りに
「_user_selector.rhtml」を追加しています。

$RAILS_ROOT/app/views/layouts/_user_selector.rhtml(新規追加)

<% if @project %>
  <%= l(:label_user) %>:
  <select onchange="if (this.value != '') { window.location = this.value; }">
  <option selected="selected"><%= l(:label_user) %>...</option>
  <option disabled="disabled">---</option>
  <%= content_tag('option', l(:label_me), :value => url_for(:controller => 'projects', :action => 'activity', :user_id => User.current.id)) %>

  <% members = @project.members.find(:all, :include => [:role, :user]).sort %>
  <% if members.any? %>
   <% members.each do |member| %>
     <% if member.user_id != User.current.id %>
       <%= content_tag('option', ('&#187; ' + h(member.name)), :value => url_for(:controller => 'projects', :action => 'activity', :user_id => member.user_id)) %>
     <% end %>
   <% end %>
  <% end %>
  </select>
<% end %>

ユーザ一覧プルダウンリストを作り出すためのrhtmlです。
最初に自分のIDで活動リンクを作り、
以下のループでは自分のID以外の活動リンクを作っています。
このプルダウンに表示されるのはプロジェクトメンバーの一覧になります。
ちなみにこのパッチでは除外していますが、
僕の会社で当ててるパッチではelse文を追加して、
Redmineホームのページでも全ユーザ分を表示するようにカスタマイズしています。


画面イメージはこんな感じ。

*1:0.8.0-RC1対象