/
invitations_controller.rb
61 lines (48 loc) · 1.78 KB
/
invitations_controller.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
class InvitationsController < ApplicationController
before_action :authenticate_user!, except: [:accept]
before_action :require_organization!, except: [:accept]
def new
@invitation = Invitation.new
end
def create
@invitation = Invitation.new(invitation_params)
if @invitation.valid?
membership = @invitation.create_membership
membership.invite!(current_user)
@pending_memberships = current_organization.memberships.pending
end
end
def resend
membership = current_organization.memberships.find(params[:id])
UserMailer.send_invitation(membership, current_user)
redirect_to memberships_path, notice: "The invitation was sent successfully"
end
def accept
token = Devise.token_generator.digest(Membership, :invitation_token, params[:id])
membership = Membership.find_by!(invitation_token: token)
user, organization = membership.user, membership.organization
sign_out(current_user) if current_user && current_user != user
user.update(current_organization: organization) if user.current_organization != organization
redirect_to path_for_membership(membership)
end
private
def invitation_params
params.require(:invitation).permit(:email, :admin).merge(organization: current_organization)
end
def path_for_membership(m)
m.active? ? path_for_active_membership(m) : path_for_pending_membership(m)
end
def path_for_active_membership(m)
flash[:notice] = "The membership is already active"
root_path
end
def path_for_pending_membership(m)
if user_signed_in?
root_path
elsif m.user.sign_in_count > 0
new_user_session_path(email: m.user.email)
else
activate_user_path(m.user, invitation_token: m.invitation_token)
end
end
end