diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/info_request.rb | 20 | ||||
-rw-r--r-- | app/models/info_request_event.rb | 30 | ||||
-rw-r--r-- | app/models/outgoing_message.rb | 7 | ||||
-rw-r--r-- | app/models/post_redirect.rb | 4 | ||||
-rw-r--r-- | app/models/request_mailer.rb | 8 |
5 files changed, 57 insertions, 12 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb index d1db6f1a4..17eea71e4 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -17,7 +17,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.17 2007-12-24 16:49:36 francis Exp $ +# $Id: info_request.rb,v 1.18 2008-01-02 15:45:00 francis Exp $ require 'digest/sha1' @@ -32,6 +32,7 @@ class InfoRequest < ActiveRecord::Base has_many :outgoing_messages has_many :incoming_messages + has_many :info_request_events # Email which public body should use to respond to request. This is in # the format PREFIXrequest-ID-HASH@DOMAIN. Here ID is the id of the @@ -123,6 +124,23 @@ class InfoRequest < ActiveRecord::Base end end + # Where the initial request is sent to + def recipient_email + if MySociety::Config.getbool("STAGING_SITE", 1) + return self.user.email + else + return self.public_body.request_email + end + end + + # History of some things that have happened + def log_event(type, params) + info_request_event = InfoRequestEvent.new + info_request_event.event_type = type + info_request_event.params = params + info_request_event.info_request = self + info_request_event.save! + end end diff --git a/app/models/info_request_event.rb b/app/models/info_request_event.rb new file mode 100644 index 000000000..1d9429035 --- /dev/null +++ b/app/models/info_request_event.rb @@ -0,0 +1,30 @@ +# models/info_request_event.rb: +# +# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. +# Email: francis@mysociety.org; WWW: http://www.mysociety.org/ +# +# $Id: info_request_event.rb,v 1.1 2008-01-02 15:45:00 francis Exp $ + +class InfoRequestEvent < ActiveRecord::Base + belongs_to :info_request + validates_presence_of :info_request + + validates_presence_of :event_type + validates_inclusion_of :event_type, :in => ['sent', 'resent'] + + # We store YAML version of parameters in the database + def params=(params) + self.params_yaml = params.to_yaml + end + def params + YAML.load(self.params_yaml) + end + + # Used for sorting with the incoming/outgoing messages + def sent_at + created_at + end + +end + + diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb index e24e8ae97..a717cff0e 100644 --- a/app/models/outgoing_message.rb +++ b/app/models/outgoing_message.rb @@ -20,7 +20,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.14 2007-12-23 13:44:18 francis Exp $ +# $Id: outgoing_message.rb,v 1.15 2008-01-02 15:45:00 francis Exp $ class OutgoingMessage < ActiveRecord::Base belongs_to :info_request @@ -51,13 +51,14 @@ class OutgoingMessage < ActiveRecord::Base # Deliver outgoing message # Note: You can test this from script/console with, say: # InfoRequest.find(1).outgoing_messages[0].send_message - def send_message + def send_message(log_event_type = 'sent') if self.message_type == 'initial_request' if self.status == 'ready' RequestMailer.deliver_initial_request(self.info_request, self) self.sent_at = Time.now self.status = 'sent' self.save! + self.info_request.log_event(log_event_type, { :email => self.info_request.recipient_email, :outgoing_message_id => self.id }) elsif self.status == 'sent' raise "Message id #{self.id} has already been sent" else @@ -72,7 +73,7 @@ class OutgoingMessage < ActiveRecord::Base def resend_message if self.message_type == 'initial_request' and self.status == 'sent' self.status = 'ready' - send_message + send_message('resent') else raise "Message id #{self.id} has type '#{self.message_type}' status '#{self.status}' " end diff --git a/app/models/post_redirect.rb b/app/models/post_redirect.rb index 06d6d108d..5c918e774 100644 --- a/app/models/post_redirect.rb +++ b/app/models/post_redirect.rb @@ -14,14 +14,14 @@ # user_id :integer # -# models/postredirect.rb: +# models/post_redirect.rb: # Saves an HTTP POST request, so it can be redirected to later. # For example, after registering / logging in. # # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: post_redirect.rb,v 1.6 2007-12-11 12:16:29 francis Exp $ +# $Id: post_redirect.rb,v 1.7 2008-01-02 15:45:00 francis Exp $ require 'openssl' # for random bytes function diff --git a/app/models/request_mailer.rb b/app/models/request_mailer.rb index 38c67befe..5c5e33065 100644 --- a/app/models/request_mailer.rb +++ b/app/models/request_mailer.rb @@ -4,17 +4,13 @@ # 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.12 2007-12-14 14:55:56 francis Exp $ +# $Id: request_mailer.rb,v 1.13 2008-01-02 15:45:00 francis Exp $ class RequestMailer < ActionMailer::Base def initial_request(info_request, outgoing_message) @from = info_request.incoming_email - if MySociety::Config.getbool("STAGING_SITE", 1) - @recipients = info_request.user.email - else - @recipients = info_request.public_body.request_email - end + @recipients = info_request.recipient_email @subject = 'Freedom of Information Request - ' + info_request.title @body = {:info_request => info_request, :outgoing_message => outgoing_message, :contact_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost') } |