Project

General

Profile

Feature #33174 » feature-33174.patch

Mizuki ISHIKAWA, 2020-03-19 02:36

View differences:

app/controllers/projects_controller.rb
162 162
      return
163 163
    end
164 164

  
165
    @users_by_role = @project.users_by_role
165
    @principals_by_role = @project.principals_by_role
166 166
    @subprojects = @project.children.visible.to_a
167 167
    @news = @project.news.limit(5).includes(:author, :project).reorder("#{News.table_name}.created_on DESC").to_a
168 168
    @trackers = @project.rolled_up_trackers.visible
app/models/project.rb
507 507
    end
508 508
  end
509 509

  
510
  # Returns a hash of project users grouped by role
511
  def users_by_role
512
    members.includes(:user, :roles).inject({}) do |h, m|
510
  # Returns a hash of project users/groups grouped by role
511
  def principals_by_role
512
    memberships.includes(:principal, :roles).inject({}) do |h, m|
513 513
      m.roles.each do |r|
514 514
        h[r] ||= []
515
        h[r] << m.user
515
        h[r] << m.principal
516 516
      end
517 517
      h
518 518
    end
app/views/projects/_members_box.html.erb
1
  <% if @users_by_role.any? %>
1
  <% if @principals_by_role.any? %>
2 2
  <div class="members box">
3 3
    <h3 class="icon icon-group"><%=l(:label_member_plural)%></h3>
4
    <% @users_by_role.keys.sort.each do |role| %>
5
      <p><span class="label"><%= role %>:</span> <%= @users_by_role[role].sort.collect{|u| link_to_user u}.join(", ").html_safe %></p>
4
    <% @principals_by_role.keys.sort.each do |role| %>
5
      <p><span class="label"><%= role %>:</span> <%= @principals_by_role[role].sort.collect{|p| link_to_user p}.join(", ").html_safe %></p>
6 6
    <% end %>
7 7
  </div>
8 8
  <% end %>
test/unit/project_test.rb
455 455
    assert Project.find(3).allowed_parents.include?(nil)
456 456
  end
457 457

  
458
  def test_users_by_role
459
    users_by_role = Project.find(1).users_by_role
460
    assert_kind_of Hash, users_by_role
458
  def test_principals_by_role
459
    group = Group.find(10)
460
    Member.create!(:principal => group, :project_id => 1, :role_ids => [1])
461

  
462
    principals_by_role = Project.find(1).principals_by_role
463
    assert_kind_of Hash, principals_by_role
461 464
    role = Role.find(1)
462
    assert_kind_of Array, users_by_role[role]
463
    assert users_by_role[role].include?(User.find(2))
465
    assert_kind_of Array, principals_by_role[role]
466
    assert principals_by_role[role].include?(User.find(2))
467
    assert principals_by_role[role].include?(group)
464 468
  end
465 469

  
466 470
  def test_rolled_up_trackers
(2-2/4)