summaryrefslogtreecommitdiff
path: root/app/models
diff options
context:
space:
mode:
authorAdam Niedzielski <adamsunday@gmail.com>2016-08-01 20:12:30 +0200
committerAdam Niedzielski <adamsunday@gmail.com>2016-08-01 20:12:30 +0200
commit6d92cd3e836f2252b660479f5b33d15e6456b04d (patch)
tree547f223094b73a62ce033e9526660dd5457a45a8 /app/models
parente299504b798c053817f1c866649542ac0c779924 (diff)
downloadgitlab-ce-6d92cd3e836f2252b660479f5b33d15e6456b04d.tar.gz
WIP
Diffstat (limited to 'app/models')
-rw-r--r--app/models/member.rb6
-rw-r--r--app/models/members/project_member.rb4
-rw-r--r--app/models/project_team.rb5
-rw-r--r--app/models/user.rb2
4 files changed, 10 insertions, 7 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index 24ab1276ee9..998144330b1 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -31,6 +31,7 @@ class Member < ActiveRecord::Base
scope :non_invite, -> { where(invite_token: nil) }
scope :request, -> { where.not(requested_at: nil) }
scope :has_access, -> { where('access_level > 0') }
+ scope :still_active, -> { where('expires_at IS NULL OR expires_at > ?', Time.current) }
scope :guests, -> { where(access_level: GUEST) }
scope :reporters, -> { where(access_level: REPORTER) }
@@ -54,7 +55,7 @@ class Member < ActiveRecord::Base
class << self
def access_for_user_ids(user_ids)
- where(user_id: user_ids).has_access.pluck(:user_id, :access_level).to_h
+ where(user_id: user_ids).has_access.still_active.pluck(:user_id, :access_level).to_h
end
def find_by_invite_token(invite_token)
@@ -73,7 +74,7 @@ class Member < ActiveRecord::Base
user
end
- def add_user(members, user_id, access_level, current_user = nil)
+ def add_user(members, user_id, access_level, current_user = nil, expires_at = nil)
user = user_for_id(user_id)
# `user` can be either a User object or an email to be invited
@@ -87,6 +88,7 @@ class Member < ActiveRecord::Base
if can_update_member?(current_user, member) || project_creator?(member, access_level)
member.created_by ||= current_user
member.access_level = access_level
+ member.expires_at = expires_at
member.save
end
diff --git a/app/models/members/project_member.rb b/app/models/members/project_member.rb
index f39afc61ce9..b86b536005b 100644
--- a/app/models/members/project_member.rb
+++ b/app/models/members/project_member.rb
@@ -33,7 +33,7 @@ class ProjectMember < Member
# :master
# )
#
- def add_users_into_projects(project_ids, user_ids, access, current_user = nil)
+ def add_users_into_projects(project_ids, user_ids, access, current_user = nil, expires_at = nil)
access_level = if roles_hash.has_key?(access)
roles_hash[access]
elsif roles_hash.values.include?(access.to_i)
@@ -49,7 +49,7 @@ class ProjectMember < Member
project = Project.find(project_id)
users.each do |user|
- Member.add_user(project.project_members, user, access_level, current_user)
+ Member.add_user(project.project_members, user, access_level, current_user, expires_at)
end
end
end
diff --git a/app/models/project_team.rb b/app/models/project_team.rb
index fdfaf052730..cf1d2396974 100644
--- a/app/models/project_team.rb
+++ b/app/models/project_team.rb
@@ -33,12 +33,13 @@ class ProjectTeam
member
end
- def add_users(users, access, current_user = nil)
+ def add_users(users, access, current_user = nil, expires_at = nil)
ProjectMember.add_users_into_projects(
[project.id],
users,
access,
- current_user
+ current_user,
+ expires_at
)
end
diff --git a/app/models/user.rb b/app/models/user.rb
index db747434959..2995db9a5f2 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -66,7 +66,7 @@ class User < ActiveRecord::Base
# Projects
has_many :groups_projects, through: :groups, source: :projects
has_many :personal_projects, through: :namespace, source: :projects
- has_many :project_members, -> { where(requested_at: nil) }, dependent: :destroy, class_name: 'ProjectMember'
+ has_many :project_members, -> { where(requested_at: nil).still_active }, dependent: :destroy, class_name: 'ProjectMember'
has_many :projects, through: :project_members
has_many :created_projects, foreign_key: :creator_id, class_name: 'Project'
has_many :users_star_projects, dependent: :destroy