Commit 360aa1b4075ba6ffa9927971c580db0059ab4842

Authored by Andrey Kumanyaev
Committed by Dmitriy Zaporozhets
1 parent 911f6eb1

Team core management

Showing 1 changed file with 93 additions and 0 deletions   Show diff stats
lib/gitlab/user_team_manager.rb 0 → 100644
... ... @@ -0,0 +1,93 @@
  1 +# UserTeamManager class
  2 +#
  3 +# Used for manage User teams with project repositories
  4 +module Gitlab
  5 + class UserTeamManager
  6 + class << self
  7 + def assign(team, project, access)
  8 + project = Project.find(project) unless project.is_a? Project
  9 + searched_project = team.user_team_project_relationships.find_by_project_id(project.id)
  10 +
  11 + unless searched_project.present?
  12 + team.user_team_project_relationships.create(project_id: project.id, greatest_access: access)
  13 + update_team_users_access_in_project(team, project)
  14 + end
  15 + end
  16 +
  17 + def resign(team, project)
  18 + project = Project.find(project) unless project.is_a? Project
  19 +
  20 + team.user_team_project_relationships.with_project(project).destroy_all
  21 +
  22 + update_team_users_access_in_project(team, project)
  23 + end
  24 +
  25 + def update_team_users_access_in_project(team, project)
  26 + members = team.members
  27 + members.each do |member|
  28 + update_team_user_access_in_project(team, member, project)
  29 + end
  30 + end
  31 +
  32 + def update_team_user_access_in_project(team, user, project)
  33 + granted_access = max_teams_member_permission_in_project(user, project)
  34 +
  35 + project_team_user = UsersProject.find_by_user_id_and_project_id(user.id, project.id)
  36 +
  37 + if project_team_user.present?
  38 + project_team_user.destroy
  39 + end
  40 +
  41 + if project_team_user.blank? && granted_access > 0
  42 + UsersProject.add_users_into_projects([project.id], [user.id], granted_access)
  43 + end
  44 + end
  45 +
  46 + def max_teams_member_permission_in_project(user, project, teams = nil)
  47 + result_access = 0
  48 +
  49 + user_teams = project.user_teams.with_member(user)
  50 +
  51 + teams ||= user_teams
  52 +
  53 + if teams.any?
  54 + teams.each do |team|
  55 + granted_access = max_team_member_permission_in_project(team, user, project)
  56 + result_access = [granted_access, result_access].max
  57 + end
  58 + end
  59 + result_access
  60 + end
  61 +
  62 + def max_team_member_permission_in_project(team, user, project)
  63 + member_access = team.default_projects_access(user)
  64 + team_access = team.user_team_project_relationships.find_by_project_id(project.id).greatest_access
  65 +
  66 + [team_access, member_access].min
  67 + end
  68 +
  69 + def add_member_into_team(team, user, access, admin)
  70 + user = User.find(user) unless user.is_a? User
  71 +
  72 + team.user_team_user_relationships.create(user_id: user.id, permission: access, group_admin: admin)
  73 + team.projects.each do |project|
  74 + update_team_user_access_in_project(team, user, project)
  75 + end
  76 + end
  77 +
  78 + def remove_member_from_team(team, user)
  79 + user = User.find(user) unless user.is_a? User
  80 +
  81 + team.user_team_user_relationships.with_user(user).destroy_all
  82 + other_teams = []
  83 + team.projects.each do |project|
  84 + other_teams << project.user_teams.with_member(user)
  85 + end
  86 + other_teams.uniq
  87 + unless other_teams.any?
  88 + UsersProject.in_projects(team.projects).with_user(user).destroy_all
  89 + end
  90 + end
  91 + end
  92 + end
  93 +end
... ...