Skip to content
Extraits de code Groupes Projets
invitation.rb 2,92 ko
Newer Older
  • Learn to ignore specific revisions
  • #   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
    
      validates_presence_of :sender, :recipient, :aspect
    
        return false if opts[:identifier] == opts[:from].email
    
    
        existing_user = self.find_existing_user(opts[:service], opts[:identifier])
    
        if existing_user
          if opts[:from].contact_for(opts[:from].person)
    
            raise "You are already connceted to this person"
    
            opts[:from].send_contact_request_to(existing_user.person, opts[:into])
    
          elsif Invitation.where(:sender_id => opts[:from].id, :recipient_id => existing_user.id).first
    
            raise "You already invited this person"
          end
        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
    
        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)
    
    maxwell's avatar
    maxwell a validé
        invitee.invites = opts[:invites] || 5
    
        if invitee.new_record?
    
          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)
    
          Invitation.create!(:sender => opts[:from],
                             :recipient => invitee,
                             :aspect => opts[:into],
    
                             :message => opts[:message])
    
          opts[:from].invites -= 1 unless opts[:from].invites == 0
          opts[:from].save!
          invitee.reload
    
        invitee.invite!(:email => (opts[:service] == 'email'))
    
        Rails.logger.info("event=invitation_sent to=#{opts[:identifier]} #{"inviter=#{opts[:from].diaspora_handle}" if opts[:from]}")
    
        request = sender.send_contact_request_to(recipient.person, aspect)