From da2854cf750b2a848a250491aac17751cb596182 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Lang Date: Tue, 12 May 2009 19:04:52 +0000 Subject: [PATCH] Display all users roles on project overview (#3339). git-svn-id: svn+ssh://rubyforge.org/var/svn/redmine/trunk@2734 e93f8b46-1217-0410-a6f0-8f06a7374b81 --- app/controllers/projects_controller.rb | 2 +- app/models/project.rb | 11 +++++++++++ app/views/projects/show.rhtml | 8 +++----- test/unit/project_test.rb | 8 ++++++++ 4 files changed, 23 insertions(+), 6 deletions(-) diff --git a/app/controllers/projects_controller.rb b/app/controllers/projects_controller.rb index 3f29e4e4..0dcc874c 100644 --- a/app/controllers/projects_controller.rb +++ b/app/controllers/projects_controller.rb @@ -112,7 +112,7 @@ class ProjectsController < ApplicationController redirect_to_project_menu_item(@project, params[:jump]) && return end - @members_by_role = @project.members.find(:all, :include => [:user, :roles], :order => 'position').group_by {|m| m.roles.first} + @users_by_role = @project.users_by_role @subprojects = @project.children.visible @news = @project.news.find(:all, :limit => 5, :include => [ :author, :project ], :order => "#{News.table_name}.created_on DESC") @trackers = @project.rolled_up_trackers diff --git a/app/models/project.rb b/app/models/project.rb index 64a5e98c..b022ed96 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -245,6 +245,17 @@ class Project < ActiveRecord::Base :order => "#{Tracker.table_name}.position") end + # Returns a hash of project users grouped by role + def users_by_role + members.find(:all, :include => [:user, :roles]).inject({}) do |h, m| + m.roles.each do |r| + h[r] ||= [] + h[r] << m.user + end + h + end + end + # Deletes all project's members def delete_all_members me, mr = Member.table_name, MemberRole.table_name diff --git a/app/views/projects/show.rhtml b/app/views/projects/show.rhtml index 304fe5d6..4e068a5d 100644 --- a/app/views/projects/show.rhtml +++ b/app/views/projects/show.rhtml @@ -35,13 +35,11 @@
- <% if @members_by_role.any? %> + <% if @users_by_role.any? %>

<%=l(:label_member_plural)%>

-

<% @members_by_role.keys.sort.each do |role| %> - <%= role.name %>: - <%= @members_by_role[role].collect(&:user).sort.collect{|u| link_to_user u}.join(", ") %> -
+

<% @users_by_role.keys.sort.each do |role| %> + <%= role.name %>: <%= @users_by_role[role].sort.collect{|u| link_to_user u}.join(", ") %>
<% end %>

<% end %> diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index 4ecd9d4a..1ea5c198 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -186,6 +186,14 @@ class ProjectTest < Test::Unit::TestCase assert_equal [5, 6, 3, 4], d.collect(&:id) end + def test_users_by_role + users_by_role = Project.find(1).users_by_role + assert_kind_of Hash, users_by_role + role = Role.find(1) + assert_kind_of Array, users_by_role[role] + assert users_by_role[role].include?(User.find(2)) + end + def test_rolled_up_trackers parent = Project.find(1) parent.trackers = Tracker.find([1,2])