Commit ea6f46cb87c7ba8c0c620a8ff954f203b3276a7c
Committed by
Dmitriy Zaporozhets
1 parent
360aa1b4
Exists in
master
and in
4 other branches
Team members public section
Showing
8 changed files
with
212 additions
and
0 deletions
Show diff stats
@@ -0,0 +1,58 @@ | @@ -0,0 +1,58 @@ | ||
1 | +class Teams::MembersController < Teams::ApplicationController | ||
2 | + # Authorize | ||
3 | + before_filter :authorize_manage_user_team!, only: [:new, :edit] | ||
4 | + | ||
5 | + def index | ||
6 | + @members = @user_team.members | ||
7 | + end | ||
8 | + | ||
9 | + def show | ||
10 | + @team_member = @user_team.members.find(params[:id]) | ||
11 | + @events = @team_member.recent_events.limit(7) | ||
12 | + end | ||
13 | + | ||
14 | + def new | ||
15 | + @team_member = @user_team.members.new | ||
16 | + end | ||
17 | + | ||
18 | + def create | ||
19 | + users = User.where(id: params[:user_ids]) | ||
20 | + | ||
21 | + @project.team << [users, params[:default_project_access]] | ||
22 | + | ||
23 | + if params[:redirect_to] | ||
24 | + redirect_to params[:redirect_to] | ||
25 | + else | ||
26 | + redirect_to project_team_index_path(@project) | ||
27 | + end | ||
28 | + end | ||
29 | + | ||
30 | + def update | ||
31 | + @team_member = @user_team.members.find(params[:id]) | ||
32 | + @team_member.update_attributes(params[:team_member]) | ||
33 | + | ||
34 | + unless @team_member.valid? | ||
35 | + flash[:alert] = "User should have at least one role" | ||
36 | + end | ||
37 | + redirect_to team_member_path(@project) | ||
38 | + end | ||
39 | + | ||
40 | + def destroy | ||
41 | + @team_member = project.users_projects.find(params[:id]) | ||
42 | + @team_member.destroy | ||
43 | + | ||
44 | + respond_to do |format| | ||
45 | + format.html { redirect_to project_team_index_path(@project) } | ||
46 | + format.js { render nothing: true } | ||
47 | + end | ||
48 | + end | ||
49 | + | ||
50 | + def apply_import | ||
51 | + giver = Project.find(params[:source_project_id]) | ||
52 | + status = @project.team.import(giver) | ||
53 | + notice = status ? "Succesfully imported" : "Import failed" | ||
54 | + | ||
55 | + redirect_to project_team_members_path(project), notice: notice | ||
56 | + end | ||
57 | + | ||
58 | +end |
@@ -0,0 +1,23 @@ | @@ -0,0 +1,23 @@ | ||
1 | +%h3.page_title | ||
2 | + = "New Team member(s)" | ||
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? | ||
6 | + .alert-message.block-message.error | ||
7 | + %ul | ||
8 | + - @team_member.errors.full_messages.each do |msg| | ||
9 | + %li= msg | ||
10 | + | ||
11 | + %h6 1. Choose people you want in the team | ||
12 | + .clearfix | ||
13 | + = f.label :user_ids, "People" | ||
14 | + .input= select_tag(:user_ids, options_from_collection_for_select(User.active.not_in_project(@project).alphabetically, :id, :name), {data: {placeholder: "Select users"}, class: "chosen xxlarge", multiple: true}) | ||
15 | + | ||
16 | + %h6 2. Set access level for them | ||
17 | + .clearfix | ||
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" | ||
20 | + | ||
21 | + .actions | ||
22 | + = f.submit 'Save', class: "btn save-btn" | ||
23 | + = link_to "Cancel", project_team_index_path(@project), class: "btn cancel-btn" |
@@ -0,0 +1,31 @@ | @@ -0,0 +1,31 @@ | ||
1 | +- user = member.user | ||
2 | +- allow_admin = can? current_user, :manage_user_team, @user_team | ||
3 | +%li{id: dom_id(member), class: "team_member_row user_#{user.id}"} | ||
4 | + .row | ||
5 | + .span5 | ||
6 | + = link_to team_member_path(@user_team, user), title: user.name, class: "dark" do | ||
7 | + = image_tag gravatar_icon(user.email, 40), class: "avatar s32" | ||
8 | + = link_to team_member_path(@user_team, user), title: user.name, class: "dark" do | ||
9 | + %strong= truncate(user.name, lenght: 40) | ||
10 | + %br | ||
11 | + %small.cgray= user.email | ||
12 | + | ||
13 | + .span6.right | ||
14 | + - if allow_admin | ||
15 | + .left.span2 | ||
16 | + = form_for(member, as: :team_member, url: team_member_path(@user_team, user)) do |f| | ||
17 | + = f.select :permission, options_for_select(UsersProject.access_roles, @user_team.default_projects_access(user)), {}, class: "medium project-access-select span2" | ||
18 | + .left.span2 | ||
19 | + %span | ||
20 | + Admin access | ||
21 | + = check_box_tag :group_admin | ||
22 | + .right | ||
23 | + - if current_user == user | ||
24 | + %span.btn.disabled This is you! | ||
25 | + - if @user_team.owner == user | ||
26 | + %span.btn.disabled.success Owner | ||
27 | + - elsif user.blocked | ||
28 | + %span.btn.disabled.blocked Blocked | ||
29 | + - elsif allow_admin | ||
30 | + = link_to team_member_path(@user_team, user), confirm: remove_from_team_message(@user_team, user), method: :delete, class: "very_small btn danger" do | ||
31 | + %i.icon-minus.icon-white |
@@ -0,0 +1,16 @@ | @@ -0,0 +1,16 @@ | ||
1 | +- grouped_user_team_members(@user_team).each do |access, members| | ||
2 | + .ui-box | ||
3 | + %h5.title | ||
4 | + = Project.access_options.key(access).pluralize | ||
5 | + %small= members.size | ||
6 | + %ul.well-list | ||
7 | + - members.sort_by(&:user_name).each do |up| | ||
8 | + = render(partial: 'teams/members/show', locals: {member: up}) | ||
9 | + | ||
10 | + | ||
11 | +:javascript | ||
12 | + $(function(){ | ||
13 | + $('.repo-access-select, .project-access-select').live("change", function() { | ||
14 | + $(this.form).submit(); | ||
15 | + }); | ||
16 | + }) |
@@ -0,0 +1,18 @@ | @@ -0,0 +1,18 @@ | ||
1 | += render "teams/team_head" | ||
2 | +%h3.page_title | ||
3 | + Team Members | ||
4 | + (#{@members.count}) | ||
5 | + %small | ||
6 | + Read more about project permissions | ||
7 | + %strong= link_to "here", help_permissions_path, class: "vlink" | ||
8 | + | ||
9 | + - if can? current_user, :manage_user_team, @user_team | ||
10 | + %span.right | ||
11 | + = link_to new_team_member_path(@user_team), class: "btn success small grouped", title: "New Team Member" do | ||
12 | + New Team Member | ||
13 | +%hr | ||
14 | + | ||
15 | + | ||
16 | +.clearfix | ||
17 | +%div.team-table | ||
18 | + = render partial: "teams/members/team", locals: {project: @user_team} |
@@ -0,0 +1,60 @@ | @@ -0,0 +1,60 @@ | ||
1 | +- allow_admin = can? current_user, :admin_project, @project | ||
2 | +- user = @team_member.user | ||
3 | + | ||
4 | +.team_member_show | ||
5 | + - 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" | ||
7 | + .profile_avatar_holder | ||
8 | + = image_tag gravatar_icon(user.email, 60), class: "borders" | ||
9 | + %h3.page_title | ||
10 | + = user.name | ||
11 | + %small (@#{user.username}) | ||
12 | + | ||
13 | + %hr | ||
14 | + .back_link | ||
15 | + %br | ||
16 | + = link_to project_team_index_path(@project), class: "" do | ||
17 | + ← To team list | ||
18 | + %br | ||
19 | + .row | ||
20 | + .span6 | ||
21 | + %table.lite | ||
22 | + %tr | ||
23 | + %td Email | ||
24 | + %td= mail_to user.email | ||
25 | + %tr | ||
26 | + %td Skype | ||
27 | + %td= user.skype | ||
28 | + - unless user.linkedin.blank? | ||
29 | + %tr | ||
30 | + %td LinkedIn | ||
31 | + %td= user.linkedin | ||
32 | + - unless user.twitter.blank? | ||
33 | + %tr | ||
34 | + %td Twitter | ||
35 | + %td= user.twitter | ||
36 | + - unless user.bio.blank? | ||
37 | + %tr | ||
38 | + %td Bio | ||
39 | + %td= user.bio | ||
40 | + .span6 | ||
41 | + %table.lite | ||
42 | + %tr | ||
43 | + %td Member since | ||
44 | + %td= @team_member.created_at.stamp("Aug 21, 2011") | ||
45 | + %tr | ||
46 | + %td | ||
47 | + Project Access: | ||
48 | + %small (#{link_to "read more", help_permissions_path, class: "vlink"}) | ||
49 | + %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 | ||
52 | + %hr | ||
53 | + = render @events | ||
54 | +:javascript | ||
55 | + $(function(){ | ||
56 | + $('.repo-access-select, .project-access-select').live("change", function() { | ||
57 | + $(this.form).submit(); | ||
58 | + }); | ||
59 | + }) | ||
60 | + |
config/routes.rb
@@ -139,6 +139,10 @@ Gitlab::Application.routes.draw do | @@ -139,6 +139,10 @@ Gitlab::Application.routes.draw do | ||
139 | delete :relegate_project | 139 | delete :relegate_project |
140 | put :update_access | 140 | put :update_access |
141 | end | 141 | end |
142 | + scope module: :teams do | ||
143 | + resources :members | ||
144 | + end | ||
145 | + end | ||
142 | collection do | 146 | collection do |
143 | get :search | 147 | get :search |
144 | end | 148 | end |