Use project_member
instead of team_member
.
This commit is contained in:
parent
99f995755e
commit
31fc73f0a9
25 changed files with 143 additions and 134 deletions
|
@ -127,7 +127,7 @@ class Dispatcher
|
|||
new DropzoneInput($('.wiki-form'))
|
||||
when 'snippets', 'labels', 'graphs'
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
when 'team_members', 'deploy_keys', 'hooks', 'services', 'protected_branches'
|
||||
when 'project_members', 'deploy_keys', 'hooks', 'services', 'protected_branches'
|
||||
shortcut_handler = new ShortcutsNavigation()
|
||||
new UsersSelect()
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ li.note {
|
|||
background-color: inherit;
|
||||
}
|
||||
|
||||
.team_member_show {
|
||||
.project_member_show {
|
||||
td:first-child {
|
||||
color: #aaa;
|
||||
}
|
||||
|
|
|
@ -156,7 +156,7 @@ ul.nav.nav-projects-tabs {
|
|||
}
|
||||
}
|
||||
|
||||
.team_member_row form {
|
||||
.project_member_row form {
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
class Admin::GroupsController < Admin::ApplicationController
|
||||
before_filter :group, only: [:edit, :show, :update, :destroy, :project_update, :project_teams_update]
|
||||
before_filter :group, only: [:edit, :show, :update, :destroy, :project_update, :members_update]
|
||||
|
||||
def index
|
||||
@groups = Group.all
|
||||
|
@ -40,7 +40,7 @@ class Admin::GroupsController < Admin::ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def project_teams_update
|
||||
def members_update
|
||||
@group.add_users(params[:user_ids].split(','), params[:access_level])
|
||||
|
||||
redirect_to [:admin, @group], notice: 'Users were successfully added.'
|
||||
|
|
88
app/controllers/projects/project_members_controller.rb
Normal file
88
app/controllers/projects/project_members_controller.rb
Normal file
|
@ -0,0 +1,88 @@
|
|||
class Projects::ProjectMembersController < Projects::ApplicationController
|
||||
# Authorize
|
||||
before_filter :authorize_admin_project!, except: :leave
|
||||
|
||||
layout "project_settings"
|
||||
|
||||
def index
|
||||
@project_members = @project.project_members
|
||||
|
||||
if params[:search].present?
|
||||
users = @project.users.search(params[:search]).to_a
|
||||
@project_members = @project_members.where(user_id: users)
|
||||
end
|
||||
|
||||
@project_members = @project_members.order('access_level DESC')
|
||||
|
||||
@group = @project.group
|
||||
if @group
|
||||
@group_members = @group.group_members
|
||||
|
||||
if params[:search].present?
|
||||
users = @group.users.search(params[:search]).to_a
|
||||
@group_members = @group_members.where(user_id: users)
|
||||
end
|
||||
|
||||
@group_members = @group_members.order('access_level DESC').limit(20)
|
||||
end
|
||||
|
||||
@project_member = @project.project_members.new
|
||||
end
|
||||
|
||||
def new
|
||||
@project_member = @project.project_members.new
|
||||
end
|
||||
|
||||
def create
|
||||
users = User.where(id: params[:user_ids].split(','))
|
||||
@project.team << [users, params[:access_level]]
|
||||
|
||||
redirect_to namespace_project_project_members_path(@project.namespace, @project)
|
||||
end
|
||||
|
||||
def update
|
||||
@project_member = @project.project_members.find_by(user_id: member)
|
||||
@project_member.update_attributes(member_params)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@project_member = @project.project_members.find_by(user_id: member)
|
||||
@project_member.destroy
|
||||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
redirect_to namespace_project_project_members_path(@project.namespace,
|
||||
@project)
|
||||
end
|
||||
format.js { render nothing: true }
|
||||
end
|
||||
end
|
||||
|
||||
def leave
|
||||
@project.project_members.find_by(user_id: current_user).destroy
|
||||
|
||||
respond_to do |format|
|
||||
format.html { redirect_to :back }
|
||||
format.js { render nothing: true }
|
||||
end
|
||||
end
|
||||
|
||||
def apply_import
|
||||
giver = Project.find(params[:source_project_id])
|
||||
status = @project.team.import(giver)
|
||||
notice = status ? "Successfully imported" : "Import failed"
|
||||
|
||||
redirect_to(namespace_project_project_members_path(project.namespace, project),
|
||||
notice: notice)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def member
|
||||
@member ||= User.find_by(username: params[:id])
|
||||
end
|
||||
|
||||
def member_params
|
||||
params.require(:project_member).permit(:user_id, :access_level)
|
||||
end
|
||||
end
|
|
@ -1,73 +0,0 @@
|
|||
class Projects::TeamMembersController < Projects::ApplicationController
|
||||
# Authorize
|
||||
before_filter :authorize_admin_project!, except: :leave
|
||||
|
||||
layout "project_settings"
|
||||
|
||||
def index
|
||||
@group = @project.group
|
||||
@project_members = @project.project_members.order('access_level DESC')
|
||||
end
|
||||
|
||||
def new
|
||||
@user_project_relation = @project.project_members.new
|
||||
end
|
||||
|
||||
def create
|
||||
users = User.where(id: params[:user_ids].split(','))
|
||||
@project.team << [users, params[:access_level]]
|
||||
|
||||
redirect_to namespace_project_team_index_path(@project.namespace, @project)
|
||||
end
|
||||
|
||||
def update
|
||||
@user_project_relation = @project.project_members.find_by(user_id: member)
|
||||
@user_project_relation.update_attributes(member_params)
|
||||
|
||||
unless @user_project_relation.valid?
|
||||
flash[:alert] = "User should have at least one role"
|
||||
end
|
||||
redirect_to namespace_project_team_index_path(@project.namespace, @project)
|
||||
end
|
||||
|
||||
def destroy
|
||||
@user_project_relation = @project.project_members.find_by(user_id: member)
|
||||
@user_project_relation.destroy
|
||||
|
||||
respond_to do |format|
|
||||
format.html do
|
||||
redirect_to namespace_project_team_index_path(@project.namespace,
|
||||
@project)
|
||||
end
|
||||
format.js { render nothing: true }
|
||||
end
|
||||
end
|
||||
|
||||
def leave
|
||||
@project.project_members.find_by(user_id: current_user).destroy
|
||||
|
||||
respond_to do |format|
|
||||
format.html { redirect_to :back }
|
||||
format.js { render nothing: true }
|
||||
end
|
||||
end
|
||||
|
||||
def apply_import
|
||||
giver = Project.find(params[:source_project_id])
|
||||
status = @project.team.import(giver)
|
||||
notice = status ? "Successfully imported" : "Import failed"
|
||||
|
||||
redirect_to(namespace_project_team_index_path(project.namespace, project),
|
||||
notice: notice)
|
||||
end
|
||||
|
||||
protected
|
||||
|
||||
def member
|
||||
@member ||= User.find_by(username: params[:id])
|
||||
end
|
||||
|
||||
def member_params
|
||||
params.require(:project_member).permit(:user_id, :access_level)
|
||||
end
|
||||
end
|
|
@ -60,7 +60,7 @@ module SearchHelper
|
|||
{ label: "#{prefix} - Merge Requests", url: namespace_project_merge_requests_path(@project.namespace, @project) },
|
||||
{ label: "#{prefix} - Milestones", url: namespace_project_milestones_path(@project.namespace, @project) },
|
||||
{ label: "#{prefix} - Snippets", url: namespace_project_snippets_path(@project.namespace, @project) },
|
||||
{ label: "#{prefix} - Team", url: namespace_project_team_index_path(@project.namespace, @project) },
|
||||
{ label: "#{prefix} - Members", url: namespace_project_project_members_path(@project.namespace, @project) },
|
||||
{ label: "#{prefix} - Wiki", url: namespace_project_wikis_path(@project.namespace, @project) },
|
||||
]
|
||||
else
|
||||
|
|
|
@ -89,7 +89,7 @@ module TabHelper
|
|||
def project_tab_class
|
||||
return "active" if current_page?(controller: "/projects", action: :edit, id: @project)
|
||||
|
||||
if ['services', 'hooks', 'deploy_keys', 'team_members', 'protected_branches'].include? controller.controller_name
|
||||
if ['services', 'hooks', 'deploy_keys', 'project_members', 'protected_branches'].include? controller.controller_name
|
||||
"active"
|
||||
end
|
||||
end
|
||||
|
|
|
@ -37,7 +37,7 @@ class Ability
|
|||
:read_issue,
|
||||
:read_milestone,
|
||||
:read_project_snippet,
|
||||
:read_team_member,
|
||||
:read_project_member,
|
||||
:read_merge_request,
|
||||
:read_note,
|
||||
:download_code
|
||||
|
@ -119,7 +119,7 @@ class Ability
|
|||
:read_issue,
|
||||
:read_milestone,
|
||||
:read_project_snippet,
|
||||
:read_team_member,
|
||||
:read_project_member,
|
||||
:read_merge_request,
|
||||
:read_note,
|
||||
:write_project,
|
||||
|
@ -166,7 +166,7 @@ class Ability
|
|||
:admin_issue,
|
||||
:admin_milestone,
|
||||
:admin_project_snippet,
|
||||
:admin_team_member,
|
||||
:admin_project_member,
|
||||
:admin_merge_request,
|
||||
:admin_note,
|
||||
:admin_wiki,
|
||||
|
|
|
@ -116,14 +116,14 @@ class ProjectMember < Member
|
|||
def post_create_hook
|
||||
unless owner?
|
||||
event_service.join_project(self.project, self.user)
|
||||
notification_service.new_team_member(self)
|
||||
notification_service.new_project_member(self)
|
||||
end
|
||||
|
||||
system_hook_service.execute_hooks_for(self, :create)
|
||||
end
|
||||
|
||||
def post_update_hook
|
||||
notification_service.update_team_member(self) if self.access_level_changed?
|
||||
notification_service.update_project_member(self) if self.access_level_changed?
|
||||
end
|
||||
|
||||
def post_destroy_hook
|
||||
|
|
|
@ -445,13 +445,13 @@ class Project < ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
def team_member_by_name_or_email(name = nil, email = nil)
|
||||
def project_member_by_name_or_email(name = nil, email = nil)
|
||||
user = users.where('name like ? or email like ?', name, email).first
|
||||
project_members.where(user: user) if user
|
||||
end
|
||||
|
||||
# Get Team Member record by user id
|
||||
def team_member_by_id(user_id)
|
||||
def project_member_by_id(user_id)
|
||||
project_members.find_by(user_id: user_id)
|
||||
end
|
||||
|
||||
|
|
|
@ -169,11 +169,8 @@ class User < ActiveRecord::Base
|
|||
scope :admins, -> { where(admin: true) }
|
||||
scope :blocked, -> { with_state(:blocked) }
|
||||
scope :active, -> { with_state(:active) }
|
||||
scope :in_team, ->(team){ where(id: team.member_ids) }
|
||||
scope :not_in_team, ->(team){ where('users.id NOT IN (:ids)', ids: team.member_ids) }
|
||||
scope :not_in_project, ->(project) { project.users.present? ? where("id not in (:ids)", ids: project.users.map(&:id) ) : all }
|
||||
scope :without_projects, -> { where('id NOT IN (SELECT DISTINCT(user_id) FROM members)') }
|
||||
scope :potential_team_members, ->(team) { team.members.any? ? active.not_in_team(team) : active }
|
||||
|
||||
#
|
||||
# Class methods
|
||||
|
@ -407,7 +404,7 @@ class User < ActiveRecord::Base
|
|||
end
|
||||
|
||||
def tm_of(project)
|
||||
project.team_member_by_id(self.id)
|
||||
project.project_member_by_id(self.id)
|
||||
end
|
||||
|
||||
def already_forked?(project)
|
||||
|
|
|
@ -162,20 +162,20 @@ class NotificationService
|
|||
end
|
||||
end
|
||||
|
||||
def new_team_member(project_member)
|
||||
def new_project_member(project_member)
|
||||
mailer.project_access_granted_email(project_member.id)
|
||||
end
|
||||
|
||||
def update_team_member(project_member)
|
||||
def update_project_member(project_member)
|
||||
mailer.project_access_granted_email(project_member.id)
|
||||
end
|
||||
|
||||
def new_group_member(users_group)
|
||||
mailer.group_access_granted_email(users_group.id)
|
||||
def new_group_member(group_member)
|
||||
mailer.group_access_granted_email(group_member.id)
|
||||
end
|
||||
|
||||
def update_group_member(users_group)
|
||||
mailer.group_access_granted_email(users_group.id)
|
||||
def update_group_member(group_member)
|
||||
mailer.group_access_granted_email(group_member.id)
|
||||
end
|
||||
|
||||
def project_was_moved(project)
|
||||
|
|
|
@ -12,8 +12,8 @@ module Projects
|
|||
else
|
||||
[]
|
||||
end
|
||||
team_members = sorted(@project.team.members)
|
||||
participants = all_members + groups + team_members + participating
|
||||
project_members = sorted(@project.team.members)
|
||||
participants = all_members + groups + project_members + participating
|
||||
participants.uniq
|
||||
end
|
||||
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
Read more about project permissions
|
||||
%strong= link_to "here", help_page_path("permissions", "permissions"), class: "vlink"
|
||||
|
||||
= form_tag project_teams_update_admin_group_path(@group), id: "new_team_member", class: "bulk_import", method: :put do
|
||||
= form_tag members_update_admin_group_path(@group), id: "new_project_member", class: "bulk_import", method: :put do
|
||||
%div
|
||||
= users_select_tag(:user_ids, multiple: true)
|
||||
%div.prepend-top-10
|
||||
|
|
|
@ -114,7 +114,7 @@
|
|||
= link_to namespace_project_team_index_path(@project.namespace, @project), class: "btn btn-xs" do
|
||||
%i.fa.fa-pencil-square-o
|
||||
Manage Access
|
||||
%ul.well-list.team_members
|
||||
%ul.well-list.project_members
|
||||
- @project_members.each do |project_member|
|
||||
- user = project_member.user
|
||||
%li.project_member
|
||||
|
@ -126,7 +126,7 @@
|
|||
%span.light Owner
|
||||
- else
|
||||
%span.light= project_member.human_access
|
||||
= link_to namespace_project_team_member_path(@project.namespace, @project, user), data: { confirm: remove_from_project_team_message(@project, user)}, method: :delete, remote: true, class: "btn btn-sm btn-remove" do
|
||||
= link_to namespace_project_project_member_path(@project.namespace, @project, user), data: { confirm: remove_from_project_team_message(@project, user)}, method: :delete, remote: true, class: "btn btn-sm btn-remove" do
|
||||
%i.fa.fa-times
|
||||
.panel-footer
|
||||
= paginate @project_members, param_name: 'project_members_page', theme: 'gitlab'
|
||||
|
|
|
@ -16,7 +16,7 @@
|
|||
%span.label.label-gray
|
||||
= repository_size(project)
|
||||
.pull-right
|
||||
= link_to 'Members', namespace_project_team_index_path(project.namespace, project), id: "edit_#{dom_id(project)}", class: "btn btn-sm"
|
||||
= link_to 'Members', namespace_project_project_members_path(project.namespace, project), id: "edit_#{dom_id(project)}", class: "btn btn-sm"
|
||||
= link_to 'Edit', edit_namespace_project_path(project.namespace, project), id: "edit_#{dom_id(project)}", class: "btn btn-sm"
|
||||
= link_to 'Remove', project, data: { confirm: remove_project_message(project)}, method: :delete, class: "btn btn-sm btn-remove"
|
||||
- if @projects.blank?
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
%li
|
||||
= link_to new_namespace_project_snippet_path(@project.namespace, @project), title: "New Snippet" do
|
||||
New snippet
|
||||
- if can?(current_user, :admin_team_member, @project)
|
||||
- if can?(current_user, :admin_project_member, @project)
|
||||
%li
|
||||
= link_to new_namespace_project_team_member_path(@project.namespace, @project), title: "New project member" do
|
||||
New project member
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
%i.fa.fa-pencil-square-o
|
||||
%span
|
||||
Project
|
||||
= nav_link(controller: [:team_members, :teams]) do
|
||||
= link_to namespace_project_team_index_path(@project.namespace, @project), title: 'Members', class: "team-tab tab" do
|
||||
= nav_link(controller: [:project_members, :teams]) do
|
||||
%i.fa.fa-users
|
||||
%span
|
||||
Members
|
||||
|
|
|
@ -136,7 +136,7 @@ Gitlab::Application.routes.draw do
|
|||
|
||||
resources :groups, constraints: { id: /[^\/]+/ } do
|
||||
member do
|
||||
put :project_teams_update
|
||||
put :members_update
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -445,7 +445,7 @@ Gitlab::Application.routes.draw do
|
|||
end
|
||||
end
|
||||
|
||||
resources :team_members, except: [:index, :edit], constraints: { id: /[a-zA-Z.\/0-9_\-#%+]+/ } do
|
||||
resources :project_members, except: [:new, :edit], constraints: { id: /[a-zA-Z.\/0-9_\-#%+]+/ } do
|
||||
collection do
|
||||
delete :leave
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ class Spinach::Features::AdminGroups < Spinach::FeatureSteps
|
|||
|
||||
When 'I select user "John Doe" from user list as "Reporter"' do
|
||||
select2(user_john.id, from: "#user_ids", multiple: true)
|
||||
within "#new_team_member" do
|
||||
within "#new_project_member" do
|
||||
select "Reporter", from: "access_level"
|
||||
end
|
||||
click_button "Add users to group"
|
||||
|
|
|
@ -46,19 +46,19 @@ module API
|
|||
required_attributes! [:user_id, :access_level]
|
||||
|
||||
# either the user is already a team member or a new one
|
||||
team_member = user_project.team_member_by_id(params[:user_id])
|
||||
if team_member.nil?
|
||||
team_member = user_project.project_members.new(
|
||||
project_member = user_project.project_member_by_id(params[:user_id])
|
||||
if project_member.nil?
|
||||
project_member = user_project.project_members.new(
|
||||
user_id: params[:user_id],
|
||||
access_level: params[:access_level]
|
||||
)
|
||||
end
|
||||
|
||||
if team_member.save
|
||||
@member = team_member.user
|
||||
if project_member.save
|
||||
@member = project_member.user
|
||||
present @member, with: Entities::ProjectMember, project: user_project
|
||||
else
|
||||
handle_member_errors team_member.errors
|
||||
handle_member_errors project_member.errors
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -74,14 +74,14 @@ module API
|
|||
authorize! :admin_project, user_project
|
||||
required_attributes! [:access_level]
|
||||
|
||||
team_member = user_project.project_members.find_by(user_id: params[:user_id])
|
||||
not_found!("User can not be found") if team_member.nil?
|
||||
project_member = user_project.project_members.find_by(user_id: params[:user_id])
|
||||
not_found!("User can not be found") if project_member.nil?
|
||||
|
||||
if team_member.update_attributes(access_level: params[:access_level])
|
||||
@member = team_member.user
|
||||
if project_member.update_attributes(access_level: params[:access_level])
|
||||
@member = project_member.user
|
||||
present @member, with: Entities::ProjectMember, project: user_project
|
||||
else
|
||||
handle_member_errors team_member.errors
|
||||
handle_member_errors project_member.errors
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -94,9 +94,9 @@ module API
|
|||
# DELETE /projects/:id/members/:user_id
|
||||
delete ":id/members/:user_id" do
|
||||
authorize! :admin_project, user_project
|
||||
team_member = user_project.project_members.find_by(user_id: params[:user_id])
|
||||
unless team_member.nil?
|
||||
team_member.destroy
|
||||
project_member = user_project.project_members.find_by(user_id: params[:user_id])
|
||||
unless project_member.nil?
|
||||
project_member.destroy
|
||||
else
|
||||
{ message: "Access revoked", id: params[:user_id].to_i }
|
||||
end
|
||||
|
|
|
@ -200,7 +200,7 @@ module Gitlab
|
|||
|
||||
def reference_user(identifier, project = @project, _ = nil)
|
||||
options = html_options.merge(
|
||||
class: "gfm gfm-team_member #{html_options[:class]}"
|
||||
class: "gfm gfm-project_member #{html_options[:class]}"
|
||||
)
|
||||
|
||||
if identifier == "all"
|
||||
|
|
|
@ -180,7 +180,7 @@ describe GitlabMarkdownHelper do
|
|||
end
|
||||
|
||||
it "should include standard gfm classes" do
|
||||
expect(gfm(actual)).to match(/class="\s?gfm gfm-team_member\s?"/)
|
||||
expect(gfm(actual)).to match(/class="\s?gfm gfm-project_member\s?"/)
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
@ -338,17 +338,14 @@ describe Projects::CommitsController, 'routing' do
|
|||
end
|
||||
end
|
||||
|
||||
# project_team_members GET /:project_id/team_members(.:format) team_members#index
|
||||
# POST /:project_id/team_members(.:format) team_members#create
|
||||
# new_project_team_member GET /:project_id/team_members/new(.:format) team_members#new
|
||||
# edit_project_team_member GET /:project_id/team_members/:id/edit(.:format) team_members#edit
|
||||
# project_team_member GET /:project_id/team_members/:id(.:format) team_members#show
|
||||
# PUT /:project_id/team_members/:id(.:format) team_members#update
|
||||
# DELETE /:project_id/team_members/:id(.:format) team_members#destroy
|
||||
describe Projects::TeamMembersController, 'routing' do
|
||||
# project_project_members GET /:project_id/project_members(.:format) project_members#index
|
||||
# POST /:project_id/project_members(.:format) project_members#create
|
||||
# PUT /:project_id/project_members/:id(.:format) project_members#update
|
||||
# DELETE /:project_id/project_members/:id(.:format) project_members#destroy
|
||||
describe Projects::ProjectMembersController, 'routing' do
|
||||
it_behaves_like 'RESTful project resources' do
|
||||
let(:actions) { [:new, :create, :update, :destroy] }
|
||||
let(:controller) { 'team_members' }
|
||||
let(:actions) { [:index, :create, :update, :destroy] }
|
||||
let(:controller) { 'project_members' }
|
||||
end
|
||||
end
|
||||
|
||||
|
|
Loading…
Reference in a new issue