Add functional in admin section
This commit is contained in:
parent
17ea019f4e
commit
9c574464a6
7 changed files with 106 additions and 19 deletions
|
@ -1,5 +1,5 @@
|
||||||
class Admin::GroupsController < AdminController
|
class Admin::GroupsController < AdminController
|
||||||
before_filter :group, only: [:edit, :show, :update, :destroy, :project_update]
|
before_filter :group, only: [:edit, :show, :update, :destroy, :project_update, :project_teams_update]
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@groups = Group.order('name ASC')
|
@groups = Group.order('name ASC')
|
||||||
|
@ -12,6 +12,8 @@ class Admin::GroupsController < AdminController
|
||||||
@projects = @projects.not_in_group(@group) if @group.projects.present?
|
@projects = @projects.not_in_group(@group) if @group.projects.present?
|
||||||
@projects = @projects.all
|
@projects = @projects.all
|
||||||
@projects.reject!(&:empty_repo?)
|
@projects.reject!(&:empty_repo?)
|
||||||
|
|
||||||
|
@users = User.active
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@ -65,6 +67,13 @@ class Admin::GroupsController < AdminController
|
||||||
redirect_to :back, notice: 'Group was successfully updated.'
|
redirect_to :back, notice: 'Group was successfully updated.'
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def project_teams_update
|
||||||
|
@group.projects.each do |p|
|
||||||
|
p.add_users_ids_to_team(params[:user_ids], params[:project_access])
|
||||||
|
end
|
||||||
|
redirect_to [:admin, @group], notice: 'Users was successfully added.'
|
||||||
|
end
|
||||||
|
|
||||||
def destroy
|
def destroy
|
||||||
@group.destroy
|
@group.destroy
|
||||||
|
|
||||||
|
|
|
@ -82,6 +82,7 @@ class Project < ActiveRecord::Base
|
||||||
scope :public_only, where(private_flag: false)
|
scope :public_only, where(private_flag: false)
|
||||||
scope :without_user, ->(user) { where("id NOT IN (:ids)", ids: user.projects.map(&:id) ) }
|
scope :without_user, ->(user) { where("id NOT IN (:ids)", ids: user.projects.map(&:id) ) }
|
||||||
scope :not_in_group, ->(group) { where("id NOT IN (:ids)", ids: group.project_ids ) }
|
scope :not_in_group, ->(group) { where("id NOT IN (:ids)", ids: group.project_ids ) }
|
||||||
|
scope :in_group, ->(group) { where(namespace_id: group.id) }
|
||||||
scope :sorted_by_activity, ->() { order("(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC") }
|
scope :sorted_by_activity, ->() { order("(SELECT max(events.created_at) FROM events WHERE events.project_id = projects.id) DESC") }
|
||||||
scope :personal, ->(user) { where(namespace_id: user.namespace_id) }
|
scope :personal, ->(user) { where(namespace_id: user.namespace_id) }
|
||||||
scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) }
|
scope :joined, ->(user) { where("namespace_id != ?", user.namespace_id) }
|
||||||
|
|
|
@ -33,6 +33,8 @@ class UsersProject < ActiveRecord::Base
|
||||||
|
|
||||||
delegate :name, :email, to: :user, prefix: true
|
delegate :name, :email, to: :user, prefix: true
|
||||||
|
|
||||||
|
scope :in_project, ->(project) { where(project_id: project.id) }
|
||||||
|
|
||||||
class << self
|
class << self
|
||||||
def import_team(source_project, target_project)
|
def import_team(source_project, target_project)
|
||||||
UsersProject.without_repository_callback do
|
UsersProject.without_repository_callback do
|
||||||
|
|
|
@ -44,6 +44,8 @@
|
||||||
%div
|
%div
|
||||||
= f.submit 'Change Owner', class: "btn danger"
|
= f.submit 'Change Owner', class: "btn danger"
|
||||||
= link_to "Cancel", "#", class: "btn change-owner-cancel-link"
|
= link_to "Cancel", "#", class: "btn change-owner-cancel-link"
|
||||||
|
|
||||||
|
- if @group.projects.any?
|
||||||
%fieldset
|
%fieldset
|
||||||
%legend Projects (#{@group.projects.count})
|
%legend Projects (#{@group.projects.count})
|
||||||
%table
|
%table
|
||||||
|
@ -63,6 +65,33 @@
|
||||||
%td.bgred
|
%td.bgred
|
||||||
= link_to 'Transfer project to global namespace', remove_project_admin_group_path(@group, project_id: project.id), confirm: 'Remove project from group and move to global namespace. Are you sure?', method: :delete, class: "btn danger small"
|
= link_to 'Transfer project to global namespace', remove_project_admin_group_path(@group, project_id: project.id), confirm: 'Remove project from group and move to global namespace. Are you sure?', method: :delete, class: "btn danger small"
|
||||||
|
|
||||||
|
= form_tag project_teams_update_admin_group_path(@group), id: "new_team_member", class: "bulk_import", method: :put do
|
||||||
|
%table.zebra-striped
|
||||||
|
%thead
|
||||||
|
%tr
|
||||||
|
%th Users
|
||||||
|
%th Project Access:
|
||||||
|
|
||||||
|
- @group.users.each do |u|
|
||||||
|
%tr{class: "user_#{u.id}"}
|
||||||
|
%td.name= link_to u.name, admin_user_path(u)
|
||||||
|
%td.projects_access
|
||||||
|
- u.projects.in_group(@group).each do |p|
|
||||||
|
- u_p = u.users_projects.in_project(p).first
|
||||||
|
= "#{p.name} (#{link_to u_p.project_access_human, edit_admin_team_member_path(u_p) })".html_safe
|
||||||
|
%tr
|
||||||
|
%td.input= select_tag :user_ids, options_from_collection_for_select(@users , :id, :name), multiple: true, data: {placeholder: 'Select users'}, class: 'chosen span5'
|
||||||
|
%td= select_tag :project_access, options_for_select(Project.access_options), {class: "project-access-select chosen span3"}
|
||||||
|
|
||||||
|
%tr
|
||||||
|
%td= submit_tag 'Add user to projects in group', class: "btn primary"
|
||||||
|
%td
|
||||||
|
Read more about project permissions
|
||||||
|
%strong= link_to "here", help_permissions_path, class: "vlink"
|
||||||
|
|
||||||
|
- else
|
||||||
|
%fieldset
|
||||||
|
%legend Group is empty
|
||||||
|
|
||||||
= form_tag project_update_admin_group_path(@group), class: "bulk_import", method: :put do
|
= form_tag project_update_admin_group_path(@group), class: "bulk_import", method: :put do
|
||||||
%fieldset
|
%fieldset
|
||||||
|
|
|
@ -47,6 +47,7 @@ Gitlab::Application.routes.draw do
|
||||||
resources :groups, constraints: { id: /[^\/]+/ } do
|
resources :groups, constraints: { id: /[^\/]+/ } do
|
||||||
member do
|
member do
|
||||||
put :project_update
|
put :project_update
|
||||||
|
put :project_teams_update
|
||||||
delete :remove_project
|
delete :remove_project
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
Feature: Admin Groups
|
Feature: Admin Groups
|
||||||
Background:
|
Background:
|
||||||
Given I sign in as an admin
|
Given I sign in as an admin
|
||||||
|
And I have group with projects
|
||||||
|
And Create gitlab user "John"
|
||||||
And I visit admin groups page
|
And I visit admin groups page
|
||||||
|
|
||||||
Scenario: Create a group
|
Scenario: Create a group
|
||||||
|
@ -8,3 +10,8 @@ Feature: Admin Groups
|
||||||
And submit form with new group info
|
And submit form with new group info
|
||||||
Then I should be redirected to group page
|
Then I should be redirected to group page
|
||||||
And I should see newly created group
|
And I should see newly created group
|
||||||
|
|
||||||
|
Scenario: Add user into projects in group
|
||||||
|
When I visit admin group page
|
||||||
|
When I select user "John" from user list as "Reporter"
|
||||||
|
Then I should see "John" in team list in every project as "Reporter"
|
||||||
|
|
|
@ -3,10 +3,26 @@ class AdminGroups < Spinach::FeatureSteps
|
||||||
include SharedPaths
|
include SharedPaths
|
||||||
include SharedActiveTab
|
include SharedActiveTab
|
||||||
|
|
||||||
|
When 'I visit admin group page' do
|
||||||
|
visit admin_group_path(current_group)
|
||||||
|
end
|
||||||
|
|
||||||
When 'I click new group link' do
|
When 'I click new group link' do
|
||||||
click_link "New Group"
|
click_link "New Group"
|
||||||
end
|
end
|
||||||
|
|
||||||
|
And 'I have group with projects' do
|
||||||
|
@group = create(:group)
|
||||||
|
@project = create(:project, group: @group)
|
||||||
|
@event = create(:closed_issue_event, project: @project)
|
||||||
|
|
||||||
|
@project.add_access current_user, :admin
|
||||||
|
end
|
||||||
|
|
||||||
|
And 'Create gitlab user "John"' do
|
||||||
|
create(:user, :name => "John")
|
||||||
|
end
|
||||||
|
|
||||||
And 'submit form with new group info' do
|
And 'submit form with new group info' do
|
||||||
fill_in 'group_name', :with => 'gitlab'
|
fill_in 'group_name', :with => 'gitlab'
|
||||||
click_button "Create group"
|
click_button "Create group"
|
||||||
|
@ -19,5 +35,27 @@ class AdminGroups < Spinach::FeatureSteps
|
||||||
Then 'I should be redirected to group page' do
|
Then 'I should be redirected to group page' do
|
||||||
current_path.should == admin_group_path(Group.last)
|
current_path.should == admin_group_path(Group.last)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
When 'I select user "John" from user list as "Reporter"' do
|
||||||
|
user = User.find_by_name("John")
|
||||||
|
within "#new_team_member" do
|
||||||
|
select user.name, :from => "user_ids"
|
||||||
|
select "Reporter", :from => "project_access"
|
||||||
|
end
|
||||||
|
click_button "Add user to projects in group"
|
||||||
|
end
|
||||||
|
|
||||||
|
Then 'I should see "John" in team list in every project as "Reporter"' do
|
||||||
|
user = User.find_by_name("John")
|
||||||
|
projects_with_access = find(".user_#{user.id} .projects_access")
|
||||||
|
projects_with_access.should have_link("Reporter")
|
||||||
|
end
|
||||||
|
|
||||||
|
protected
|
||||||
|
|
||||||
|
def current_group
|
||||||
|
@group ||= Group.first
|
||||||
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue