OSDN Git Service

fix scope to empty relation
[wvm/gitlab.git] / app / models / user_team.rb
1 class UserTeam < ActiveRecord::Base
2   attr_accessible :name, :owner_id, :path
3
4   belongs_to :owner, class_name: User
5
6   has_many :user_team_project_relationships, dependent: :destroy
7   has_many :user_team_user_relationships, dependent: :destroy
8
9   has_many :projects, through: :user_team_project_relationships
10   has_many :members,  through: :user_team_user_relationships, source: :user
11
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" }
17
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) }
22
23   class << self
24     def search query
25       where("name LIKE :query OR path LIKE :query", query: "%#{query}%")
26     end
27
28     def global_id
29       'GLN'
30     end
31
32     def access_roles
33       UsersProject.access_roles
34     end
35   end
36
37   def to_param
38     path
39   end
40
41   def assign_to_projects(projects, access)
42     projects.each do |project|
43       assign_to_project(project, access)
44     end
45   end
46
47   def assign_to_project(project, access)
48     Gitlab::UserTeamManager.assign(self, project, access)
49   end
50
51   def resign_from_project(project)
52     Gitlab::UserTeamManager.resign(self, project)
53   end
54
55   def add_members(users, access, group_admin)
56     users.each do |user|
57       add_member(user, access, group_admin)
58     end
59   end
60
61   def add_member(user, access, group_admin)
62     Gitlab::UserTeamManager.add_member_into_team(self, user, access, group_admin)
63   end
64
65   def remove_member(user)
66     Gitlab::UserTeamManager.remove_member_from_team(self, user)
67   end
68
69   def update_membership(user, options)
70     Gitlab::UserTeamManager.update_team_user_membership(self, user, options)
71   end
72
73   def update_project_access(project, permission)
74     Gitlab::UserTeamManager.update_project_greates_access(self, project, permission)
75   end
76
77   def max_project_access(project)
78     user_team_project_relationships.find_by_project_id(project).greatest_access
79   end
80
81   def human_max_project_access(project)
82     self.class.access_roles.invert[max_project_access(project)]
83   end
84
85   def default_projects_access(member)
86     user_team_user_relationships.find_by_user_id(member).permission
87   end
88
89   def human_default_projects_access(member)
90     self.class.access_roles.invert[default_projects_access(member)]
91   end
92
93   def admin?(member)
94     user_team_user_relationships.with_user(member).first.group_admin?
95   end
96
97 end