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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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 @@ |
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