summaryrefslogtreecommitdiff
path: root/app/models/member.rb
diff options
context:
space:
mode:
authorDavid Alexander <davidpaulalexander@gmail.com>2016-03-14 09:13:35 -0400
committerRémy Coutable <remy@rymai.me>2016-06-14 12:12:02 +0200
commit17c22156c5fa5663aae65178ed38cbeef9a80b7e (patch)
tree5bd90d34c7360c892f6ea57dd1d3e4a6350a51cd /app/models/member.rb
parent0c0ef7dfb6afb1695b62037fc0fa5aba6ce697d7 (diff)
downloadgitlab-ce-17c22156c5fa5663aae65178ed38cbeef9a80b7e.tar.gz
Initial implementation of user access request to projects
Diffstat (limited to 'app/models/member.rb')
-rw-r--r--app/models/member.rb60
1 files changed, 55 insertions, 5 deletions
diff --git a/app/models/member.rb b/app/models/member.rb
index d3060f07fc0..2210e7dd66a 100644
--- a/app/models/member.rb
+++ b/app/models/member.rb
@@ -27,7 +27,12 @@ class Member < ActiveRecord::Base
}
scope :invite, -> { where(user_id: nil) }
- scope :non_invite, -> { where("user_id IS NOT NULL") }
+ scope :non_invite, -> { where('user_id IS NOT NULL') }
+ scope :request, -> { where(requested: true) }
+ scope :non_request, -> { where(requested: nil) }
+ scope :pending, -> { where("user_id IS NULL OR requested") }
+ scope :non_pending, -> { self.non_invite.non_request }
+
scope :guests, -> { where(access_level: GUEST) }
scope :reporters, -> { where(access_level: REPORTER) }
scope :developers, -> { where(access_level: DEVELOPER) }
@@ -35,11 +40,16 @@ class Member < ActiveRecord::Base
scope :owners, -> { where(access_level: OWNER) }
before_validation :generate_invite_token, on: :create, if: -> (member) { member.invite_email.present? }
+
after_create :send_invite, if: :invite?
- after_create :create_notification_setting, unless: :invite?
- after_create :post_create_hook, unless: :invite?
- after_update :post_update_hook, unless: :invite?
- after_destroy :post_destroy_hook, unless: :invite?
+ after_create :send_request_access, if: :request?
+
+ after_create :create_notification_setting, unless: :pending?
+ after_create :post_create_hook, unless: :pending?
+
+ after_update :post_update_hook, unless: :pending?
+
+ after_destroy :post_destroy_hook, unless: :pending?
delegate :name, :username, :email, to: :user, prefix: true
@@ -96,10 +106,38 @@ class Member < ActiveRecord::Base
end
end
+ def pending?
+ request? || invite?
+ end
+
+ def request?
+ self.requested
+ end
+
def invite?
self.invite_token.present?
end
+ def accept_request_access!
+ return false unless request?
+
+ self.request = false
+ saved = self.save
+
+ after_accept_request_access if saved
+
+ saved
+ end
+
+ def decline_request_access!
+ return false unless request?
+
+ destroyed = self.destroy
+ after_decline_request_access if destroyed
+
+ destroyed
+ end
+
def accept_invite!(new_user)
return false unless invite?
@@ -153,6 +191,10 @@ class Member < ActiveRecord::Base
private
+ def send_request_access
+ # override in subclass
+ end
+
def send_invite
# override in subclass
end
@@ -169,6 +211,14 @@ class Member < ActiveRecord::Base
system_hook_service.execute_hooks_for(self, :destroy)
end
+ def after_accept_request_access
+ post_create_hook
+ end
+
+ def after_decline_request_access
+ # override in subclass
+ end
+
def after_accept_invite
post_create_hook
end