diff options
| author | Louise Crow <louise.crow@gmail.com> | 2013-06-04 15:03:02 +0100 | 
|---|---|---|
| committer | Louise Crow <louise.crow@gmail.com> | 2013-06-04 15:03:02 +0100 | 
| commit | a885764b65916020d9182073b38f6951a20d4b8c (patch) | |
| tree | 0988651c144b65a8e46b28b376b2e72a5947d934 /app/models/info_request.rb | |
| parent | eb1c465162420ad62c16dccb983cb28aa89a4639 (diff) | |
| parent | a919141992a40599f99b32bd4a8312a0009f3f7a (diff) | |
Merge branch 'release/0.11'0.11.0.3
Diffstat (limited to 'app/models/info_request.rb')
| -rw-r--r-- | app/models/info_request.rb | 79 | 
1 files changed, 63 insertions, 16 deletions
| diff --git a/app/models/info_request.rb b/app/models/info_request.rb index eaed25a61..cf1af0e87 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -26,8 +26,7 @@  require 'digest/sha1'  class InfoRequest < ActiveRecord::Base -    include ActionView::Helpers::UrlHelper -    include ActionController::UrlWriter +    include Rails.application.routes.url_helpers      strip_attributes! @@ -51,7 +50,7 @@ class InfoRequest < ActiveRecord::Base      has_tag_string -    named_scope :visible, :conditions => {:prominence => "normal"} +    scope :visible, :conditions => {:prominence => "normal"}      # user described state (also update in info_request_event, admin_request/edit.rhtml)      validate :must_be_valid_state @@ -81,6 +80,11 @@ class InfoRequest < ActiveRecord::Base          'blackhole' # just dump them      ] +    # only check on create, so existing models with mixed case are allowed +    validate :title_formatting, :on => :create + +    after_initialize :set_defaults +      def self.enumerate_states          states = [          'waiting_response', @@ -148,7 +152,7 @@ class InfoRequest < ActiveRecord::Base      @@custom_states_loaded = false      begin -        if ENV["RAILS_ENV"] != "test" +        if !Rails.env.test?              require 'customstates'              include InfoRequestCustomStates              @@custom_states_loaded = true @@ -456,7 +460,7 @@ public              if !allow                  if self.handle_rejected_responses == 'bounce' -                    RequestMailer.deliver_stopped_responses(self, email, raw_email_data) if !is_external? +                    RequestMailer.stopped_responses(self, email, raw_email_data).deliver if !is_external?                  elsif self.handle_rejected_responses == 'holding_pen'                      InfoRequest.holding_pen_request.receive(email, raw_email_data, false, reason)                  elsif self.handle_rejected_responses == 'blackhole' @@ -495,13 +499,13 @@ public              self.awaiting_description = true              params = { :incoming_message_id => incoming_message.id }              if !rejected_reason.empty? -                params[:rejected_reason] = rejected_reason +                params[:rejected_reason] = rejected_reason.to_str              end              self.log_event("response", params)              self.save!          end          self.info_request_events.each { |event| event.xapian_mark_needs_index } # for the "waiting_classification" index -        RequestMailer.deliver_new_response(self, incoming_message) if !is_external? +        RequestMailer.new_response(self, incoming_message).deliver if !is_external?      end @@ -554,6 +558,10 @@ public      # states which require administrator action (hence email administrators      # when they are entered, and offer state change dialog to them) +    def InfoRequest.requires_admin_states +        return ['requires_admin', 'error_message', 'attention_requested'] +    end +      def requires_admin?          ['requires_admin', 'error_message', 'attention_requested'].include?(described_state)      end @@ -575,7 +583,7 @@ public          if self.requires_admin?              # Check there is someone to send the message "from"              if !set_by.nil? || !self.user.nil? -                RequestMailer.deliver_requires_admin(self, set_by, message) +                RequestMailer.requires_admin(self, set_by, message).deliver              end          end @@ -590,7 +598,7 @@ public              RequestClassification.create!(:user_id => set_by.id,                                            :info_request_event_id => event.id) -            RequestMailer.deliver_old_unclassified_updated(self) if !is_external? +            RequestMailer.old_unclassified_updated(self).deliver if !is_external?          end      end @@ -705,7 +713,7 @@ public      # last_event_forming_initial_request. There may be more obscure      # things, e.g. fees, not properly covered.      def date_response_required_by -        Holiday.due_date_from(self.date_initial_request_last_sent_at, Configuration::reply_late_after_days, Configuration::working_or_calendar_days) +        Holiday.due_date_from(self.date_initial_request_last_sent_at, AlaveteliConfiguration::reply_late_after_days, AlaveteliConfiguration::working_or_calendar_days)      end      # This is a long stop - even with UK public interest test extensions, 40      # days is a very long time. @@ -713,10 +721,10 @@ public          last_sent = last_event_forming_initial_request          if self.public_body.is_school?              # schools have 60 working days maximum (even over a long holiday) -            Holiday.due_date_from(self.date_initial_request_last_sent_at, Configuration::special_reply_very_late_after_days, Configuration::working_or_calendar_days) +            Holiday.due_date_from(self.date_initial_request_last_sent_at, AlaveteliConfiguration::special_reply_very_late_after_days, AlaveteliConfiguration::working_or_calendar_days)          else              # public interest test ICO guidance gives 40 working maximum -            Holiday.due_date_from(self.date_initial_request_last_sent_at, Configuration::reply_very_late_after_days, Configuration::working_or_calendar_days) +            Holiday.due_date_from(self.date_initial_request_last_sent_at, AlaveteliConfiguration::reply_very_late_after_days, AlaveteliConfiguration::working_or_calendar_days)          end      end @@ -802,6 +810,16 @@ public          end      end +    # Returns last event +    def get_last_event +        events = self.info_request_events +        if events.size == 0 +            return nil +        else +            return events[-1] +        end +    end +      # Get previous email sent to      def get_previous_email_sent_to(info_request_event)          last_email = nil @@ -878,10 +896,10 @@ public      end      def InfoRequest.magic_email_for_id(prefix_part, id) -        magic_email = Configuration::incoming_email_prefix +        magic_email = AlaveteliConfiguration::incoming_email_prefix          magic_email += prefix_part + id.to_s          magic_email += "-" + InfoRequest.hash_from_id(id) -        magic_email += "@" + Configuration::incoming_email_domain +        magic_email += "@" + AlaveteliConfiguration::incoming_email_domain          return magic_email      end @@ -892,7 +910,7 @@ public      end      def InfoRequest.hash_from_id(id) -        return Digest::SHA1.hexdigest(id.to_s + Configuration::incoming_email_secret)[0,8] +        return Digest::SHA1.hexdigest(id.to_s + AlaveteliConfiguration::incoming_email_secret)[0,8]      end      # Called by find_by_incoming_email - and used to be called by separate @@ -1115,7 +1133,7 @@ public      before_save :purge_in_cache      def purge_in_cache -        if !Configuration::varnish_host.blank? && !self.id.nil? +        if !AlaveteliConfiguration::varnish_host.blank? && !self.id.nil?              # we only do this for existing info_requests (new ones have a nil id)              path = url_for(:controller => 'request', :action => 'show', :url_title => self.url_title, :only_path => true, :locale => :none)              req = PurgeRequest.find_by_url(path) @@ -1133,5 +1151,34 @@ public          yield(column.human_name, self.send(column.name), column.type.to_s, column.name)        end      end + +    private + +    def set_defaults +        begin +            if self.described_state.nil? +                self.described_state = 'waiting_response' +            end             +        rescue ActiveModel::MissingAttributeError +            # this should only happen on Model.exists?() call. It can be safely ignored. +            # See http://www.tatvartha.com/2011/03/activerecordmissingattributeerror-missing-attribute-a-bug-or-a-features/        +        end +        # FOI or EIR? +        if !self.public_body.nil? && self.public_body.eir_only? +            self.law_used = 'eir' +        end +    end + +    def title_formatting +        if !self.title.nil? && !MySociety::Validate.uses_mixed_capitals(self.title, 10) +            errors.add(:title, _('Please write the summary using a mixture of capital and lower case letters. This makes it easier for others to read.')) +        end +        if !self.title.nil? && title.size > 200 +            errors.add(:title, _('Please keep the summary short, like in the subject of an email. You can use a phrase, rather than a full sentence.')) +        end +        if !self.title.nil? && self.title =~ /^(FOI|Freedom of Information)\s*requests?$/i +            errors.add(:title, _('Please describe more what the request is about in the subject. There is no need to say it is an FOI request, we add that on anyway.')) +        end +    end  end | 
