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