Commit a29db26cc99cb7406d1f9d7fe91650e6e2dd8294

Authored by Dmitriy Zaporozhets
1 parent e9d8d074

Refactor and restyle team page for project

app/assets/stylesheets/sections/projects.scss
@@ -115,3 +115,7 @@ ul.nav.nav-projects-tabs { @@ -115,3 +115,7 @@ ul.nav.nav-projects-tabs {
115 } 115 }
116 } 116 }
117 } 117 }
  118 +
  119 +.team_member_row form {
  120 + margin: 0px;
  121 +}
app/controllers/team_members_controller.rb
@@ -4,7 +4,9 @@ class TeamMembersController < ProjectResourceController @@ -4,7 +4,9 @@ class TeamMembersController < ProjectResourceController
4 before_filter :authorize_admin_project!, except: [:index, :show] 4 before_filter :authorize_admin_project!, except: [:index, :show]
5 5
6 def index 6 def index
7 - @teams = UserTeam.scoped 7 + @team = @project.users_projects.scoped
  8 + @team = @team.send(params[:type]) if %w(masters developers reporters guests).include?(params[:type])
  9 + @team = @team.sort_by(&:project_access).reverse.group_by(&:project_access)
8 end 10 end
9 11
10 def show 12 def show
app/helpers/projects_helper.rb
1 module ProjectsHelper 1 module ProjectsHelper
2 - def grouper_project_members(project)  
3 - @project.users_projects.sort_by(&:project_access).reverse.group_by(&:project_access)  
4 - end  
5 -  
6 - def grouper_project_teams(project)  
7 - @project.user_team_project_relationships.sort_by(&:greatest_access).reverse.group_by(&:greatest_access)  
8 - end  
9 -  
10 def remove_from_project_team_message(project, user) 2 def remove_from_project_team_message(project, user)
11 "You are going to remove #{user.name} from #{project.name} project team. Are you sure?" 3 "You are going to remove #{user.name} from #{project.name} project team. Are you sure?"
12 end 4 end
app/models/user_team_project_relationship.rb
@@ -26,6 +26,10 @@ class UserTeamProjectRelationship < ActiveRecord::Base @@ -26,6 +26,10 @@ class UserTeamProjectRelationship < ActiveRecord::Base
26 user_team.name 26 user_team.name
27 end 27 end
28 28
  29 + def human_max_access
  30 + UserTeam.access_roles.key(greatest_access)
  31 + end
  32 +
29 private 33 private
30 34
31 def check_greatest_access 35 def check_greatest_access
app/views/team_members/_assigned_team.html.haml 0 → 100644
@@ -0,0 +1,10 @@ @@ -0,0 +1,10 @@
  1 +%li{id: dom_id(team), class: "user_team_row team_#{team.id}"}
  2 + .pull-right
  3 + - if can?(current_user, :admin_team_member, @project)
  4 + = link_to resign_project_team_path(@project, team), method: :delete, confirm: "Are you shure?", class: "btn btn-remove btn-tiny" do
  5 + %i.icon-minus.icon-white
  6 +
  7 + %strong= link_to team.name, team_path(team), title: team.name, class: "dark"
  8 + %br
  9 + %small.cgray Members: #{team.members.count}
  10 + %small.cgray Max access: #{team_relation.human_max_access}
app/views/team_members/_assigned_teams.html.haml 0 → 100644
@@ -0,0 +1,4 @@ @@ -0,0 +1,4 @@
  1 +.ui-box
  2 + %ul.well-list
  3 + - @project.user_team_project_relationships.sort_by(&:team_name).each do |team_relation|
  4 + = render "team_members/assigned_team", team_relation: team_relation, team: team_relation.user_team
app/views/team_members/_show.html.haml
@@ -1,28 +0,0 @@ @@ -1,28 +0,0 @@
1 -- user = member.user  
2 -- allow_admin = can? current_user, :admin_project, @project  
3 -%li{id: dom_id(user), class: "team_member_row user_#{user.id}"}  
4 - .row  
5 - .span6  
6 - = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do  
7 - = image_tag gravatar_icon(user.email, 40), class: "avatar s32"  
8 - = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do  
9 - %strong= truncate(user.name, lenght: 40)  
10 - %br  
11 - %small.cgray= user.email  
12 -  
13 - .span5.pull-right  
14 - - if allow_admin  
15 - .left  
16 - = form_for(member, as: :team_member, url: project_team_member_path(@project, member.user)) do |f|  
17 - = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"  
18 - .pull-right  
19 - - if current_user == user  
20 - %span.btn.disabled This is you!  
21 - - if @project.namespace_owner == user  
22 - %span.btn.disabled Owner  
23 - - elsif user.blocked  
24 - %span.btn.disabled.blocked Blocked  
25 - - elsif allow_admin  
26 - = link_to project_team_member_path(@project, user), confirm: remove_from_project_team_message(@project, user), method: :delete, class: "btn-tiny btn btn-remove" do  
27 - %i.icon-minus.icon-white  
28 -  
app/views/team_members/_show_team.html.haml
@@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
1 -- team = team_rel.user_team  
2 -- allow_admin = can? current_user, :admin_team_member, @project  
3 -%li{id: dom_id(team), class: "user_team_row team_#{team.id}"}  
4 - .row  
5 - .span6  
6 - %strong= link_to team.name, team_path(team), title: team.name, class: "dark"  
7 - %br  
8 - %small.cgray Members: #{team.members.count}  
9 -  
10 - .span5.pull-right  
11 - .pull-right  
12 - - if allow_admin  
13 - .left  
14 - = link_to resign_project_team_path(@project, team), method: :delete, confirm: "Are you shure?", class: "btn btn-remove small" do  
15 - %i.icon-minus.icon-white  
app/views/team_members/_team.html.haml
1 -- grouper_project_members(@project).each do |access, members| 1 +- @team.each do |access, members|
2 .ui-box 2 .ui-box
3 %h5.title 3 %h5.title
4 = Project.access_options.key(access).pluralize 4 = Project.access_options.key(access).pluralize
5 %small= members.size 5 %small= members.size
6 %ul.well-list 6 %ul.well-list
7 - - members.sort_by(&:user_name).each do |up|  
8 - = render(partial: 'team_members/show', locals: {member: up}) 7 + - members.sort_by(&:user_name).each do |team_member|
  8 + = render 'team_members/team_member', member: team_member
