summaryrefslogtreecommitdiff
path: root/app/models/users_project.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/users_project.rb')
-rw-r--r--app/models/users_project.rb131
1 files changed, 70 insertions, 61 deletions
diff --git a/app/models/users_project.rb b/app/models/users_project.rb
index 3d76a4df037..79146289836 100644
--- a/app/models/users_project.rb
+++ b/app/models/users_project.rb
@@ -11,7 +11,7 @@
#
class UsersProject < ActiveRecord::Base
- include GitHost
+ include Gitolited
GUEST = 10
REPORTER = 20
@@ -23,87 +23,96 @@ class UsersProject < ActiveRecord::Base
belongs_to :user
belongs_to :project
- after_save :update_repository
- after_destroy :update_repository
+ attr_accessor :skip_git
+
+ after_save :update_repository, unless: :skip_git?
+ after_destroy :update_repository, unless: :skip_git?
validates :user, presence: true
- validates :user_id, uniqueness: { :scope => [:project_id], message: "already exists in project" }
+ validates :user_id, uniqueness: { scope: [:project_id], message: "already exists in project" }
validates :project_access, inclusion: { in: [GUEST, REPORTER, DEVELOPER, MASTER] }, presence: true
validates :project, presence: true
delegate :name, :email, to: :user, prefix: true
+ scope :guests, where(project_access: GUEST)
+ scope :reporters, where(project_access: REPORTER)
+ scope :developers, where(project_access: DEVELOPER)
+ scope :masters, where(project_access: MASTER)
+ scope :in_project, ->(project) { where(project_id: project.id) }
+
class << self
- def import_team(source_project, target_project)
- UsersProject.without_repository_callback do
- UsersProject.transaction do
- team = source_project.users_projects.all
-
- team.each do |tm|
- # Skip if user already present in team
- next if target_project.users.include?(tm.user)
-
- new_tm = tm.dup
- new_tm.id = nil
- new_tm.project_id = target_project.id
- new_tm.save
+
+ # Add users to project teams with passed access option
+ #
+ # access can be an integer representing a access code
+ # or symbol like :master representing role
+ #
+ # Ex.
+ # add_users_into_projects(
+ # project_ids,
+ # user_ids,
+ # UsersProject::MASTER
+ # )
+ #
+ # add_users_into_projects(
+ # project_ids,
+ # user_ids,
+ # :master
+ # )
+ #
+ def add_users_into_projects(project_ids, user_ids, access)
+ project_access = if roles_hash.has_key?(access)
+ roles_hash[access]
+ elsif roles_hash.values.include?(access.to_i)
+ access
+ else
+ raise "Non valid access"
+ end
+
+ UsersProject.transaction do
+ project_ids.each do |project_id|
+ user_ids.each do |user_id|
+ users_project = UsersProject.new(project_access: project_access, user_id: user_id)
+ users_project.project_id = project_id
+ users_project.skip_git = true
+ users_project.save
end
end
+ Gitlab::Gitolite.new.update_repositories(Project.where(id: project_ids))
end
- target_project.update_repository
true
rescue
false
end
- def without_repository_callback
- UsersProject.skip_callback(:destroy, :after, :update_repository)
- yield
- UsersProject.set_callback(:destroy, :after, :update_repository)
- end
-
- def bulk_delete(project, user_ids)
+ def truncate_teams(project_ids)
UsersProject.transaction do
- UsersProject.where(:user_id => user_ids, :project_id => project.id).each do |users_project|
+ users_projects = UsersProject.where(project_id: project_ids)
+ users_projects.each do |users_project|
+ users_project.skip_git = true
users_project.destroy
end
+ Gitlab::Gitolite.new.update_repositories(Project.where(id: project_ids))
end
- end
- def bulk_update(project, user_ids, project_access)
- UsersProject.transaction do
- UsersProject.where(:user_id => user_ids, :project_id => project.id).each do |users_project|
- users_project.project_access = project_access
- users_project.save
- end
- end
+ true
+ rescue
+ false
end
- def bulk_import(project, user_ids, project_access)
- UsersProject.transaction do
- user_ids.each do |user_id|
- users_project = UsersProject.new(
- project_access: project_access,
- user_id: user_id
- )
- users_project.project = project
- users_project.save
- end
- end
+ def truncate_team project
+ truncate_teams [project.id]
end
- def user_bulk_import(user, project_ids, project_access)
- UsersProject.transaction do
- project_ids.each do |project_id|
- users_project = UsersProject.new(
- project_access: project_access,
- )
- users_project.project_id = project_id
- users_project.user_id = user.id
- users_project.save
- end
- end
+ def roles_hash
+ {
+ guest: GUEST,
+ reporter: REPORTER,
+ developer: DEVELOPER,
+ master: MASTER
+ }
end
def access_roles
@@ -116,12 +125,8 @@ class UsersProject < ActiveRecord::Base
end
end
- def role_access
- project_access
- end
-
def update_repository
- git_host.update_repository(project)
+ gitolite.update_repository(project)
end
def project_access_human
@@ -131,4 +136,8 @@ class UsersProject < ActiveRecord::Base
def repo_access_human
self.class.access_roles.invert[self.project_access]
end
+
+ def skip_git?
+ !!@skip_git
+ end
end