Commit f02d36c9ab13d0be854a317e7367a93435477c1c

Authored by Rodrigo Souto
1 parent 973928e0

rails3: fix contact

app/mailers/contact.rb 0 → 100644
@@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
  1 +class Contact
  2 +
  3 + include ActiveModel::Validations
  4 +
  5 + def initialize(attributes = nil)
  6 + if attributes
  7 + attributes.each do |attr,value|
  8 + self.send("#{attr}=", value)
  9 + end
  10 + end
  11 + end
  12 +
  13 + attr_accessor :name
  14 + attr_accessor :subject
  15 + attr_accessor :message
  16 + attr_accessor :email
  17 + attr_accessor :state
  18 + attr_accessor :city
  19 + attr_accessor :receive_a_copy
  20 + attr_accessor :dest
  21 + attr_accessor :sender
  22 +
  23 + N_('Subject'); N_('Message'); N_('City and state'); N_('e-Mail'); N_('Name')
  24 +
  25 + validates_presence_of :subject, :email, :message, :name
  26 + validates_format_of :email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda {|o| !o.email.blank?})
  27 +
  28 + def deliver
  29 + return false unless self.valid?
  30 + Contact::Sender.notification(self).deliver
  31 + end
  32 +
  33 + class Sender < ActionMailer::Base
  34 + def notification(contact)
  35 + @name = contact.name
  36 + @email = contact.email
  37 + @city = contact.city
  38 + @state = contact.state
  39 + @message = contact.message
  40 + @environment = contact.dest.environment.name
  41 + @url = url_for(:host => contact.dest.environment.default_hostname, :controller => 'home')
  42 + @target = contact.dest.name
  43 +
  44 + options = {
  45 + content_type: 'text/html',
  46 + to: contact.dest.notification_emails,
  47 + reply_to: contact.email,
  48 + subject: "[#{contact.dest.short_name(30)}] " + contact.subject,
  49 + from: "#{contact.name} <#{contact.dest.environment.contact_email}>"
  50 + }
  51 +
  52 + if contact.sender
  53 + options.merge!(headers: {'X-Noosfero-Sender' => contact.sender.identifier})
  54 + end
  55 +
  56 + if contact.receive_a_copy
  57 + options.merge!(cc: "#{contact.name} <#{contact.email}>")
  58 + end
  59 +
  60 + mail(options)
  61 + end
  62 + end
  63 +
  64 +end
