aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/info_request.rb6
-rw-r--r--app/models/outgoing_mailer.rb90
-rw-r--r--app/models/outgoing_message.rb10
-rw-r--r--app/models/request_mailer.rb75
4 files changed, 100 insertions, 81 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index 6cc76da4f..71722b454 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -24,7 +24,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: info_request.rb,v 1.212 2009-10-03 10:32:32 francis Exp $
+# $Id: info_request.rb,v 1.213 2009-10-04 21:53:54 francis Exp $
require 'digest/sha1'
require File.join(File.dirname(__FILE__),'../../vendor/plugins/acts_as_xapian/lib/acts_as_xapian')
@@ -812,8 +812,8 @@ public
for incoming_message in self.incoming_messages.reverse
incoming_message.safe_mail_from
- email = RequestMailer.email_for_followup(self, incoming_message)
- name = RequestMailer.name_for_followup(self, incoming_message)
+ email = OutgoingMailer.email_for_followup(self, incoming_message)
+ name = OutgoingMailer.name_for_followup(self, incoming_message)
if !done.include?(email.downcase)
ret = ret + [[name, email, incoming_message.id]]
diff --git a/app/models/outgoing_mailer.rb b/app/models/outgoing_mailer.rb
new file mode 100644
index 000000000..ae7e86f4e
--- /dev/null
+++ b/app/models/outgoing_mailer.rb
@@ -0,0 +1,90 @@
+# models/outgoing_mailer.rb:
+# Emails which go to public bodies on behalf of users.
+#
+# Copyright (c) 2009 UK Citizens Online Democracy. All rights reserved.
+# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
+#
+# $Id: outgoing_mailer.rb,v 1.1 2009-10-04 21:53:54 francis Exp $
+
+# Note: The layout for this wraps messages by lines rather than (blank line
+# separated) paragraphs, as is the convention for all the other mailers. This
+# turned out to fit better with user exepectations when formatting messages.
+#
+# XXX The other mail templates are written to use blank line separated
+# paragraphs. They could be rewritten, and the wrapping method made uniform
+# throughout the application.
+
+class OutgoingMailer < ApplicationMailer
+
+ # Email to public body requesting info
+ def initial_request(info_request, outgoing_message)
+ @wrap_lines_as_paragraphs = true
+ @from = info_request.incoming_name_and_email
+ @recipients = info_request.recipient_name_and_email
+ @subject = info_request.email_subject_request
+ @body = {:info_request => info_request, :outgoing_message => outgoing_message,
+ :contact_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost') }
+ end
+
+ # Later message to public body regarding existing request
+ def followup(info_request, outgoing_message, incoming_message_followup)
+ @wrap_lines_as_paragraphs = true
+ @from = info_request.incoming_name_and_email
+ @recipients = OutgoingMailer.name_and_email_for_followup(info_request, incoming_message_followup)
+ @subject = OutgoingMailer.subject_for_followup(info_request, outgoing_message)
+ @body = {:info_request => info_request, :outgoing_message => outgoing_message,
+ :incoming_message_followup => incoming_message_followup,
+ :contact_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost') }
+ end
+
+ # Separate function, so can be called from controller for logging
+ # XXX the condition checking valid_to_reply_to? also appears in views/request/_followup.rhtml,
+ # it shouldn't really, should call something here.
+ # XXX also OutgoingMessage.get_salutation
+ # XXX these look like they should be members of IncomingMessage, but logically they
+ # need to work even when IncomingMessage is nil
+ def OutgoingMailer.name_and_email_for_followup(info_request, incoming_message_followup)
+ if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
+ return info_request.recipient_name_and_email
+ else
+ # calling safe_mail_from from so censor rules are run
+ return TMail::Address.address_from_name_and_email(incoming_message_followup.safe_mail_from, incoming_message_followup.mail.from_addrs[0].spec).to_s
+ end
+ end
+ # Used in the preview of followup
+ def OutgoingMailer.name_for_followup(info_request, incoming_message_followup)
+ if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
+ return info_request.public_body.name
+ else
+ # calling safe_mail_from from so censor rules are run
+ return incoming_message_followup.safe_mail_from || info_request.public_body.name
+ end
+ end
+ # Used when making list of followup places to remove duplicates
+ def OutgoingMailer.email_for_followup(info_request, incoming_message_followup)
+ if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
+ return info_request.recipient_email
+ else
+ return incoming_message_followup.mail.from_addrs[0].spec
+ end
+ end
+ # Subject to use for followup
+ def OutgoingMailer.subject_for_followup(info_request, outgoing_message)
+ if outgoing_message.what_doing == 'internal_review'
+ return "Internal review of " + info_request.email_subject_request
+ else
+ return info_request.email_subject_followup
+ end
+ end
+ # Whether we have a valid email address for a followup
+ def OutgoingMailer.is_followupable?(info_request, incoming_message_followup)
+ if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
+ return info_request.recipient_email_valid_for_followup?
+ else
+ # email has been checked in incoming_message_followup.valid_to_reply_to? above
+ return true
+ end
+ end
+
+end
+
diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb
index 7de70fc17..36190ce2f 100644
--- a/app/models/outgoing_message.rb
+++ b/app/models/outgoing_message.rb
@@ -22,7 +22,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: outgoing_message.rb,v 1.94 2009-10-04 21:42:07 francis Exp $
+# $Id: outgoing_message.rb,v 1.95 2009-10-04 21:53:54 francis Exp $
class OutgoingMessage < ActiveRecord::Base
strip_attributes!
@@ -43,7 +43,7 @@ class OutgoingMessage < ActiveRecord::Base
def get_salutation
ret = "Dear "
if self.message_type == 'followup' && !self.incoming_message_followup.nil? && !self.incoming_message_followup.safe_mail_from.nil? && self.incoming_message_followup.valid_to_reply_to?
- ret = ret + RequestMailer.name_for_followup(self.info_request, self.incoming_message_followup)
+ ret = ret + OutgoingMailer.name_for_followup(self.info_request, self.incoming_message_followup)
else
ret = ret + "Sir or Madam"
end
@@ -145,18 +145,18 @@ class OutgoingMessage < ActiveRecord::Base
def send_message(log_event_type = 'sent')
if self.status == 'ready'
if self.message_type == 'initial_request'
- RequestMailer.deliver_initial_request(self.info_request, self)
+ OutgoingMailer.deliver_initial_request(self.info_request, self)
self.last_sent_at = Time.now
self.status = 'sent'
self.save!
self.info_request.log_event(log_event_type, { :email => self.info_request.recipient_name_and_email, :outgoing_message_id => self.id })
self.info_request.set_described_state('waiting_response')
elsif self.message_type == 'followup'
- RequestMailer.deliver_followup(self.info_request, self, self.incoming_message_followup)
+ OutgoingMailer.deliver_followup(self.info_request, self, self.incoming_message_followup)
self.last_sent_at = Time.now
self.status = 'sent'
self.save!
- self.info_request.log_event('followup_' + log_event_type, { :email => RequestMailer.name_and_email_for_followup(self.info_request, self.incoming_message_followup), :outgoing_message_id => self.id })
+ self.info_request.log_event('followup_' + log_event_type, { :email => OutgoingMailer.name_and_email_for_followup(self.info_request, self.incoming_message_followup), :outgoing_message_id => self.id })
if self.info_request.described_state == 'waiting_clarification'
self.info_request.set_described_state('waiting_response')
end
diff --git a/app/models/request_mailer.rb b/app/models/request_mailer.rb
index d2e25f268..3aff5ea63 100644
--- a/app/models/request_mailer.rb
+++ b/app/models/request_mailer.rb
@@ -1,84 +1,13 @@
# models/request_mailer.rb:
-# Emails which go to public bodies on behalf of users.
+# Alerts relating to requests.
#
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: request_mailer.rb,v 1.88 2009-10-04 21:42:07 francis Exp $
+# $Id: request_mailer.rb,v 1.89 2009-10-04 21:53:54 francis Exp $
class RequestMailer < ApplicationMailer
- # Email to public body requesting info
- def initial_request(info_request, outgoing_message)
- @wrap_lines_as_paragraphs = true
- @from = info_request.incoming_name_and_email
- @recipients = info_request.recipient_name_and_email
- @subject = info_request.email_subject_request
- @body = {:info_request => info_request, :outgoing_message => outgoing_message,
- :contact_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost') }
- end
-
- # Later message to public body regarding existing request
- def followup(info_request, outgoing_message, incoming_message_followup)
- @wrap_lines_as_paragraphs = true
- @from = info_request.incoming_name_and_email
- @recipients = RequestMailer.name_and_email_for_followup(info_request, incoming_message_followup)
- @subject = RequestMailer.subject_for_followup(info_request, outgoing_message)
- @body = {:info_request => info_request, :outgoing_message => outgoing_message,
- :incoming_message_followup => incoming_message_followup,
- :contact_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost') }
- end
-
- # Separate function, so can be called from controller for logging
- # XXX the condition checking valid_to_reply_to? also appears in views/request/_followup.rhtml,
- # it shouldn't really, should call something here.
- # XXX also OutgoingMessage.get_salutation
- # XXX these look like they should be members of IncomingMessage, but logically they
- # need to work even when IncomingMessage is nil
- def RequestMailer.name_and_email_for_followup(info_request, incoming_message_followup)
- if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
- return info_request.recipient_name_and_email
- else
- # calling safe_mail_from from so censor rules are run
- return TMail::Address.address_from_name_and_email(incoming_message_followup.safe_mail_from, incoming_message_followup.mail.from_addrs[0].spec).to_s
- end
- end
- # Used in the preview of followup
- def RequestMailer.name_for_followup(info_request, incoming_message_followup)
- if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
- return info_request.public_body.name
- else
- # calling safe_mail_from from so censor rules are run
- return incoming_message_followup.safe_mail_from || info_request.public_body.name
- end
- end
- # Used when making list of followup places to remove duplicates
- def RequestMailer.email_for_followup(info_request, incoming_message_followup)
- if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
- return info_request.recipient_email
- else
- return incoming_message_followup.mail.from_addrs[0].spec
- end
- end
- # Subject to use for followup
- def RequestMailer.subject_for_followup(info_request, outgoing_message)
- if outgoing_message.what_doing == 'internal_review'
- return "Internal review of " + info_request.email_subject_request
- else
- return info_request.email_subject_followup
- end
- end
- # Whether we have a valid email address for a followup
- def RequestMailer.is_followupable?(info_request, incoming_message_followup)
- if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to?
- return info_request.recipient_email_valid_for_followup?
- else
- # email has been checked in incoming_message_followup.valid_to_reply_to? above
- return true
- end
- end
-
-
# Used when an FOI officer uploads a response from their web browser - this is
# the "fake" email used to store in the same format in the database as if they
# had emailed it.