Skip to content
Snippets Groups Projects
Commit 8bff9a40 authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Merge branch 'refator-members-logic' of https://dev.gitlab.org/dzaporozhets/gitlabhq into 7-4-pre

parents 6dff16a6 07bc48c5
Branches
Tags
No related merge requests found
Showing
with 69 additions and 51 deletions
Loading
@@ -46,10 +46,10 @@ class Admin
Loading
@@ -46,10 +46,10 @@ class Admin
modal.hide() modal.hide()
$('.change-owner-link').show() $('.change-owner-link').show()
   
$('li.users_project').bind 'ajax:success', -> $('li.project_member').bind 'ajax:success', ->
Turbolinks.visit(location.href) Turbolinks.visit(location.href)
   
$('li.users_group').bind 'ajax:success', -> $('li.group_member').bind 'ajax:success', ->
Turbolinks.visit(location.href) Turbolinks.visit(location.href)
   
@Admin = Admin @Admin = Admin
class GroupMembers class GroupMembers
constructor: -> constructor: ->
$('li.users_group').bind 'ajax:success', -> $('li.group_member').bind 'ajax:success', ->
$(this).fadeOut() $(this).fadeOut()
   
@GroupMembers = GroupMembers @GroupMembers = GroupMembers
Loading
Loading
Loading
@@ -8,7 +8,7 @@ class Admin::GroupsController < Admin::ApplicationController
Loading
@@ -8,7 +8,7 @@ class Admin::GroupsController < Admin::ApplicationController
end end
   
def show def show
@members = @group.members.order("group_access DESC").page(params[:members_page]).per(30) @members = @group.members.order("access_level DESC").page(params[:members_page]).per(30)
@projects = @group.projects.page(params[:projects_page]).per(30) @projects = @group.projects.page(params[:projects_page]).per(30)
end end
   
Loading
@@ -40,7 +40,7 @@ class Admin::GroupsController < Admin::ApplicationController
Loading
@@ -40,7 +40,7 @@ class Admin::GroupsController < Admin::ApplicationController
end end
   
def project_teams_update def project_teams_update
@group.add_users(params[:user_ids].split(','), params[:group_access]) @group.add_users(params[:user_ids].split(','), params[:access_level])
   
redirect_to [:admin, @group], notice: 'Users were successfully added.' redirect_to [:admin, @group], notice: 'Users were successfully added.'
end end
Loading
Loading
Loading
@@ -16,10 +16,10 @@ class Admin::ProjectsController < Admin::ApplicationController
Loading
@@ -16,10 +16,10 @@ class Admin::ProjectsController < Admin::ApplicationController
   
def show def show
if @group if @group
@group_members = @group.members.order("group_access DESC").page(params[:group_members_page]).per(30) @group_members = @group.members.order("access_level DESC").page(params[:group_members_page]).per(30)
end end
   
@project_members = @project.users_projects.page(params[:project_members_page]).per(30) @project_members = @project.project_members.page(params[:project_members_page]).per(30)
end end
   
def transfer def transfer
Loading
Loading
class UsersGroupsController < ApplicationController class Groups::GroupMembersController < ApplicationController
before_filter :group before_filter :group
   
# Authorize # Authorize
Loading
@@ -7,18 +7,18 @@ class UsersGroupsController < ApplicationController
Loading
@@ -7,18 +7,18 @@ class UsersGroupsController < ApplicationController
layout 'group' layout 'group'
   
def create def create
@group.add_users(params[:user_ids].split(','), params[:group_access]) @group.add_users(params[:user_ids].split(','), params[:access_level])
   
redirect_to members_group_path(@group), notice: 'Users were successfully added.' redirect_to members_group_path(@group), notice: 'Users were successfully added.'
end end
   
def update def update
@member = @group.users_groups.find(params[:id]) @member = @group.group_members.find(params[:id])
@member.update_attributes(member_params) @member.update_attributes(member_params)
end end
   
