aboutsummaryrefslogtreecommitdiffstats
path: root/app/models
diff options
context:
space:
mode:
Diffstat (limited to 'app/models')
-rw-r--r--app/models/incoming_message.rb12
-rw-r--r--app/models/info_request.rb30
-rw-r--r--app/models/public_body.rb19
-rw-r--r--app/models/request_mailer.rb7
-rw-r--r--app/models/user.rb21
5 files changed, 82 insertions, 7 deletions
diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb
index e27613a48..390467bb5 100644
--- a/app/models/incoming_message.rb
+++ b/app/models/incoming_message.rb
@@ -18,7 +18,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.116 2008-06-25 19:53:55 francis Exp $
+# $Id: incoming_message.rb,v 1.117 2008-07-08 09:41:04 francis Exp $
# TODO
# Move some of the (e.g. quoting) functions here into rblib, as they feel
@@ -688,6 +688,16 @@ class IncomingMessage < ActiveRecord::Base
def recently_arrived
(Time.now - self.created_at) <= 3.days
end
+
+ def fully_destroy
+ ActiveRecord::Base.transaction do
+ info_request_event = InfoRequestEvent.find_by_incoming_message_id(self.id)
+ 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
+ self.destroy
+ end
+ end
end
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index 33fc87357..e174dff7b 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.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: info_request.rb,v 1.117 2008-06-11 15:00:35 francis Exp $
+# $Id: info_request.rb,v 1.118 2008-07-08 09:41:04 francis Exp $
require 'digest/sha1'
require File.join(File.dirname(__FILE__),'../../vendor/plugins/acts_as_xapian/lib/acts_as_xapian')
@@ -242,6 +242,34 @@ public
RequestMailer.deliver_new_response(self, incoming_message)
end
+ # The "holding pen" is a special request which stores incoming emails whose
+ # destination request is unknown.
+ def InfoRequest.holding_pen_request
+ ir = InfoRequest.find_by_url_title("holding_pen")
+ if ir.nil?
+ ir = InfoRequest.new(
+ :user => User.internal_admin_user,
+ :public_body => PublicBody.internal_admin_body,
+ :title => 'Holding pen',
+ :described_state => 'waiting_response',
+ :awaiting_description => false,
+ :prominence => 'backpage'
+ )
+ om = OutgoingMessage.new({
+ :status => 'ready',
+ :message_type => 'initial_request',
+ :body => 'This is the holding pen request. It shows responses that were sent to invalid addresses, and need moving to the correct request by an adminstrator.',
+ :last_sent_at => Time.now()
+ })
+ ir.outgoing_messages << om
+ om.info_request = ir
+ ir.save!
+ ir.log_event('sent', { :outgoing_message_id => om.id, :email => ir.public_body.request_email })
+ end
+
+ return ir
+ end
+
# Change status, including for last event for later historical purposes
def set_described_state(new_state)
ActiveRecord::Base.transaction do
diff --git a/app/models/public_body.rb b/app/models/public_body.rb
index 5e7a9dd27..6745ede64 100644
--- a/app/models/public_body.rb
+++ b/app/models/public_body.rb
@@ -21,7 +21,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: public_body.rb,v 1.79 2008-06-23 23:35:21 francis Exp $
+# $Id: public_body.rb,v 1.80 2008-07-08 09:41:04 francis Exp $
require 'csv'
require 'set'
@@ -193,6 +193,23 @@ class PublicBody < ActiveRecord::Base
end
end
+ # The "internal admin" is a special body for internal use.
+ def PublicBody.internal_admin_body
+ pb = PublicBody.find_by_url_name("internal_admin_authority")
+ if pb.nil?
+ pb = PublicBody.new(
+ :name => 'Internal admin authority',
+ :short_name => "",
+ :request_email => MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost'),
+ :last_edit_editor => "internal_admin",
+ :last_edit_comment => "Made by PublicBody.internal_admin_body"
+ )
+ pb.save!
+ end
+
+ return pb
+ end
+
class ImportCSVDryRun < StandardError
end
diff --git a/app/models/request_mailer.rb b/app/models/request_mailer.rb
index a61a444e8..9c206d6f7 100644
--- a/app/models/request_mailer.rb
+++ b/app/models/request_mailer.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: request_mailer.rb,v 1.37 2008-06-13 09:15:44 francis Exp $
+# $Id: request_mailer.rb,v 1.38 2008-07-08 09:41:04 francis Exp $
class RequestMailer < ApplicationMailer
@@ -154,9 +154,10 @@ class RequestMailer < ApplicationMailer
reply_info_requests.push(reply_info_request) if reply_info_request
end
- # Nothing found
+ # Nothing found, so save in holding pen
if reply_info_requests.size == 0
- RequestMailer.deliver_bounced_message(email)
+ InfoRequest.holding_pen_request.receive(email, raw_email)
+ #RequestMailer.deliver_bounced_message(email)
return
end
diff --git a/app/models/user.rb b/app/models/user.rb
index cb0b6b867..aa7014a54 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -21,7 +21,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: user.rb,v 1.56 2008-05-21 10:51:24 francis Exp $
+# $Id: user.rb,v 1.57 2008-07-08 09:41:04 francis Exp $
require 'digest/sha1'
@@ -133,6 +133,25 @@ class User < ActiveRecord::Base
return self.name + " <" + self.email + ">"
end
+ # The "internal admin" is a special user for internal use.
+ def User.internal_admin_user
+ contact_email = MySociety::Config.get("CONTACT_EMAIL", 'contact@localhost')
+ u = User.find_by_email(contact_email)
+ if u.nil?
+ password = PostRedirect.generate_random_token
+ u = User.new(
+ :name => 'Internal admin user',
+ :email => contact_email,
+ :password => password,
+ :password_confirmation => password
+ )
+ u.save!
+ end
+
+ return u
+ end
+
+
private
def self.encrypted_password(password, salt)