1 class UserTeam < ActiveRecord::Base
2 attr_accessible :name, :owner_id, :path
4 belongs_to :owner, class_name: User
6 has_many :user_team_project_relationships, dependent: :destroy
7 has_many :user_team_user_relationships, dependent: :destroy
9 has_many :projects, through: :user_team_project_relationships
10 has_many :members, through: :user_team_user_relationships, source: :user
12 validates :name, presence: true, uniqueness: true
13 validates :owner, presence: true
14 validates :path, uniqueness: true, presence: true, length: { within: 1..255 },
15 format: { with: Gitlab::Regex.path_regex,
16 message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
18 scope :with_member, ->(user){ joins(:user_team_user_relationships).where(user_team_user_relationships: {user_id: user.id}) }
19 scope :with_project, ->(project){ joins(:user_team_project_relationships).where(user_team_project_relationships: {project_id: project})}
20 scope :without_project, ->(project){ where("id NOT IN (:ids)", ids: (a = with_project(project); a.blank? ? 0 : a))}
21 scope :created_by, ->(user){ where(owner_id: user) }
25 where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
33 UsersProject.access_roles
41 def assign_to_projects(projects, access)
42 projects.each do |project|
43 assign_to_project(project, access)
47 def assign_to_project(project, access)
48 Gitlab::UserTeamManager.assign(self, project, access)
51 def resign_from_project(project)
52 Gitlab::UserTeamManager.resign(self, project)
55 def add_members(users, access, group_admin)
57 add_member(user, access, group_admin)
61 def add_member(user, access, group_admin)
62 Gitlab::UserTeamManager.add_member_into_team(self, user, access, group_admin)
65 def remove_member(user)
66 Gitlab::UserTeamManager.remove_member_from_team(self, user)
69 def update_membership(user, options)
70 Gitlab::UserTeamManager.update_team_user_membership(self, user, options)
73 def update_project_access(project, permission)
74 Gitlab::UserTeamManager.update_project_greates_access(self, project, permission)
77 def max_project_access(project)
78 user_team_project_relationships.find_by_project_id(project).greatest_access
81 def human_max_project_access(project)
82 self.class.access_roles.invert[max_project_access(project)]
85 def default_projects_access(member)
86 user_team_user_relationships.find_by_user_id(member).permission
89 def human_default_projects_access(member)
90 self.class.access_roles.invert[default_projects_access(member)]
94 user_team_user_relationships.with_user(member).first.group_admin?