def destroy def destroy
@users_group = @group.users_groups.find(params[:id]) @users_group = @group.group_members.find(params[:id])
if can?(current_user, :destroy, @users_group) # May fail if last owner. if can?(current_user, :destroy, @users_group) # May fail if last owner.
@users_group.destroy @users_group.destroy
respond_to do |format| respond_to do |format|
Loading
@@ -43,6 +43,6 @@ class UsersGroupsController < ApplicationController
Loading
@@ -43,6 +43,6 @@ class UsersGroupsController < ApplicationController
end end
   
def member_params def member_params
params.require(:users_group).permit(:group_access, :user_id) params.require(:group_member).permit(:access_level, :user_id)
end end
end end
Loading
@@ -65,15 +65,15 @@ class GroupsController < ApplicationController
Loading
@@ -65,15 +65,15 @@ class GroupsController < ApplicationController
   
def members def members
@project = group.projects.find(params[:project_id]) if params[:project_id] @project = group.projects.find(params[:project_id]) if params[:project_id]
@members = group.users_groups @members = group.group_members
   
if params[:search].present? if params[:search].present?
users = group.users.search(params[:search]).to_a users = group.users.search(params[:search]).to_a
@members = @members.where(user_id: users) @members = @members.where(user_id: users)
end end
   
@members = @members.order('group_access DESC').page(params[:page]).per(50) @members = @members.order('access_level DESC').page(params[:page]).per(50)
@users_group = UsersGroup.new @users_group = GroupMember.new
end end
   
def edit def edit
Loading
Loading
Loading
@@ -2,11 +2,11 @@ class Profiles::GroupsController < ApplicationController
Loading
@@ -2,11 +2,11 @@ class Profiles::GroupsController < ApplicationController
layout "profile" layout "profile"
   
def index def index
@user_groups = current_user.users_groups.page(params[:page]).per(20) @user_groups = current_user.group_members.page(params[:page]).per(20)
end end
   
def leave def leave
@users_group = group.users_groups.where(user_id: current_user.id).first @users_group = group.group_members.where(user_id: current_user.id).first
if can?(current_user, :destroy, @users_group) if can?(current_user, :destroy, @users_group)
@users_group.destroy @users_group.destroy
redirect_to(profile_groups_path, info: "You left #{group.name} group.") redirect_to(profile_groups_path, info: "You left #{group.name} group.")
Loading
Loading
Loading
@@ -3,8 +3,8 @@ class Profiles::NotificationsController < ApplicationController
Loading
@@ -3,8 +3,8 @@ class Profiles::NotificationsController < ApplicationController
   
def show def show
@notification = current_user.notification @notification = current_user.notification
@users_projects = current_user.users_projects @project_members = current_user.project_members
@users_groups = current_user.users_groups @group_members = current_user.group_members
end end
   
def update def update
Loading
@@ -14,13 +14,13 @@ class Profiles::NotificationsController < ApplicationController
Loading
@@ -14,13 +14,13 @@ class Profiles::NotificationsController < ApplicationController
current_user.notification_level = params[:notification_level] current_user.notification_level = params[:notification_level]
current_user.save current_user.save
elsif type == 'group' elsif type == 'group'
users_group = current_user.users_groups.find(params[:notification_id]) users_group = current_user.group_members.find(params[:notification_id])
users_group.notification_level = params[:notification_level] users_group.notification_level = params[:notification_level]
users_group.save users_group.save
else else
users_project = current_user.users_projects.find(params[:notification_id]) project_member = current_user.project_members.find(params[:notification_id])
users_project.notification_level = params[:notification_level] project_member.notification_level = params[:notification_level]
users_project.save project_member.save
end end
end end
end end
Loading
@@ -6,17 +6,17 @@ class Projects::TeamMembersController < Projects::ApplicationController
Loading
@@ -6,17 +6,17 @@ class Projects::TeamMembersController < Projects::ApplicationController
   
def index def index
@group = @project.group @group = @project.group
@users_projects = @project.users_projects.order('project_access DESC') @project_members = @project.project_members.order('access_level DESC')
end end
   
