Commit e940fbc7c1b322c15f5d5ae878fbd3117e9b98f9

Authored by Dmitriy Zaporozhets
1 parent fa877b63

Add UsersGroup relation to be respected by abilities and Project#team

app/controllers/groups_controller.rb
... ... @@ -64,11 +64,11 @@ class GroupsController < ApplicationController
64 64 def people
65 65 @project = group.projects.find(params[:project_id]) if params[:project_id]
66 66  
67   - @users_groups = group.users_groups
68   -
69 67 if @project
  68 + @members = @project.users_projects
70 69 @team_member = @project.users_projects.new
71 70 else
  71 + @members = group.users_groups
72 72 @team_member = UsersGroup.new
73 73 end
74 74 end
... ...
app/models/ability.rb
... ... @@ -50,6 +50,10 @@ class Ability
50 50 rules << project_admin_rules
51 51 end
52 52  
  53 + if project.group && project.group.owners.include?(user)
  54 + rules << project_admin_rules
  55 + end
  56 +
53 57 rules.flatten
54 58 end
55 59  
... ...
app/models/project_team.rb
... ... @@ -47,23 +47,23 @@ class ProjectTeam
47 47 end
48 48  
49 49 def members
50   - project.users_projects
  50 + fetch_members
51 51 end
52 52  
53 53 def guests
54   - members.guests.map(&:user)
  54 + @guests ||= fetch_members(:guests)
55 55 end
56 56  
57 57 def reporters
58   - members.reporters.map(&:user)
  58 + @reporters ||= fetch_members(:reporters)
59 59 end
60 60  
61 61 def developers
62   - members.developers.map(&:user)
  62 + @developers ||= fetch_members(:developers)
63 63 end
64 64  
65 65 def masters
66   - members.masters.map(&:user)
  66 + @masters ||= fetch_members(:masters)
67 67 end
68 68  
69 69 def import(source_project)
... ... @@ -96,4 +96,18 @@ class ProjectTeam
96 96 rescue
97 97 false
98 98 end
  99 +
  100 + private
  101 +
  102 + def fetch_members(level = nil)
  103 + project_members = project.users_projects
  104 + group_members = project.group.users_groups
  105 +
  106 + if level
  107 + project_members = project_members.send(level)
  108 + group_members = group_members.send(level)
  109 + end
  110 +
  111 + (project_members + group_members).map(&:user).uniq
  112 + end
99 113 end
... ...
app/models/users_group.rb
... ... @@ -35,7 +35,7 @@ class UsersGroup &lt; ActiveRecord::Base
35 35  
36 36 delegate :name, :username, :email, to: :user, prefix: true
37 37  
38   - def human_group_access
  38 + def human_access
39 39 UsersGroup.group_access_roles.index(self.group_access)
40 40 end
41 41 end
... ...
app/models/users_project.rb
... ... @@ -129,9 +129,7 @@ class UsersProject &lt; ActiveRecord::Base
129 129 Project.access_options.key(self.project_access)
130 130 end
131 131  
132   - def repo_access_human
133   - self.class.access_roles.invert[self.project_access]
134   - end
  132 + alias_method :human_access, :project_access_human
135 133  
136 134 def skip_git?
137 135 !!@skip_git
... ...
app/services/system_hooks_service.rb
... ... @@ -43,7 +43,7 @@ class SystemHooksService
43 43 project_id: model.project_id,
44 44 user_name: model.user.name,
45 45 user_email: model.user.email,
46   - project_access: model.repo_access_human
  46 + project_access: model.project_access_human
47 47 })
48 48 end
49 49 end
... ...
app/views/groups/_new_group_member.html.haml
1 1 = form_for @team_member, as: :team_member, url: team_members_group_path(@group) do |f|
2 2 %fieldset
3   - %legend= "New Team member(s) for projects in #{@group.name}"
  3 + %legend= "New Group member(s) for #{@group.name}"
4 4  
5   - %h6 1. Choose people you want in the team
  5 + %h6 1. Choose people you want in the group
6 6 .clearfix
7 7 = f.label :user_ids, "People"
8 8 .input= users_select_tag(:user_ids, multiple: true)
... ...
app/views/groups/_new_member.html.haml
1 1 = form_for @team_member, as: :team_member, url: project_team_members_path(@project, @team_member) do |f|
2 2 %fieldset
3   - %legend= "New Team member(s) for #{@project.name}"
  3 + %legend= "New Project member(s) for #{@project.name}"
4 4  
5   - %h6 1. Choose people you want in the team
  5 + %h6 1. Choose people you want in the project
6 6 .clearfix
7 7 = f.label :user_ids, "People"
8 8 .input= users_select_tag(:user_ids, multiple: true)
... ... @@ -14,5 +14,5 @@
14 14  
15 15 .form-actions
16 16 = hidden_field_tag :redirect_to, people_group_path(@group, project_id: @project.id)
17   - = f.submit 'Add', class: "btn btn-save"
  17 + = f.submit 'Add users into project', class: "btn btn-create"
18 18  
... ...
app/views/groups/_people_filter.html.haml
  1 +%fieldset
  2 + %legend Group members:
  3 + %ul.nav.nav-pills.nav-stacked
  4 + %li{class: ("active" if params[:project_id].blank?)}
  5 + = link_to people_group_path(@group) do
  6 + #{@group.name} Group
  7 + %small.pull-right= @group.users.count
  8 +
  9 +
1 10 = form_tag people_group_path(@group), method: 'get' do
2 11 %fieldset
3   - %legend Projects:
  12 + %legend Project members:
4 13 %ul.nav.nav-pills.nav-stacked
5 14 - @projects.each do |project|
6 15 %li{class: ("active" if params[:project_id] == project.id.to_s)}
... ... @@ -10,7 +19,4 @@
10 19 - if @projects.blank?
11 20 %p.nothing_here_message This group has no projects yet
12 21  
13   - %fieldset
14   - %hr
15   - = link_to "Reset", people_group_path(@group), class: 'btn pull-right'
16 22  
... ...
app/views/groups/people.html.haml
... ... @@ -6,12 +6,18 @@
6 6 = render (@project ? "new_member" : "new_group_member")
7 7 .ui-box
8 8 %h5.title
9   - #{@group.name} Team
10   - %small
11   - (#{@users_groups.count})
  9 + - if @project
  10 + #{@project.name} Project Members
  11 + %small
  12 + (#{@members.count})
  13 + - else
  14 + #{@group.name} Group Members
  15 + %small
  16 + (#{@members.count})
12 17 %ul.well-list
13   - - @users_groups.each do |users_group|
14   - - user = users_group.user
  18 + - @members.each do |member|
  19 + - user = member.user
  20 + - next unless user
15 21 %li
16 22 = image_tag gravatar_icon(user.email, 16), class: "avatar s16"
17 23 %strong= user.name
... ... @@ -21,5 +27,5 @@
21 27 - if @group.owners.include?(user)
22 28 %span.label.label-info Group Owner
23 29 - else
24   - = users_group.human_group_access
  30 + = member.human_access
25 31  
... ...