aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/info_request.rb20
-rw-r--r--app/models/info_request_event.rb30
-rw-r--r--app/models/outgoing_message.rb7
-rw-r--r--app/models/post_redirect.rb4
-rw-r--r--app/models/request_mailer.rb8
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') }