def new def new
@user_project_relation = project.users_projects.new @user_project_relation = project.project_members.new
end end
   
def create def create
users = User.where(id: params[:user_ids].split(',')) users = User.where(id: params[:user_ids].split(','))
   
@project.team << [users, params[:project_access]] @project.team << [users, params[:access_level]]
   
if params[:redirect_to] if params[:redirect_to]
redirect_to params[:redirect_to] redirect_to params[:redirect_to]
Loading
@@ -26,7 +26,7 @@ class Projects::TeamMembersController < Projects::ApplicationController
Loading
@@ -26,7 +26,7 @@ class Projects::TeamMembersController < Projects::ApplicationController
end end
   
def update def update
@user_project_relation = project.users_projects.find_by(user_id: member) @user_project_relation = project.project_members.find_by(user_id: member)
@user_project_relation.update_attributes(member_params) @user_project_relation.update_attributes(member_params)
   
unless @user_project_relation.valid? unless @user_project_relation.valid?
Loading
@@ -36,7 +36,7 @@ class Projects::TeamMembersController < Projects::ApplicationController
Loading
@@ -36,7 +36,7 @@ class Projects::TeamMembersController < Projects::ApplicationController
end end
   
def destroy def destroy
@user_project_relation = project.users_projects.find_by(user_id: member) @user_project_relation = project.project_members.find_by(user_id: member)
@user_project_relation.destroy @user_project_relation.destroy
   
respond_to do |format| respond_to do |format|
Loading
@@ -46,7 +46,7 @@ class Projects::TeamMembersController < Projects::ApplicationController
Loading
@@ -46,7 +46,7 @@ class Projects::TeamMembersController < Projects::ApplicationController
end end
   
def leave def leave
project.users_projects.find_by(user_id: current_user).destroy project.project_members.find_by(user_id: current_user).destroy
   
respond_to do |format| respond_to do |format|
format.html { redirect_to :back } format.html { redirect_to :back }
Loading
@@ -69,6 +69,6 @@ class Projects::TeamMembersController < Projects::ApplicationController
Loading
@@ -69,6 +69,6 @@ class Projects::TeamMembersController < Projects::ApplicationController
end end
   
def member_params def member_params
params.require(:team_member).permit(:user_id, :project_access) params.require(:project_member).permit(:user_id, :access_level)
end end
end end
Loading
@@ -19,10 +19,8 @@ class ProjectsFinder
Loading
@@ -19,10 +19,8 @@ class ProjectsFinder
# Return ALL group projects # Return ALL group projects
group.projects group.projects
else else
projects_members = UsersProject.where( projects_members = ProjectMember.in_projects(group.projects).
project_id: group.projects, with_user(current_user)
user_id: current_user
)
   
