Newer
Older
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
belongs_to :sender, :class_name => 'User'
belongs_to :recipient, :class_name => 'User'
belongs_to :aspect
Raphael
a validé
def self.invite(opts = {})
return false if opts[:identifier] == opts[:from].email
existing_user = self.find_existing_user(opts[:service], opts[:identifier])
Raphael
a validé
if existing_user
if opts[:from].contact_for(opts[:from].person)
raise "You are already connceted to this person"
Raphael
a validé
elsif not existing_user.invited?
opts[:from].send_contact_request_to(existing_user.person, opts[:into])
Raphael
a validé
return
elsif Invitation.where(:sender_id => opts[:from].id, :recipient_id => existing_user.id).first
Raphael
a validé
raise "You already invited this person"
end
end
opts[:existing_user] = existing_user
create_invitee(opts)
Raphael
a validé
end
def self.find_existing_user(service, identifier)
existing_user = User.where(:invitation_service => service,
:invitation_identifier => identifier).first
if service == 'email'
existing_user ||= User.where(:email => identifier).first
else
existing_user ||= User.joins(:services).where(:services => {:type => "Services::#{service.titleize}", :uid => identifier}).first
existing_user
end
def self.new_user_by_service_and_identifier(service, identifier)
result = User.new()
result.invitation_service = service
result.invitation_identifier = identifier
result.email = identifier if service == 'email'
result.valid?
result
Raphael
a validé
def self.create_invitee(opts = {})
invitee = opts[:existing_user] || new_user_by_service_and_identifier(opts[:service], opts[:identifier])
return invitee if opts[:service] == 'email' && !opts[:identifier].match(Devise.email_regexp)
invitee.errors.clear
invitee.serialized_private_key ||= User.generate_key
invitee.send(:generate_invitation_token)
elsif invitee.invitation_token.nil?
return invitee
if opts[:from]
invitee.save(:validate => false)
:message => opts[:message])
Raphael
a validé
opts[:from].invites -= 1 unless opts[:from].invites == 0
opts[:from].save!
invitee.reload
end
invitee.invite!(:email => (opts[:service] == 'email'))
Rails.logger.info("event=invitation_sent to=#{opts[:identifier]} #{"inviter=#{opts[:from].diaspora_handle}" if opts[:from]}")
Raphael
a validé
end
def resend
recipient.invite!
end
Raphael
a validé
def to_request!
Raphael
a validé
destroy if request
request
end