diff options
-rw-r--r-- | app/controllers/admin_request_controller.rb | 6 | ||||
-rw-r--r-- | app/controllers/application_controller.rb | 11 | ||||
-rw-r--r-- | app/controllers/general_controller.rb | 6 | ||||
-rw-r--r-- | app/helpers/application_helper.rb | 19 | ||||
-rw-r--r-- | app/models/incoming_message.rb | 32 | ||||
-rw-r--r-- | app/models/info_request.rb | 16 | ||||
-rw-r--r-- | app/models/outgoing_mailer.rb | 4 | ||||
-rw-r--r-- | app/models/raw_email.rb | 4 | ||||
-rw-r--r-- | app/views/comment/_single_comment.rhtml | 2 | ||||
-rw-r--r-- | app/views/help/api.rhtml | 2 | ||||
-rw-r--r-- | app/views/layouts/default.rhtml | 4 | ||||
-rw-r--r-- | app/views/request/_correspondence.rhtml | 24 | ||||
-rw-r--r-- | app/views/request/select_authority.rhtml | 4 | ||||
-rw-r--r-- | app/views/user/_show_user_info.rhtml | 2 | ||||
-rw-r--r-- | config/environment.rb | 11 | ||||
-rw-r--r-- | config/routes.rb | 2 | ||||
-rw-r--r-- | doc/CHANGES.md | 3 | ||||
-rw-r--r-- | lib/world_foi_websites.rb | 6 | ||||
-rw-r--r-- | public/images/quote.png | bin | 470 -> 0 bytes | |||
-rw-r--r-- | public/stylesheets/main.css | 2 | ||||
-rw-r--r-- | spec/controllers/application_controller_spec.rb | 9 | ||||
-rw-r--r-- | spec/models/application_mailer_spec.rb | 6 |
22 files changed, 90 insertions, 85 deletions
diff --git a/app/controllers/admin_request_controller.rb b/app/controllers/admin_request_controller.rb index 3e574b10f..6b6a8525e 100644 --- a/app/controllers/admin_request_controller.rb +++ b/app/controllers/admin_request_controller.rb @@ -278,7 +278,7 @@ class AdminRequestController < AdminController if params[:incoming_message_id] incoming_message = IncomingMessage.find(params[:incoming_message_id]) - email = incoming_message.mail.from_addrs[0].address + email = incoming_message.from_address name = incoming_message.safe_mail_from || info_request.public_body.name else email = info_request.public_body.request_email @@ -313,12 +313,12 @@ class AdminRequestController < AdminController @raw_email = RawEmail.find(params[:id]) # For the holding pen, try to guess where it should be ... @holding_pen = false - if (@raw_email.incoming_message.info_request == InfoRequest.holding_pen_request && !@raw_email.incoming_message.mail.from_addrs.nil? && @raw_email.incoming_message.mail.from_addrs.size > 0) + if (@raw_email.incoming_message.info_request == InfoRequest.holding_pen_request && !@raw_email.incoming_message.empty_from_field?) @holding_pen = true # 1. Use domain of email to try and guess which public body it # is associated with, so we can display that. - email = @raw_email.incoming_message.mail.from_addrs[0].spec + email = @raw_email.incoming_message.from_email domain = PublicBody.extract_domain_from_email(email) if domain.nil? diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 3f3c169ae..f9649c868 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -117,17 +117,14 @@ class ApplicationController < ActionController::Base # Override default error handler, for production sites. def rescue_action_in_public(exception) - # Call `set_view_paths` from the theme, if it exists. + # Looks for before_filters called something like `set_view_paths_{themename}`. These + # are set by the themes. # Normally, this is called by the theme itself in a # :before_filter, but when there's an error, this doesn't # happen. By calling it here, we can ensure error pages are # still styled according to the theme. - begin - set_view_paths - rescue NameError => e - if !(e.message =~ /undefined local variable or method `set_view_paths'/) - raise - end + ActionController::Base.before_filters.select{|f| f.to_s =~ /set_view_paths/}.each do |f| + self.send(f) end # Make sure expiry time for session is set (before_filters are # otherwise missed by this override) diff --git a/app/controllers/general_controller.rb b/app/controllers/general_controller.rb index 0cde238cd..3ba636e29 100644 --- a/app/controllers/general_controller.rb +++ b/app/controllers/general_controller.rb @@ -226,12 +226,6 @@ class GeneralController < ApplicationController redirect_to request_url(info_request) end - # For debugging - def fai_test - sleep 10 - render :text => "awake\n" - end - def custom_css long_cache @locale = self.locale_from_params() diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index ab953cb25..5c856383b 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -77,25 +77,6 @@ module ApplicationHelper return LanguageNames::get_language_name(locale) end - # Use our own algorithm for finding path of cache - def foi_cache(name = {}, options = nil, &block) - if @controller.perform_caching - key = name.merge(:only_path => true) - key_path = @controller.foi_fragment_cache_path(key) - - if @controller.foi_fragment_cache_exists?(key_path) - cached = @controller.foi_fragment_cache_read(key_path) - output_buffer.concat(cached) - return - end - - pos = output_buffer.length - content = block.call - @controller.foi_fragment_cache_write(key_path, output_buffer[pos..-1]) - else - block.call - end - end # (unfortunately) ugly way of getting id of generated form element # ids # see http://chrisblunt.com/2009/10/12/rails-getting-the-id-of-form-fields-inside-a-fields_for-block/ diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb index 60828e179..5205d0a2d 100644 --- a/app/models/incoming_message.rb +++ b/app/models/incoming_message.rb @@ -85,6 +85,28 @@ class IncomingMessage < ActiveRecord::Base @mail end + def from_address + self.mail.from_addrs[0].address + end + + def empty_from_field? + self.mail.from_addrs.nil? || self.mail.from_addrs.size == 0 + end + + def from_email + self.mail.from_addrs[0].spec + end + + def addresses + ((self.mail.to || []) + + (self.mail.cc || []) + + (self.mail.envelope_to || [])).uniq + end + + def message_id + self.mail.message_id + end + # Returns the name of the person the incoming message is from, or nil if # there isn't one or if there is only an email address. XXX can probably # remove from_name_if_present (which is a monkey patch) by just calling @@ -93,10 +115,10 @@ class IncomingMessage < ActiveRecord::Base # Return false if for some reason this is a message that we shouldn't let them reply to def _calculate_valid_to_reply_to # check validity of email - if self.mail.from_addrs.nil? || self.mail.from_addrs.size == 0 + if empty_from_field? return false end - email = self.mail.from_addrs[0].spec + email = self.from_email if !MySociety::Validate.is_valid_email(email) return false end @@ -136,7 +158,7 @@ class IncomingMessage < ActiveRecord::Base # instead? self.mail_from = self.mail.from_name_if_present begin - self.mail_from_domain = PublicBody.extract_domain_from_email(self.mail.from_addrs[0].spec) + self.mail_from_domain = PublicBody.extract_domain_from_email(self.from_email) rescue NoMethodError self.mail_from_domain = "" end @@ -1062,10 +1084,10 @@ class IncomingMessage < ActiveRecord::Base # Return false if for some reason this is a message that we shouldn't let them reply to def valid_to_reply_to? # check validity of email - if self.mail.from_addrs.nil? || self.mail.from_addrs.size == 0 + if empty_from_field? return false end - email = self.mail.from_addrs[0].spec + email = self.from_email if !MySociety::Validate.is_valid_email(email) return false end diff --git a/app/models/info_request.rb b/app/models/info_request.rb index 89893a396..e9335228a 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.rb @@ -355,12 +355,7 @@ public def InfoRequest.guess_by_incoming_email(incoming_message) guesses = [] # 1. Try to guess based on the email address(es) - addresses = - (incoming_message.mail.to || []) + - (incoming_message.mail.cc || []) + - (incoming_message.mail.envelope_to || []) - addresses.uniq! - for address in addresses + incoming_message.addresses.each do |address| id, hash = InfoRequest._extract_id_hash_from_email(address) guesses.push(InfoRequest.find_by_id(id)) guesses.push(InfoRequest.find_by_idhash(hash)) @@ -419,8 +414,7 @@ public end for im in self.incoming_messages - other_message_id = im.mail.message_id - if message_id == other_message_id + if message_id == im.message_id return true end end @@ -1130,7 +1124,11 @@ public } if deep - ret[:user] = self.user.json_for_api + if self.user + ret[:user] = self.user.json_for_api + else + ret[:user_name] = self.user_name + end ret[:public_body] = self.public_body.json_for_api ret[:info_request_events] = self.info_request_events.map { |e| e.json_for_api(false) } end diff --git a/app/models/outgoing_mailer.rb b/app/models/outgoing_mailer.rb index a307bb778..277794c69 100644 --- a/app/models/outgoing_mailer.rb +++ b/app/models/outgoing_mailer.rb @@ -47,7 +47,7 @@ class OutgoingMailer < ApplicationMailer return info_request.recipient_name_and_email else # calling safe_mail_from from so censor rules are run - return TMail::Address.address_from_name_and_email(incoming_message_followup.safe_mail_from, incoming_message_followup.mail.from_addrs[0].spec).to_s + return TMail::Address.address_from_name_and_email(incoming_message_followup.safe_mail_from, incoming_message_followup.from_email).to_s end end # Used in the preview of followup @@ -64,7 +64,7 @@ class OutgoingMailer < ApplicationMailer if incoming_message_followup.nil? || !incoming_message_followup.valid_to_reply_to? return info_request.recipient_email else - return incoming_message_followup.mail.from_addrs[0].spec + return incoming_message_followup.from_email end end # Subject to use for followup diff --git a/app/models/raw_email.rb b/app/models/raw_email.rb index bae144931..de7978b82 100644 --- a/app/models/raw_email.rb +++ b/app/models/raw_email.rb @@ -22,7 +22,7 @@ class RawEmail < ActiveRecord::Base if request_id.empty? raise "Failed to find the id number of the associated request: has it been saved?" end - + if ENV["RAILS_ENV"] == "test" return File.join(Rails.root, 'files/raw_email_test') else @@ -49,7 +49,7 @@ class RawEmail < ActiveRecord::Base end def data - File.open(self.filepath, "rb").read + File.open(self.filepath, "r").read end def destroy_file_representation! diff --git a/app/views/comment/_single_comment.rhtml b/app/views/comment/_single_comment.rhtml index 013e5e107..b645721cf 100644 --- a/app/views/comment/_single_comment.rhtml +++ b/app/views/comment/_single_comment.rhtml @@ -11,7 +11,7 @@ </h2> <div class="comment_in_request_text"> <p> - <img class="comment_quote" src="/images/quote.png" alt=""> + <img class="comment_quote" src="/images/quote-marks.png" alt=""> <%= comment.get_body_for_html_display %> </p> </div> diff --git a/app/views/help/api.rhtml b/app/views/help/api.rhtml index 76d2992fb..facddce41 100644 --- a/app/views/help/api.rhtml +++ b/app/views/help/api.rhtml @@ -51,11 +51,11 @@ <dd> <p>Quite a few pages have JSON versions, which let you download information about objects in a structured form. Find them by: + </p> <ul> <li>Adding <tt>.json</tt> to the end of the URL. </li> <li>Look for the <tt><link rel="alternate" type="application/json"></tt> tag in the head of the HTML. </li> </ul> - </p> <p>Requests, users and authorities all have JSON versions containing basic information about them. Every Atom feed has a JSON equivalent, containing diff --git a/app/views/layouts/default.rhtml b/app/views/layouts/default.rhtml index 76bdbd2dd..29ff209b9 100644 --- a/app/views/layouts/default.rhtml +++ b/app/views/layouts/default.rhtml @@ -140,11 +140,11 @@ </div> <% unless Configuration::ga_code.empty? || (@user && @user.super?) %> - <script> + <script type="text/javascript"> var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www."); document.write(unescape("%3Cscript src='" + gaJsHost + "google-analytics.com/ga.js' type='text/javascript'%3E%3C/script%3E")); </script> - <script> + <script type="text/javascript"> var pageTracker = _gat._getTracker("<%= Configuration::ga_code %>"); pageTracker._trackPageview(); </script> diff --git a/app/views/request/_correspondence.rhtml b/app/views/request/_correspondence.rhtml index bcfc93657..99c6c7d26 100644 --- a/app/views/request/_correspondence.rhtml +++ b/app/views/request/_correspondence.rhtml @@ -1,5 +1,5 @@ <div class="ff-print-fix"></div> -<% +<% if !info_request_event.nil? && info_request_event.event_type == 'response' incoming_message = info_request_event.incoming_message end @@ -21,9 +21,9 @@ if not incoming_message.nil? <p class="event_actions"> <% if !@user.nil? && @user.admin_page_links? %> - <%= link_to "Admin", admin_url("request/show_raw_email/" + incoming_message.raw_email_id.to_s) %> | + <%= link_to "Admin", admin_url("request/show_raw_email/" + incoming_message.raw_email_id.to_s) %> | <% end %> - <%= link_to _("Link to this"), incoming_message_url(incoming_message), :class => "link_to_this" %> + <%= link_to _("Link to this"), incoming_message_url(incoming_message), :class => "link_to_this" %> </p> </div> <% @@ -39,28 +39,28 @@ elsif [ 'sent', 'followup_sent' ].include?(info_request_event.event_type) <%= render :partial => 'bubble', :locals => { :body => outgoing_message.get_body_for_html_display(), :attachments => nil } %> - <p class="event_actions"> + <p class="event_actions"> <% if outgoing_message.status == 'ready' && !@info_request.is_external? %> <strong>Warning:</strong> This message has <strong>not yet been sent</strong> for an unknown reason. - <% end %> + <% end %> <!-- Can use this to get name of who followup was too, if say you play with proper from display, but not sure needed <% if outgoing_message.message_type == 'followup' && !outgoing_message.incoming_message_followup.nil? && !outgoing_message.incoming_message_followup.safe_mail_from.nil? %> - Follow up sent to: <%=h outgoing_message.incoming_message_followup.safe_mail_from %> - <% end %> + Follow up sent to: <%=h outgoing_message.incoming_message_followup.safe_mail_from %> + <% end %> --> - <%= link_to _("Link to this"), outgoing_message_url(outgoing_message), :class => "link_to_this" %> + <%= link_to _("Link to this"), outgoing_message_url(outgoing_message), :class => "link_to_this" %> </p> </div> <% elsif [ 'resent', 'followup_resent' ].include?(info_request_event.event_type) %> - <div class="outgoing correspondence" id="outgoing-<%=outgoing_message.id.to_s%>"> + <div class="outgoing correspondence" id="outgoing-<%=info_request_event.outgoing_message.id.to_s%>"> <h2> <%= simple_date(info_request_event.created_at) %> </h2> - <p class="event_plain"> - Sent + <p class="event_plain"> + Sent <% if info_request_event.outgoing_message.message_type == 'initial_request' %> request <% elsif info_request_event.outgoing_message.message_type == 'followup' %> @@ -72,7 +72,7 @@ elsif [ 'sent', 'followup_sent' ].include?(info_request_event.event_type) to <%= public_body_link(@info_request.public_body) %> again<% if not info_request_event.same_email_as_previous_send? %>, using a new contact address<% end %>. </p> </div> -<% elsif info_request_event.event_type == 'comment' +<% elsif info_request_event.event_type == 'comment' comment = info_request_event.comment %> <%= render :partial => 'comment/single_comment', :locals => { :comment => comment } %> diff --git a/app/views/request/select_authority.rhtml b/app/views/request/select_authority.rhtml index 521136f8e..1166c3ff9 100644 --- a/app/views/request/select_authority.rhtml +++ b/app/views/request/select_authority.rhtml @@ -31,7 +31,7 @@ <div id="authority_selection"> <% form_tag({:controller => "request", :action => "select_authority"}, {:id => "search_form", :method => "get"}) do %> - <p> + <div> <p> <%= _('First, type in the <strong>name of the UK public authority</strong> you\'d like information from. <strong>By law, they have to respond</strong> @@ -40,7 +40,7 @@ <%= text_field_tag 'query', params[:query], { :size => 30 } %> <%= hidden_field_tag 'bodies', 1 %> <%= submit_tag _('Search') %> - </p> + </div> <% end %> <div id="typeahead_response"> <% if !@xapian_requests.nil? %> diff --git a/app/views/user/_show_user_info.rhtml b/app/views/user/_show_user_info.rhtml index 5dfecee1e..3c229e9ce 100644 --- a/app/views/user/_show_user_info.rhtml +++ b/app/views/user/_show_user_info.rhtml @@ -1,7 +1,7 @@ <% if !@display_user.get_about_me_for_html_display.empty? || @is_you %> <div class="user_about_me"> - <img class="comment_quote" src="/images/quote.png" alt=""> + <img class="comment_quote" src="/images/quote-marks.png" alt=""> <%= @display_user.get_about_me_for_html_display %> <% if @is_you %> (<%= link_to _("edit text about you"), set_profile_about_me_url() %>) diff --git a/config/environment.rb b/config/environment.rb index de20e73e4..492446a43 100644 --- a/config/environment.rb +++ b/config/environment.rb @@ -1,8 +1,14 @@ # Be sure to restart your web server when you modify this file. - -# the default encoding for IO is utf-8, and we use utf-8 internally if RUBY_VERSION.to_f >= 1.9 + # the default encoding for IO is utf-8, and we use utf-8 internally Encoding.default_external = Encoding.default_internal = Encoding::UTF_8 + # Suppress warning messages and require inflector to avoid iconv deprecation message + # "iconv will be deprecated in the future, use String#encode instead." when loading + # it as part of rails + original_verbose, $VERBOSE = $VERBOSE, nil + require 'active_support/inflector' + # Activate warning messages again. + $VERBOSE = original_verbose end # Uncomment below to force Rails into production mode when @@ -20,7 +26,6 @@ $:.push(File.join(File.dirname(__FILE__), '../commonlib/rblib')) # ... if these fail to include, you need the commonlib submodule from git # (type "git submodule update --init" in the whatdotheyknow directory) -# ruby-ole and ruby-msg. We use a custom ruby-msg to avoid a name conflict $:.unshift(File.join(File.dirname(__FILE__), '../vendor/plugins/globalize2/lib')) load "validate.rb" diff --git a/config/routes.rb b/config/routes.rb index 5fc0075a4..3512b4cd4 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -32,8 +32,6 @@ ActionController::Routing::Routes.draw do |map| general.advanced_search '/advancedsearch', :action => 'search_redirect', :advanced => true general.random_request '/random', :action => 'random_request' - - general.fai_test '/test', :action => 'fai_test' end map.with_options :controller => 'request' do |request| diff --git a/doc/CHANGES.md b/doc/CHANGES.md index 2fd26fcbe..b74e46248 100644 --- a/doc/CHANGES.md +++ b/doc/CHANGES.md @@ -19,9 +19,10 @@ * THEME_BRANCH (defaults to tagged version specific to your version of alaveteli or, failing that, to master) * MTA_LOG_PATH * MTA_LOG_TYPE (defaults to Exim) -* Copy config/newrelic.yml-example to config/newrelic.yml - by default monitoring is switched off, see https://github.com/newrelic/rpm for instructions on switching on local and remote performance analysis. +* IMPORTANT - Copy config/newrelic.yml-example to config/newrelic.yml - by default monitoring is switched off, see https://github.com/newrelic/rpm for instructions on switching on local and remote performance analysis. * Check out this version and run `rails-post-deploy` as usual. * Note that mailcatcher is now used in development - see http://mailcatcher.me/ for details + # Version 0.6.7 ## Highlighted features * The ability to calculate due dates using calendar, not working days (Matthew Landauer) diff --git a/lib/world_foi_websites.rb b/lib/world_foi_websites.rb index 2ff924713..c3f3655df 100644 --- a/lib/world_foi_websites.rb +++ b/lib/world_foi_websites.rb @@ -46,10 +46,10 @@ class WorldFOIWebsites :country_name => "Chile", :country_iso_code => "CL", :url => "http://accesointeligente.org"}, - {:country_name => "Australia", + {:name => "Right To Know", + :country_name => "Australia", :country_iso_code => "AU", - # The Australian site is not yet live. So, not including name & url yet. - }, + :url => "http://www.righttoknow.org.au"}, {:name => "Informace pro Vsechny", :country_name => "Česká republika", :country_iso_code => "CZ", diff --git a/public/images/quote.png b/public/images/quote.png Binary files differdeleted file mode 100644 index 752b7d4cf..000000000 --- a/public/images/quote.png +++ /dev/null diff --git a/public/stylesheets/main.css b/public/stylesheets/main.css index 93230cf4f..23c4b32ae 100644 --- a/public/stylesheets/main.css +++ b/public/stylesheets/main.css @@ -562,7 +562,7 @@ max-width:50em; text-align:left; background-color:#E7E7E7; border-bottom:1px solid #5f5f5f; -height:6%; +height:3em; padding:0.5em 1em; } diff --git a/spec/controllers/application_controller_spec.rb b/spec/controllers/application_controller_spec.rb index 08e68d85e..18341ae6f 100644 --- a/spec/controllers/application_controller_spec.rb +++ b/spec/controllers/application_controller_spec.rb @@ -39,7 +39,14 @@ describe ApplicationController, "when caching fragments" do it "should not fail with long filenames" do long_name = "blahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblahblah.txt" - path = self.controller.send(:foi_fragment_cache_path, long_name) + params = { :only_path => true, + :file_name => [long_name], + :controller => "request", + :action => "get_attachment_as_html", + :id => "132", + :incoming_message_id => "44", + :part => "2" } + path = self.controller.send(:foi_fragment_cache_path, params) self.controller.send(:foi_fragment_cache_write, path, "whassap") end diff --git a/spec/models/application_mailer_spec.rb b/spec/models/application_mailer_spec.rb index a90f79c01..acf5f43bc 100644 --- a/spec/models/application_mailer_spec.rb +++ b/spec/models/application_mailer_spec.rb @@ -80,7 +80,8 @@ describe ApplicationMailer do it 'should raise an error if the template is in neither core nor theme' do prepend_theme_views('theme_one') - lambda{ ApplicationMailer.create_neither() }.should raise_error('Missing template application_mailer/neither.erb in view path spec/fixtures/theme_views/theme_one:spec/fixtures/theme_views/core') + expected_error = 'Missing template application_mailer/neither.erb in view path' + lambda{ ApplicationMailer.create_neither() }.should raise_error(/#{expected_error}/) end it 'should render a multipart email using a theme template' do @@ -125,7 +126,8 @@ describe ApplicationMailer do it 'should raise an error if the template is in neither core nor theme' do append_theme_views('theme_one') - lambda{ ApplicationMailer.create_neither() }.should raise_error('Missing template application_mailer/neither.erb in view path spec/fixtures/theme_views/core:spec/fixtures/theme_views/theme_one') + expected_error = 'Missing template application_mailer/neither.erb in view path' + lambda{ ApplicationMailer.create_neither() }.should raise_error(/#{expected_error}/) end it 'should render a multipart email using a core template' do |