diff options
-rw-r--r-- | app/controllers/general_controller.rb | 6 | ||||
-rw-r--r-- | app/models/incoming_message.rb | 9 | ||||
-rw-r--r-- | app/models/info_request.rb | 5 | ||||
-rw-r--r-- | app/views/general/search.rhtml | 8 | ||||
-rw-r--r-- | app/views/request/_correspondence.rhtml | 51 | ||||
-rw-r--r-- | app/views/request/_request_listing_via_incoming.rhtml | 18 | ||||
-rw-r--r-- | app/views/request/_request_listing_via_outgoing.rhtml | 24 | ||||
-rw-r--r-- | todo.txt | 3 |
8 files changed, 85 insertions, 39 deletions
diff --git a/app/controllers/general_controller.rb b/app/controllers/general_controller.rb index b4f7c6eac..1f8c46648 100644 --- a/app/controllers/general_controller.rb +++ b/app/controllers/general_controller.rb @@ -5,7 +5,7 @@ # Copyright (c) 2008 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: general_controller.rb,v 1.1 2008-03-06 01:23:38 francis Exp $ +# $Id: general_controller.rb,v 1.2 2008-03-06 20:10:29 francis Exp $ class GeneralController < ApplicationController @@ -45,8 +45,10 @@ class GeneralController < ApplicationController # Actual search def search + @per_page = 20 query = params[:query] - @solr_object = InfoRequest.multi_solr_search(query, :models => [ OutgoingMessage, IncomingMessage ]) + @solr_object = InfoRequest.multi_solr_search(query, :models => [ OutgoingMessage, IncomingMessage ], + :limit => @per_page, :offset => ((params[:page]||"1").to_i-1) * @per_page) @search_results = @solr_object.results end diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb index 02256805e..20f7ac7e4 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.49 2008-03-06 01:23:38 francis Exp $ +# $Id: incoming_message.rb,v 1.50 2008-03-06 20:10:29 francis Exp $ # TODO @@ -50,7 +50,7 @@ class IncomingMessage < ActiveRecord::Base has_many :outgoing_message_followups, :class_name => OutgoingMessage - acts_as_solr :fields => [ :get_main_body_text ], :if => "$do_solr_index" + acts_as_solr :fields => [ :get_text_for_indexing ], :if => "$do_solr_index" # Return the structured TMail::Mail object # Documentation at http://i.loveruby.net/en/projects/tmail/doc/ @@ -273,6 +273,11 @@ class IncomingMessage < ActiveRecord::Base text = IncomingMessage.remove_quoted_sections(text, "") end + # Returns text for indexing + def get_text_for_indexing + return get_body_for_quoting() + 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. def safe_mail_from diff --git a/app/models/info_request.rb b/app/models/info_request.rb index 89f5c8259..9bff40a60 100644 --- a/app/models/info_request.rb +++ b/app/models/info_request.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: info_request.rb,v 1.56 2008-03-06 19:05:42 francis Exp $ +# $Id: info_request.rb,v 1.57 2008-03-06 20:10:29 francis Exp $ require 'digest/sha1' @@ -362,7 +362,8 @@ public if outgoing_messages.empty? # mainly for use with incomplete fixtures return "" end - excerpt = outgoing_messages[0].body + messages = self.outgoing_messages.find(:all, :order => "created_at") + excerpt = messages[0].body excerpt.sub!(/Dear .+,/, "") return excerpt end diff --git a/app/views/general/search.rhtml b/app/views/general/search.rhtml index 5d848c66a..56d5e44b3 100644 --- a/app/views/general/search.rhtml +++ b/app/views/general/search.rhtml @@ -16,15 +16,13 @@ <% if search_result.class.to_s == 'InfoRequest' %> <%= render :partial => 'request/request_listing_single', :locals => { :info_request => search_result } %> <% elsif search_result.class.to_s == 'OutgoingMessage' %> - <%= render :partial => 'request/request_listing_single', :locals => { :info_request => search_result.info_request } %> + <%= render :partial => 'request/request_listing_via_outgoing', :locals => { :info_request => search_result.info_request, :outgoing_message => search_result } %> <% elsif search_result.class.to_s == 'IncomingMessage' %> - <%= render :partial => 'request/request_listing_single', :locals => { :info_request => search_result.info_request } %> + <%= render :partial => 'request/request_listing_via_incoming', :locals => { :info_request => search_result.info_request, :incoming_message => search_result } %> <% else %> <p><strong>Unknown search result type <%=search_result.class.to_s%></strong></p> <% end %> <% end %> <% end %> -<% -#= will_paginate(@info_requests) -%> +<%= will_paginate WillPaginate::Collection.new(params[:page]||1, @per_page, @solr_object.total_hits) %> diff --git a/app/views/request/_correspondence.rhtml b/app/views/request/_correspondence.rhtml index 88e17db88..3bb823fa1 100644 --- a/app/views/request/_correspondence.rhtml +++ b/app/views/request/_correspondence.rhtml @@ -1,14 +1,12 @@ -<div class="correspondence"> - <% - - @last_email = nil - if !info_request_event.nil? && info_request_event.event_type == 'response' - incoming_message = IncomingMessage.find(info_request_event.params[:incoming_message_id]) - end - - if not incoming_message.nil? - %> +@last_email = nil +if !info_request_event.nil? && info_request_event.event_type == 'response' + incoming_message = IncomingMessage.find(info_request_event.params[:incoming_message_id]) +end + +if not incoming_message.nil? +%> + <div class="correspondence" id="incoming-<%=incoming_message.id.to_s%>"> <% if @previous_date.nil? or (@previous_date != incoming_message.sent_at.to_date) %> <h2><%= simple_date(incoming_message.sent_at) %></h2> <% end @@ -29,10 +27,12 @@ (<%= link_to "link to this", show_response_url(:id => incoming_message.info_request.id, :incoming_message_id => incoming_message.id) %>, <%= link_to "reply", show_response_url(:id => incoming_message.info_request.id, :incoming_message_id => incoming_message.id) + "#show_response_followup" %>) </p> - <% - elsif info_request_event.event_type == 'sent' || info_request_event.event_type == 'followup_sent' - outgoing_message = OutgoingMessage.find(info_request_event.params[:outgoing_message_id]) - %> + </div> +<% +elsif info_request_event.event_type == 'sent' || info_request_event.event_type == 'followup_sent' + outgoing_message = OutgoingMessage.find(info_request_event.params[:outgoing_message_id]) + %> + <div class="correspondence" id="outgoing-<%=outgoing_message.id.to_s%>"> <% if @previous_date.nil? or (@previous_date != info_request_event.created_at.to_date) %> <h2><%= simple_date(info_request_event.created_at) %></h2> <% end @@ -64,20 +64,21 @@ <% else raise "unknown outgoing_message.message_type" %> <% end %> (<%= link_to "send follow up", show_response_no_followup_url(:id => outgoing_message.info_request.id, :incoming_message_id => nil) + "#show_response_followup" %>) - </p> - <% elsif info_request_event.event_type == 'resent' %> + </p> + </div> +<% elsif info_request_event.event_type == 'resent' %> + <div class="correspondence"> <p class="event_plain"> Sent to <%= public_body_link(@info_request.public_body) %> again (perhaps to a new contact address) <!-- XXX actually say if it is a new one or not --> </p> - <% - end - if !info_request_event.nil? - if ['sent', 'resent'].include?(info_request_event.event_type) - @last_email = info_request_event.params[:email] - end + </div> +<% +end + +if !info_request_event.nil? + if ['sent', 'resent'].include?(info_request_event.event_type) + @last_email = info_request_event.params[:email] end +end %> - -</div> - diff --git a/app/views/request/_request_listing_via_incoming.rhtml b/app/views/request/_request_listing_via_incoming.rhtml new file mode 100644 index 000000000..8fd57559a --- /dev/null +++ b/app/views/request/_request_listing_via_incoming.rhtml @@ -0,0 +1,18 @@ +<p class="request_listing"> + <%= link_to "Response to '" + h(info_request.title) + "'", request_url(info_request)+"#incoming-"+incoming_message.id.to_s %> + + <br> + <%=h excerpt(incoming_message.get_text_for_indexing, "", 300) %> + <br> + + <span class="request_listing_bottomline"> + <strong> + <%= info_request.display_status %> + </strong> + + Response from <%= public_body_link(info_request.public_body) %> + to <%= user_link(info_request.user) %> + on <%= simple_date(incoming_message.sent_at) %>. + </span> +</p> + diff --git a/app/views/request/_request_listing_via_outgoing.rhtml b/app/views/request/_request_listing_via_outgoing.rhtml new file mode 100644 index 000000000..7c079eeec --- /dev/null +++ b/app/views/request/_request_listing_via_outgoing.rhtml @@ -0,0 +1,24 @@ +<p class="request_listing"> + <% if outgoing_message.message_type == 'initial_request' %> + <%= link_to "Initial request for '" + h(info_request.title) + "'", request_url(info_request)+"#outgoing-"+outgoing_message.id.to_s %> + <% elsif outgoing_message.message_type == 'followup' %> + <%= link_to "Initial request for '" + h(info_request.title) + "'", request_url(info_request)+"#outgoing-"+outgoing_message.id.to_s %> + <% else %> + <% raise "unknown outgoing message type" %> + <% end %> + + <br> + <%=h excerpt(outgoing_message.body, "", 300) %> + <br> + + <span class="request_listing_bottomline"> + <strong> + <%= info_request.display_status %> + </strong> + + Requested from <%= public_body_link(info_request.public_body) %> + by <%= user_link(info_request.user) %> + on <%= simple_date(info_request.created_at) %>. + </span> +</p> + @@ -1,9 +1,6 @@ Search: -Go to correct id for incoming / outgoing messages -Show correct extract for incoming / outgoing messages Add indexing of PDFs and DOCs etc. -Pagination - http://www.quarkruby.com/2007/8/12/acts_as_solr-for-search-and-faceting Date ranges and types and stuff Highlighting - http://www.quarkruby.com/2007/9/14/advanced-acts_as_solr |