Commit f6f414ce3b8c252779e78cfd1a6470dc03e2e374

Authored by Andrey Kumanyaev
Committed by Dmitriy Zaporozhets
1 parent ccf8fa4f

refactoring project team members controller (corresponding mental model)

app/controllers/team_members_controller.rb
... ... @@ -7,12 +7,12 @@ class TeamMembersController < ProjectResourceController
7 7 end
8 8  
9 9 def show
10   - @team_member = project.users_projects.find(params[:id])
11   - @events = @team_member.user.recent_events.where(:project_id => @project.id).limit(7)
  10 + @user_project_relation = project.users_projects.find_by_user_id(member)
  11 + @events = member.recent_events.in_projects(project).limit(7)
12 12 end
13 13  
14 14 def new
15   - @team_member = project.users_projects.new
  15 + @user_project_relation = project.users_projects.new
16 16 end
17 17  
18 18 def create
... ... @@ -28,18 +28,18 @@ class TeamMembersController < ProjectResourceController
28 28 end
29 29  
30 30 def update
31   - @team_member = project.users_projects.find(params[:id])
32   - @team_member.update_attributes(params[:team_member])
  31 + @user_project_relation = project.users_projects.find_by_user_id(member)
  32 + @user_project_relation.update_attributes(params[:team_member])
33 33  
34   - unless @team_member.valid?
  34 + unless @user_project_relation.valid?
35 35 flash[:alert] = "User should have at least one role"
36 36 end
37 37 redirect_to project_team_index_path(@project)
38 38 end
39 39  
40 40 def destroy
41   - @team_member = project.users_projects.find(params[:id])
42   - @team_member.destroy
  41 + @user_project_relation = project.users_projects.find_by_user_id(params[:id])
  42 + @user_project_relation.destroy
43 43  
44 44 respond_to do |format|
45 45 format.html { redirect_to project_team_index_path(@project) }
... ... @@ -54,4 +54,10 @@ class TeamMembersController < ProjectResourceController
54 54  
55 55 redirect_to project_team_members_path(project), notice: notice
56 56 end
  57 +
  58 + protected
  59 +
  60 + def member
  61 + @member ||= User.find(params[:id])
  62 + end
57 63 end
... ...
app/helpers/projects_helper.rb
... ... @@ -3,8 +3,8 @@ module ProjectsHelper
3 3 @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access)
4 4 end
5 5  
6   - def remove_from_team_message(project, member)
7   - "You are going to remove #{member.user_name} from #{project.name}. Are you sure?"
  6 + def remove_from_project_team_message(project, user)
  7 + "You are going to remove #{user.name} from #{project.name} project team. Are you sure?"
8 8 end
9 9  
10 10 def link_to_project project
... ...
app/views/team_members/_form.html.haml
1 1 %h3.page_title
2 2 = "New Team member(s)"
3 3 %hr
4   -= form_for @team_member, as: :team_member, url: project_team_members_path(@project, @team_member) do |f|
5   - -if @team_member.errors.any?
  4 += form_for @user_project_relation, as: :team_member, url: project_team_members_path(@project) do |f|
  5 + -if @user_project_relation.errors.any?
6 6 .alert-message.block-message.error
7 7 %ul
8   - - @team_member.errors.full_messages.each do |msg|
  8 + - @user_project_relation.errors.full_messages.each do |msg|
9 9 %li= msg
10 10  
11 11 %h6 1. Choose people you want in the team
... ... @@ -16,7 +16,7 @@
16 16 %h6 2. Set access level for them
17 17 .clearfix
18 18 = f.label :project_access, "Project Access"
19   - .input= select_tag :project_access, options_for_select(Project.access_options, @team_member.project_access), class: "project-access-select chosen"
  19 + .input= select_tag :project_access, options_for_select(Project.access_options, @user_project_relation.project_access), class: "project-access-select chosen"
20 20  
21 21 .actions
22 22 = f.submit 'Save', class: "btn save-btn"
... ...
app/views/team_members/_show.html.haml
1 1 - user = member.user
2 2 - allow_admin = can? current_user, :admin_project, @project
3   -%li{id: dom_id(member), class: "team_member_row user_#{user.id}"}
  3 +%li{id: dom_id(user), class: "team_member_row user_#{user.id}"}
4 4 .row
5 5 .span6
6   - = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
  6 + = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do
7 7 = image_tag gravatar_icon(user.email, 40), class: "avatar s32"
8   - = link_to project_team_member_path(@project, member), title: user.name, class: "dark" do
  8 + = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do
9 9 %strong= truncate(user.name, lenght: 40)
10 10 %br
11 11 %small.cgray= user.email
... ... @@ -13,7 +13,7 @@
13 13 .span5.right
14 14 - if allow_admin
15 15 .left
16   - = form_for(member, as: :team_member, url: project_team_member_path(@project, member)) do |f|
  16 + = form_for(member, as: :team_member, url: project_team_member_path(@project, member.user)) do |f|
