1 # == Schema Information
3 # Table name: user_teams
5 # id :integer not null, primary key
9 # created_at :datetime not null
10 # updated_at :datetime not null
13 class UserTeam < ActiveRecord::Base
14 attr_accessible :name, :owner_id, :path
16 belongs_to :owner, class_name: User
18 has_many :user_team_project_relationships, dependent: :destroy
19 has_many :user_team_user_relationships, dependent: :destroy
21 has_many :projects, through: :user_team_project_relationships
22 has_many :members, through: :user_team_user_relationships, source: :user
24 validates :name, presence: true, uniqueness: true
25 validates :owner, presence: true
26 validates :path, uniqueness: true, presence: true, length: { within: 1..255 },
27 format: { with: Gitlab::Regex.path_regex,
28 message: "only letters, digits & '_' '-' '.' allowed. Letter should be first" }
30 scope :with_member, ->(user){ joins(:user_team_user_relationships).where(user_team_user_relationships: {user_id: user.id}) }
31 scope :with_project, ->(project){ joins(:user_team_project_relationships).where(user_team_project_relationships: {project_id: project})}
32 scope :without_project, ->(project){ where("user_teams.id NOT IN (:ids)", ids: (a = with_project(project); a.blank? ? 0 : a))}
33 scope :created_by, ->(user){ where(owner_id: user) }
37 where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
45 UsersProject.access_roles
53 def assign_to_projects(projects, access)
54 projects.each do |project|
55 assign_to_project(project, access)
59 def assign_to_project(project, access)
60 Gitlab::UserTeamManager.assign(self, project, access)
63 def resign_from_project(project)
64 Gitlab::UserTeamManager.resign(self, project)
67 def add_members(users, access, group_admin)
69 add_member(user, access, group_admin)
73 def add_member(user, access, group_admin)
74 Gitlab::UserTeamManager.add_member_into_team(self, user, access, group_admin)
77 def remove_member(user)
78 Gitlab::UserTeamManager.remove_member_from_team(self, user)
81 def update_membership(user, options)
82 Gitlab::UserTeamManager.update_team_user_membership(self, user, options)
85 def update_project_access(project, permission)
86 Gitlab::UserTeamManager.update_project_greates_access(self, project, permission)
89 def max_project_access(project)
90 user_team_project_relationships.find_by_project_id(project).greatest_access
93 def human_max_project_access(project)
94 self.class.access_roles.invert[max_project_access(project)]
97 def default_projects_access(member)
98 user_team_user_relationships.find_by_user_id(member).permission
101 def human_default_projects_access(member)
102 self.class.access_roles.invert[default_projects_access(member)]
106 user_team_user_relationships.with_user(member).first.group_admin?