|
class InvitesController < ApplicationController
def invite
@invite = Invite.new
@sent_invites = Invite.where(user_id: current_user.id)
end
def send_invite_message
@to = invites_params[:email]
@message = invites_params[:message]
@invite = Invite.where(email: @to).where(user_id: current_user.id).first
if @invite == nil
original_invite = Invite.where(email: @to).first
@invite = Invite.create!(email: @to, user_id: current_user.id, invitations_sent: 1, last_invitation_sent_date: Time.now)
if original_invite == nil
# Devise Invitable
@user = User.invite!({email: @to}, current_user) do |u|
u.skip_invitation = true
end
token = @user.raw_invitation_token
token_url = accept_invitation_url(@user, :invitation_token => token)
@invite.update(token: token_url, new_user_id: @user.id)
else
@invite.update(token: original_invite.token, new_user_id: original_invite.new_user_id)
end
else
@invite.update(invitations_sent: (@invite.invitations_sent.to_i + 1), last_invitation_sent_date: Time.now)
end
@user = User.find(@invite.new_user_id)
if UserMailer.invite_message(@user, current_user, @message, @invite.token).deliver
@user.update(invitation_sent_at: Time.now.utc)
@analytics.track('Invite sent')
flash[:notice] = "successfully sent invite to #{@user.email}"
redirect_to invite_path
else
redirect_to invite_path, alert: (t 'invite.error_invitation_not_sent')
end
end
def resend_invite_message
@invite = Invite.find(params[:id])
@invite.update(invitations_sent: (@invite.invitations_sent.to_i + 1), last_invitation_sent_date: Time.now)
@user = User.where(email: @invite.email).first
UserMailer.invite_message(@user, current_user, @message, @invite.token).deliver
if @user.errors.empty? && @user.update(invitation_sent_at: Time.now.utc)
@analytics.track('Invite sent')
flash[:notice] = "successfully sent invite to #{@user.email}"
redirect_to invite_path
else
redirect_to invite_path, alert: (t 'invite.error_invitation_not_sent')
end
end
private
def invites_params
params.require(:invite).permit(:email, :message)
end
end
|