17 17 = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"
18 18 .right
19 19 - if current_user == user
... ... @@ -23,6 +23,6 @@
23 23 - elsif user.blocked
24 24 %span.btn.disabled.blocked Blocked
25 25 - elsif allow_admin
26   - = link_to project_team_member_path(project_id: @project, id: member.id), confirm: remove_from_team_message(@project, member), method: :delete, class: "very_small btn danger" do
  26 + = link_to project_team_member_path(@project, user), confirm: remove_from_project_team_message(@project, user), method: :delete, class: "very_small btn danger" do
27 27 %i.icon-minus.icon-white
28 28  
... ...
app/views/team_members/create.js.haml
1   -- if @team_member.valid?
  1 +- if @user_project_relation.valid?
2 2 :plain
3 3 $("#new_team_member").hide("slide", { direction: "right" }, 150, function(){
4 4 $("#team-table").show("slide", { direction: "left" }, 150, function() {
... ...
app/views/team_members/index.html.haml
1 1 = render "projects/project_head"
2 2 %h3.page_title
3 3 Team Members
4   - (#{@project.users_projects.count})
  4 + (#{@project.users.count})
5 5 %small
6 6 Read more about project permissions
7 7 %strong= link_to "here", help_permissions_path, class: "vlink"
... ...
app/views/team_members/show.html.haml
1 1 - allow_admin = can? current_user, :admin_project, @project
2   -- user = @team_member.user
3 2  
4 3 .team_member_show
5 4 - if can? current_user, :admin_project, @project
6   - = link_to 'Remove from team', project_team_member_path(project_id: @project, id: @team_member.id), confirm: 'Are you sure?', method: :delete, class: "right btn danger"
  5 + = link_to 'Remove from team', project_team_member_path(@project, @member), confirm: 'Are you sure?', method: :delete, class: "right btn danger"
7 6 .profile_avatar_holder
8   - = image_tag gravatar_icon(user.email, 60), class: "borders"
  7 + = image_tag gravatar_icon(@member.email, 60), class: "borders"
9 8 %h3.page_title
10   - = user.name
11   - %small (@#{user.username})
  9 + = @member.name
  10 + %small (@#{@member.username})
12 11  
13 12 %hr
14 13 .back_link
... ... @@ -21,34 +20,34 @@
21 20 %table.lite
22 21 %tr
23 22 %td Email
24   - %td= mail_to user.email
  23 + %td= mail_to @member.email
25 24 %tr
26 25 %td Skype
27   - %td= user.skype
28   - - unless user.linkedin.blank?
  26 + %td= @member.skype
  27 + - unless @member.linkedin.blank?
29 28 %tr
30 29 %td LinkedIn
31   - %td= user.linkedin
32   - - unless user.twitter.blank?
  30 + %td= @member.linkedin
  31 + - unless @member.twitter.blank?
33 32 %tr
34 33 %td Twitter
35   - %td= user.twitter
36   - - unless user.bio.blank?
  34 + %td= @member.twitter
  35 + - unless @member.bio.blank?
37 36 %tr
38 37 %td Bio
39   - %td= user.bio
  38 + %td= @member.bio
40 39 .span6
41 40 %table.lite
42 41 %tr
43 42 %td Member since
44   - %td= @team_member.created_at.stamp("Aug 21, 2011")
  43 + %td= @user_project_relation.created_at.stamp("Aug 21, 2011")
45 44 %tr
46 45 %td
47 46 Project Access:
48 47 %small (#{link_to "read more", help_permissions_path, class: "vlink"})
49 48 %td
50   - = form_for(@team_member, as: :team_member, url: project_team_member_path(@project, @team_member)) do |f|
51   - = f.select :project_access, options_for_select(Project.access_options, @team_member.project_access), {}, class: "project-access-select", disabled: !allow_admin
  49 + = form_for(@user_project_relation, as: :team_member, url: project_team_member_path(@project, @member)) do |f|
  50 + = f.select :project_access, options_for_select(Project.access_options, @user_project_relation.project_access), {}, class: "project-access-select", disabled: !allow_admin
52 51 %hr
53 52 = render @events
54 53 :javascript
... ...
app/views/team_members/update.js.haml
1   -- if @team_member.valid?
  1 +- if @user_project_relation.valid?
2 2 :plain
3   - $("##{dom_id(@team_member)}").effect("highlight", {color: "#529214"}, 1000);;
  3 + $("##{dom_id(@user_project_relation)}").effect("highlight", {color: "#529214"}, 1000);;
4 4 - else
5 5 :plain
6   - $("##{dom_id(@team_member)}").effect("highlight", {color: "#D12F19"}, 1000);;
  6 + $("##{dom_id(@user_project_relation)}").effect("highlight", {color: "#D12F19"}, 1000);;
... ...