if projects_members.any? if projects_members.any?
# User is a project member # User is a project member
Loading
@@ -34,7 +32,7 @@ class ProjectsFinder
Loading
@@ -34,7 +32,7 @@ class ProjectsFinder
# #
group.projects.where( group.projects.where(
"projects.id IN (?) OR projects.visibility_level IN (?)", "projects.id IN (?) OR projects.visibility_level IN (?)",
projects_members.pluck(:project_id), projects_members.pluck(:source_id),
Project.public_and_internal_levels Project.public_and_internal_levels
) )
else else
Loading
Loading
module Emails module Emails
module Groups module Groups
def group_access_granted_email(user_group_id) def group_access_granted_email(user_group_id)
@membership = UsersGroup.find(user_group_id) @membership = GroupMember.find(user_group_id)
@group = @membership.group @group = @membership.group
@target_url = group_url(@group) @target_url = group_url(@group)
mail(to: @membership.user.email, mail(to: @membership.user.email,
Loading
Loading
module Emails module Emails
module Projects module Projects
def project_access_granted_email(user_project_id) def project_access_granted_email(user_project_id)
@users_project = UsersProject.find user_project_id @project_member = ProjectMember.find user_project_id
@project = @users_project.project @project = @project_member.project
@target_url = project_url(@project) @target_url = project_url(@project)
mail(to: @users_project.user.email, mail(to: @project_member.user.email,
subject: subject("Access to project was granted")) subject: subject("Access to project was granted"))
end end
   
Loading
Loading
Loading
@@ -14,7 +14,7 @@ class Ability
Loading
@@ -14,7 +14,7 @@ class Ability
when "MergeRequest" then merge_request_abilities(user, subject) when "MergeRequest" then merge_request_abilities(user, subject)
when "Group" then group_abilities(user, subject) when "Group" then group_abilities(user, subject)
when "Namespace" then namespace_abilities(user, subject) when "Namespace" then namespace_abilities(user, subject)
when "UsersGroup" then users_group_abilities(user, subject) when "GroupMember" then users_group_abilities(user, subject)
else [] else []
end.concat(global_abilities(user)) end.concat(global_abilities(user))
end end
Loading
Loading
# == Notifiable concern # == Notifiable concern
# #
# Contains notification functionality shared between UsersProject and UsersGroup # Contains notification functionality
# #
module Notifiable module Notifiable
extend ActiveSupport::Concern extend ActiveSupport::Concern
Loading
Loading
Loading
@@ -17,8 +17,8 @@ require 'carrierwave/orm/activerecord'
Loading
@@ -17,8 +17,8 @@ require 'carrierwave/orm/activerecord'
require 'file_size_validator' require 'file_size_validator'
   
class Group < Namespace class Group < Namespace
has_many :users_groups, dependent: :destroy has_many :group_members, dependent: :destroy, as: :source, class_name: 'GroupMember'
has_many :users, through: :users_groups has_many :users, through: :group_members
   
validate :avatar_type, if: ->(user) { user.avatar_changed? } validate :avatar_type, if: ->(user) { user.avatar_changed? }
validates :avatar, file_size: { maximum: 100.kilobytes.to_i } validates :avatar, file_size: { maximum: 100.kilobytes.to_i }
Loading
@@ -30,22 +30,22 @@ class Group < Namespace
Loading
@@ -30,22 +30,22 @@ class Group < Namespace
end end
   
def owners def owners
@owners ||= users_groups.owners.map(&:user) @owners ||= group_members.owners.map(&:user)
end end
   
def add_users(user_ids, group_access) def add_users(user_ids, access_level)
user_ids.compact.each do |user_id| user_ids.compact.each do |user_id|
user = self.users_groups.find_or_initialize_by(user_id: user_id) user = self.group_members.find_or_initialize_by(user_id: user_id)
user.update_attributes(group_access: group_access) user.update_attributes(access_level: access_level)
end end
end end
   
def add_user(user, group_access) def add_user(user, access_level)
self.users_groups.create(user_id: user.id, group_access: group_access) self.group_members.create(user_id: user.id, access_level: access_level)
end end
   
def add_owner(user) def add_owner(user)
self.add_user(user, UsersGroup::OWNER) self.add_user(user, Gitlab::Access::OWNER)
end end
   
def has_owner?(user) def has_owner?(user)
Loading
@@ -61,7 +61,7 @@ class Group < Namespace
Loading
@@ -61,7 +61,7 @@ class Group < Namespace
end end
   
def members def members
users_groups group_members
end end
   
def avatar_type def avatar_type
Loading
Loading
File moved
File moved
File moved
File moved
class Member < ActiveRecord::Base
include Notifiable
include Gitlab::Access
belongs_to :user
belongs_to :source, polymorphic: true
validates :user, presence: true
validates :source, presence: true
validates :user_id, uniqueness: { scope: [:source_type, :source_id], message: "already exists in source" }
validates :access_level, inclusion: { in: Gitlab::Access.all_values }, presence: true
scope :guests, -> { where(access_level: GUEST) }
scope :reporters, -> { where(access_level: REPORTER) }
scope :developers, -> { where(access_level: DEVELOPER) }
scope :masters, -> { where(access_level: MASTER) }
scope :owners, -> { where(access_level: OWNER) }
delegate :name, :username, :email, to: :user, prefix: true
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment