diff options
Diffstat (limited to 'app/models')
-rw-r--r-- | app/models/incoming_message.rb | 12 | ||||
-rw-r--r-- | app/models/info_request.rb | 30 | ||||
-rw-r--r-- | app/models/public_body.rb | 19 | ||||
-rw-r--r-- | app/models/request_mailer.rb | 7 | ||||
-rw-r--r-- | app/models/user.rb | 21 |
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) |