class InviteFriend < Task acts_as_having_settings :group_for_person, :group_for_friend, :message, :friend_name, :friend_email, :field => :data validates_presence_of :requestor_id validates_presence_of :target_id, :if => Proc.new{|invite| invite.friend_email.blank? } validates_presence_of :friend_email, :if => Proc.new{|invite| invite.target_id.blank? } validates_format_of :friend_email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => Proc.new{|invite| invite.target_id.blank? } validates_presence_of :message, :if => Proc.new{|invite| invite.target_id.blank? } validates_format_of :message, :with => //, :if => Proc.new{|invite| invite.target_id.blank? } alias :person :requestor alias :person= :requestor= alias :friend :target alias :friend= :target= after_create do |task| TaskMailer.deliver_invitation_notification(task) unless task.friend end def validate super friendemail = friend ? friend.user.email : friend_email if person && friendemail && person.user.email == friendemail self.errors.add_to_base(_("You can't invite youself")) end end def perform requestor.add_friend(target, group_for_person) target.add_friend(requestor, group_for_friend) end # Returns false. Adding friends by itself does not trigger e-mail # sending. def sends_email? false end def description _('%s wants to be your friend.') % [requestor.name] end def permission :manage_friends end end