9 9
10 10
11 :javascript 11 :javascript
app/views/team_members/_team_member.html.haml 0 → 100644
@@ -0,0 +1,28 @@ @@ -0,0 +1,28 @@
  1 +- user = member.user
  2 +- allow_admin = can? current_user, :admin_project, @project
  3 +%li{id: dom_id(user), class: "team_member_row user_#{user.id}"}
  4 + .row
  5 + .span4
  6 + = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do
  7 + = image_tag gravatar_icon(user.email, 40), class: "avatar s32"
  8 + = link_to project_team_member_path(@project, user), title: user.name, class: "dark" do
  9 + %strong= truncate(user.name, lenght: 40)
  10 + %br
  11 + %small.cgray= user.email
  12 +
  13 + .span4.pull-right
  14 + - if allow_admin
  15 + .left
  16 + = form_for(member, as: :team_member, url: project_team_member_path(@project, member.user)) do |f|
  17 + = f.select :project_access, options_for_select(UsersProject.access_roles, member.project_access), {}, class: "medium project-access-select span2"
  18 + .pull-right
  19 + - if current_user == user
  20 + %span.label This is you!
  21 + - if @project.namespace_owner == user
  22 + %span.label Owner
  23 + - elsif user.blocked
  24 + %span.label Blocked
  25 + - elsif allow_admin
  26 + = link_to project_team_member_path(@project, user), confirm: remove_from_project_team_message(@project, user), method: :delete, class: "btn-tiny btn btn-remove" do
  27 + %i.icon-minus.icon-white
  28 +
app/views/team_members/_teams.html.haml
@@ -1,16 +0,0 @@ @@ -1,16 +0,0 @@
1 -- grouper_project_teams(@project).each do |access, teams|  
2 - .ui-box  
3 - %h5.title  
4 - = UserTeam.access_roles.key(access).pluralize  
5 - %small= teams.size  
6 - %ul.well-list  
7 - - teams.sort_by(&:team_name).each do |tofr|  
8 - = render(partial: 'team_members/show_team', locals: {team_rel: tofr})  
9 -  
10 -  
11 -:javascript  
12 - $(function(){  
13 - $('.repo-access-select, .project-access-select').live("change", function() {  
14 - $(this.form).submit();  
15 - });  
16 - })  
app/views/team_members/index.html.haml
@@ -18,16 +18,33 @@ @@ -18,16 +18,33 @@
18 %hr 18 %hr
19 19
20 .clearfix 20 .clearfix
21 -%div.team-table  
22 - = render partial: "team_members/team", locals: {project: @project} 21 +.row
  22 + .span3
  23 + %ul.nav.nav-pills.nav-stacked
  24 + %li{class: ("active" if !params[:type])}
  25 + = link_to project_team_members_path(type: nil) do
  26 + All
  27 + %li{class: ("active" if params[:type] == 'masters')}
  28 + = link_to project_team_members_path(type: 'masters') do
  29 + Masters
  30 + %li{class: ("active" if params[:type] == 'developers')}
  31 + = link_to project_team_members_path(type: 'developers') do
  32 + Developers
  33 + %li{class: ("active" if params[:type] == 'reporters')}
  34 + = link_to project_team_members_path(type: 'reporters') do
  35 + Reporters
  36 + %li{class: ("active" if params[:type] == 'guests')}
  37 + = link_to project_team_members_path(type: 'guests') do
  38 + Guests
  39 + %h5
  40 + Assigned teams
  41 + (#{@project.user_teams.count})
  42 + %div
  43 + = render "team_members/assigned_teams", project: @project
23 44
  45 + .span9
  46 + %div.team-table
  47 + = render "team_members/team", project: @project
24 48
25 -%h3.page_title  
26 - Assigned teams  
27 - (#{@project.user_teams.count})  
28 49
29 -%hr  
30 50
31 -.clearfix  
32 -%div.team-table  
33 - = render partial: "team_members/teams", locals: {project: @project}