aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/admin_request_controller.rb12
-rw-r--r--app/models/incoming_message.rb20
-rw-r--r--app/models/info_request.rb9
-rw-r--r--app/models/raw_email.rb13
4 files changed, 35 insertions, 19 deletions
diff --git a/app/controllers/admin_request_controller.rb b/app/controllers/admin_request_controller.rb
index dae07aa8a..16e1cc621 100644
--- a/app/controllers/admin_request_controller.rb
+++ b/app/controllers/admin_request_controller.rb
@@ -4,7 +4,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: admin_request_controller.rb,v 1.18 2008-09-13 18:01:27 francis Exp $
+# $Id: admin_request_controller.rb,v 1.19 2008-09-22 22:08:43 francis Exp $
class AdminRequestController < ApplicationController
layout "admin"
@@ -127,12 +127,12 @@ class AdminRequestController < ApplicationController
@incoming_message = IncomingMessage.find(params[:incoming_message_id])
@info_request = @incoming_message.info_request
- raw_data = @incoming_message
+ deleted_incoming_message = @incoming_message
incoming_message_id = @incoming_message.id
@incoming_message.fully_destroy
@incoming_message.info_request.log_event("destroy_incoming",
- { :editor => admin_http_auth_user(), :raw_data => raw_data })
+ { :editor => admin_http_auth_user(), :deleted_incoming_message => deleted_incoming_message })
flash[:notice] = 'Incoming message successfully destroyed.'
redirect_to request_admin_url(@info_request)
@@ -152,10 +152,10 @@ class AdminRequestController < ApplicationController
redirect_to request_admin_url(incoming_message.info_request)
end
- raw_email = incoming_message.raw_data
- mail = TMail::Mail.parse(raw_email)
+ raw_email_data = incoming_message.raw_email.data
+ mail = TMail::Mail.parse(raw_email_data)
mail.base64_decode
- destination_request.receive(mail, raw_email)
+ destination_request.receive(mail, raw_email_data)
incoming_message.fully_destroy
diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb
index 0a4453a85..54e7b4f7f 100644
--- a/app/models/incoming_message.rb
+++ b/app/models/incoming_message.rb
@@ -19,7 +19,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: incoming_message.rb,v 1.147 2008-09-22 14:22:30 francis Exp $
+# $Id: incoming_message.rb,v 1.148 2008-09-22 22:08:44 francis Exp $
# TODO
# Move some of the (e.g. quoting) functions here into rblib, as they feel
@@ -167,26 +167,23 @@ class IncomingMessage < ActiveRecord::Base
belongs_to :info_request
validates_presence_of :info_request
- validates_presence_of :raw_data
+ validates_presence_of :raw_email
has_many :outgoing_message_followups, :foreign_key => 'incoming_message_followup_id', :class_name => 'OutgoingMessage'
has_many :info_request_events # never really has many, but could in theory
- # Some emails are large (10Mb), making things like search results and the
- # front page list of requests slow to display as the data is transferred from
- # the database.
- attr_lazy :raw_data
-
+ belongs_to :raw_email
+
# Return the structured TMail::Mail object
# Documentation at http://i.loveruby.net/en/projects/tmail/doc/
def mail
- if @mail.nil? && !self.raw_data.nil?
+ if @mail.nil? && !self.raw_email.nil?
# Hack round bug in TMail's MIME decoding. Example request which provokes it:
# http://www.whatdotheyknow.com/request/reviews_of_unduly_lenient_senten#incoming-4830
# Report of TMail bug:
# http://rubyforge.org/tracker/index.php?func=detail&aid=21810&group_id=4512&atid=17370
- copy_of_raw_data = self.raw_data.gsub(/; boundary=\s+"/ims,'; boundary="')
+ copy_of_raw_data = self.raw_email.data.gsub(/; boundary=\s+"/ims,'; boundary="')
@mail = TMail::Mail.parse(copy_of_raw_data)
@mail.base64_decode
@@ -484,7 +481,7 @@ class IncomingMessage < ActiveRecord::Base
# Returns body text from main text part of email, converted to UTF-8, with uudecode removed
def get_main_body_text
- # Cached as loading raw_data can be quite huge, and need this for just
+ # Cached as loading raw_email can be quite huge, and need this for just
# search results
if self.cached_main_body_text.nil?
text = self.get_main_body_text_internal
@@ -848,6 +845,9 @@ class IncomingMessage < ActiveRecord::Base
info_request_event.track_things_sent_emails.each { |a| a.destroy }
info_request_event.user_info_request_sent_alerts.each { |a| a.destroy }
info_request_event.destroy
+ if !self.raw_email.nil?
+ self.raw_email.destroy
+ end
self.destroy
end
end
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index 67faa312a..4e1c24980 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -23,7 +23,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.140 2008-09-22 14:22:30 francis Exp $
+# $Id: info_request.rb,v 1.141 2008-09-22 22:08:44 francis Exp $
require 'digest/sha1'
require File.join(File.dirname(__FILE__),'../../vendor/plugins/acts_as_xapian/lib/acts_as_xapian')
@@ -237,7 +237,7 @@ public
end
# A new incoming email to this request
- def receive(email, raw_email, override_stop_new_responses = false)
+ def receive(email, raw_email_data, override_stop_new_responses = false)
# See if new responses are prevented for spam reasons
if self.stop_new_responses && !override_stop_new_responses
RequestMailer.deliver_stopped_responses(self, email)
@@ -248,8 +248,11 @@ public
incoming_message = IncomingMessage.new
ActiveRecord::Base.transaction do
- incoming_message.raw_data = raw_email
+ raw_email = RawEmail.new
+ raw_email.data = raw_email_data
+ incoming_message.raw_email = raw_email
incoming_message.info_request = self
+ raw_email.save!
incoming_message.save!
self.awaiting_description = true
diff --git a/app/models/raw_email.rb b/app/models/raw_email.rb
new file mode 100644
index 000000000..992e6c143
--- /dev/null
+++ b/app/models/raw_email.rb
@@ -0,0 +1,13 @@
+# models/raw_email.rb:
+# The fat part of models/incoming_message.rb
+#
+# Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved.
+# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
+#
+# $Id: raw_email.rb,v 1.1 2008-09-22 22:08:44 francis Exp $
+
+class RawEmail < ActiveRecord::Base
+ has_one :incoming_message
+end
+
+