app/models/contact.rb
@@ -1,58 +0,0 @@ @@ -1,58 +0,0 @@
1 -class Contact  
2 -  
3 - include ActiveModel::Validations  
4 -  
5 - def initialize(attributes = nil)  
6 - if attributes  
7 - attributes.each do |attr,value|  
8 - self.send("#{attr}=", value)  
9 - end  
10 - end  
11 - end  
12 -  
13 - attr_accessor :name  
14 - attr_accessor :subject  
15 - attr_accessor :message  
16 - attr_accessor :email  
17 - attr_accessor :state  
18 - attr_accessor :city  
19 - attr_accessor :receive_a_copy  
20 - attr_accessor :dest  
21 - attr_accessor :sender  
22 -  
23 - N_('Subject'); N_('Message'); N_('City and state'); N_('e-Mail'); N_('Name')  
24 -  
25 - validates_presence_of :subject, :email, :message, :name  
26 - validates_format_of :email, :with => Noosfero::Constants::EMAIL_FORMAT, :if => (lambda {|o| !o.email.blank?})  
27 -  
28 - def deliver  
29 - return false unless self.valid?  
30 - Contact::Sender.deliver_mail(self)  
31 - end  
32 -  
33 - class Sender < ActionMailer::Base  
34 - def mail(contact)  
35 - content_type 'text/html'  
36 - emails = contact.dest.notification_emails  
37 - recipients emails  
38 - from "#{contact.name} <#{contact.dest.environment.contact_email}>"  
39 - reply_to contact.email  
40 - if contact.sender  
41 - headers 'X-Noosfero-Sender' => contact.sender.identifier  
42 - end  
43 - if contact.receive_a_copy  
44 - cc "#{contact.name} <#{contact.email}>"  
45 - end  
46 - subject "[#{contact.dest.short_name(30)}] " + contact.subject  
47 - body :name => contact.name,  
48 - :email => contact.email,  
49 - :city => contact.city,  
50 - :state => contact.state,  
51 - :message => contact.message,  
52 - :environment => contact.dest.environment.name,  
53 - :url => url_for(:host => contact.dest.environment.default_hostname, :controller => 'home'),  
54 - :target => contact.dest.name  
55 - end  
56 - end  
57 -  
58 -end  
app/views/contact/sender/mail.html.erb
@@ -1,27 +0,0 @@ @@ -1,27 +0,0 @@
1 -<!DOCTYPE html>  
2 -<html>  
3 - <head>  
4 - <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>  
5 - </head>  
6 - <body>  
7 - <p><%= _('This message was sent by %{sender} to %{target} on %{environment}.') %  
8 - {:sender => @name, :target => @target, :environment => @environment} %></p>  
9 - <%= _('Information about the user who sent this message:')%>  
10 - <ul>  
11 - <li><%= content_tag('b', _('Name')+': ') + @name.to_s %></li>  
12 - <li><%= content_tag('b', _('Email')+': ') + @email.to_s %></li>  
13 - <% if @city || @state %>  
14 - <li><%= content_tag('b', _('City and state')+': ') + (@city || '?')+'/'+(@state || '?') %></li>  
15 - <% end %>  
16 - </ul>  
17 - <hr/>  
18 - <%= content_tag('b', _('Message:')) %>  
19 - <p><%= word_wrap(@message) %></p>  
20 -  
21 - --<br/>  
22 - <%= _('Greetings,') %><br/>  
23 - <%= _('%s team.') % @environment %><br/>  
24 - <%= @url %>  
25 - </body>  
26 -</html>  
27 -  
app/views/contact/sender/notification.html.erb 0 → 100644
@@ -0,0 +1,27 @@ @@ -0,0 +1,27 @@
  1 +<!DOCTYPE html>
  2 +<html>
  3 + <head>
  4 + <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5 + </head>
  6 + <body>
  7 + <p><%= _('This message was sent by %{sender} to %{target} on %{environment}.') %
  8 + {:sender => @name, :target => @target, :environment => @environment} %></p>
  9 + <%= _('Information about the user who sent this message:')%>
  10 + <ul>
  11 + <li><%= content_tag('b', _('Name')+': ') + @name.to_s %></li>
  12 + <li><%= content_tag('b', _('Email')+': ') + @email.to_s %></li>
  13 + <% if @city || @state %>
  14 + <li><%= content_tag('b', _('City and state')+': ') + (@city || '?')+'/'+(@state || '?') %></li>
  15 + <% end %>
  16 + </ul>
  17 + <hr/>
  18 + <%= content_tag('b', _('Message:')) %>
  19 + <p><%= word_wrap(@message) %></p>
  20 +
  21 + --<br/>
  22 + <%= _('Greetings,') %><br/>
  23 + <%= _('%s team.') % @environment %><br/>
  24 + <%= @url %>
  25 + </body>
  26 +</html>
  27 +
test/unit/contact_test.rb
@@ -22,7 +22,7 @@ class ContactTest &lt; ActiveSupport::TestCase @@ -22,7 +22,7 @@ class ContactTest &lt; ActiveSupport::TestCase
22 should 'validates format of email only if not empty' do 22 should 'validates format of email only if not empty' do
23 contact = Contact.new 23 contact = Contact.new
24 contact.valid? 24 contact.valid?
25 - assert_match(/can't be blank/, contact.errors[:email]) 25 + assert_match(/can't be blank/, contact.errors[:email].first)
26 end 26 end
27 27
28 should 'inicialize fields on instanciate' do 28 should 'inicialize fields on instanciate' do
@@ -62,7 +62,7 @@ class ContactTest &lt; ActiveSupport::TestCase @@ -62,7 +62,7 @@ class ContactTest &lt; ActiveSupport::TestCase
62 ent = fast_create(Enterprise, :name => 'my enterprise', :identifier => 'myent') 62 ent = fast_create(Enterprise, :name => 'my enterprise', :identifier => 'myent')
63 c = Contact.new(:name => 'john', :email => 'john@invalid.com', :subject => 'hi', :message => 'hi, all', :dest => ent) 63 c = Contact.new(:name => 'john', :email => 'john@invalid.com', :subject => 'hi', :message => 'hi, all', :dest => ent)
64 email = c.deliver 64 email = c.deliver
65 - assert_equal c.email, email.reply_to.to_s 65 + assert_equal c.email, email.reply_to.first.to_s
66 end 66 end
67 67
68 end 68 end