invitation.rb
3.62 KB
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
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
class Invitation < Task
acts_as_having_settings :field => :data
settings_items :message, :friend_name, :friend_email
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 => /<url>/, :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
email = friend ? friend.user.email : friend_email
if person && email && person.user.email == email
self.errors.add_to_base(_("You can't invite youself"))
end
end
# Returns <tt>false</tt>. Adding friends by itself does not trigger e-mail
# sending.
def sends_email?
false
end
def self.invite(person, contacts_to_invite, message, profile)
contacts_to_invite.each do |contact_to_invite|
next if contact_to_invite == _("Firstname Lastname <friend@email.com>")
contact_to_invite.strip!
if match = contact_to_invite.match(/(.*)<(.*)>/) and match[2].match(Noosfero::Constants::EMAIL_FORMAT)
friend_name = match[1].strip
friend_email = match[2]
elsif match = contact_to_invite.strip.match(Noosfero::Constants::EMAIL_FORMAT)
friend_name = ""
friend_email = match[0]
else
next
end
user = User.find_by_email(friend_email)
task_args = if user.nil?
{:person => person, :friend_name => friend_name, :friend_email => friend_email, :message => message}
elsif !user.person.is_a_friend?(person)
{:person => person, :target => user.person}
end
if !task_args.nil?
if profile.person?
InviteFriend.create(task_args)
elsif profile.community?
InviteMember.create(task_args.merge(:community_id => profile.id))
else
raise NotImplementedError, 'Don\'t know how to invite people to a %s' % profile.class.to_s
end
end
end
end
def self.get_contacts(source, login, password)
contacts = []
case source
when "gmail"
contacts = Contacts::Gmail.new(login, password).contacts
when "yahoo"
contacts = Contacts::Yahoo.new(login, password).contacts
when "hotmail"
contacts = Contacts::Hotmail.new(login, password).contacts
when "manual"
#do nothing
else
raise NotImplementedError, 'Unknown source to get contacts'
end
contacts.map { |contact| contact + ["#{contact[0]} <#{contact[1]}>"] }
end
def self.join_contacts(manual_import_addresses, webmail_import_addresses)
contacts = []
if manual_import_addresses
contacts += manual_import_addresses.is_a?(Array) ? manual_import_addresses : manual_import_addresses.split
end
if webmail_import_addresses
contacts += webmail_import_addresses.is_a?(Array) ? webmail_import_addresses : webmail_import_addresses.split
end
contacts
end
def expanded_message
msg = message
msg = msg.gsub /<user>/, person.name
msg = msg.gsub /<friend>/, friend_name.blank? ? friend_email : friend_name
msg = msg.gsub /<environment>/, person.environment.name
msg
end
def mail_template
raise 'You should implement mail_template in a subclass'
end
end