aboutsummaryrefslogtreecommitdiffstats
path: root/app
diff options
context:
space:
mode:
Diffstat (limited to 'app')
-rw-r--r--app/controllers/general_controller.rb66
-rw-r--r--app/controllers/request_controller.rb40
-rw-r--r--app/models/incoming_message.rb4
-rw-r--r--app/models/info_request.rb28
-rw-r--r--app/models/outgoing_message.rb4
-rw-r--r--app/views/general/_public_body_query.rhtml (renamed from app/views/request/_public_body_query.rhtml)0
-rw-r--r--app/views/general/frontpage.rhtml (renamed from app/views/request/frontpage.rhtml)8
-rw-r--r--app/views/general/search.rhtml30
-rw-r--r--app/views/request/_request_listing.rhtml25
-rw-r--r--app/views/request/_request_listing_single.rhtml18
10 files changed, 162 insertions, 61 deletions
diff --git a/app/controllers/general_controller.rb b/app/controllers/general_controller.rb
new file mode 100644
index 000000000..b4f7c6eac
--- /dev/null
+++ b/app/controllers/general_controller.rb
@@ -0,0 +1,66 @@
+# app/controllers/general_controller.rb:
+# For pages like front page, general search, that aren't specific to a
+# particular model.
+#
+# 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 $
+
+class GeneralController < ApplicationController
+
+ # Fancy javascript smancy for auto complete search on front page
+ def auto_complete_for_public_body_query
+ @public_bodies = public_body_query(params[:public_body][:query])
+
+ render :partial => "public_body_query"
+ end
+
+ # Actual front page
+ def frontpage
+ # Public body search on the left
+ @public_bodies = []
+ @query_made = false
+ if params[:public_body] and params[:public_body][:query]
+ # Try and do exact match - redirect if it is made
+ @public_body = PublicBody.find_by_name(params[:public_body][:query])
+ if not @public_body.nil?
+ redirect_to new_request_to_body_url(:public_body_id => @public_body.id.to_s)
+ end
+ # Otherwise use search engine to find public body
+ @public_bodies = public_body_query(params[:public_body][:query])
+ @query_made = true
+ end
+
+ # Get all successful requests for display on the right
+ @info_requests = InfoRequest.find :all, :order => "created_at desc", :conditions => "prominence = 'normal' and described_state in ('successful', 'partially_successful')", :limit => 3
+ end
+
+
+ # Just does a redirect from ?query= search to /query
+ def search_redirect
+ query = params[:query]
+ redirect_to search_url(:query => query)
+ end
+
+ # Actual search
+ def search
+ query = params[:query]
+ @solr_object = InfoRequest.multi_solr_search(query, :models => [ OutgoingMessage, IncomingMessage ])
+ @search_results = @solr_object.results
+ end
+
+ private
+
+ # Used in front page search for public body
+ def public_body_query(query)
+ # @public_bodies = PublicBody.find_by_solr(query).results
+
+ criteria = '%' + query + '%'
+ @public_bodies = PublicBody.find(:all,
+ :conditions => ["name ilike ? or short_name ilike ?", criteria, criteria],
+ :order => 'name', :limit=>10)
+ return @public_bodies
+ end
+end
+
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb
index 76cf70ee1..977e4cd32 100644
--- a/app/controllers/request_controller.rb
+++ b/app/controllers/request_controller.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_controller.rb,v 1.64 2008-02-29 13:24:22 francis Exp $
+# $Id: request_controller.rb,v 1.65 2008-03-06 01:23:38 francis Exp $
class RequestController < ApplicationController
@@ -39,31 +39,6 @@ class RequestController < ApplicationController
def list
@info_requests = InfoRequest.paginate :order => "created_at desc", :page => params[:page], :per_page => 25, :conditions => "prominence = 'normal'"
end
-
- # Fancy javascript smancy for auto complete search
- def auto_complete_for_public_body_query
- @public_bodies = public_body_query(params[:public_body][:query])
-
- render :partial => "public_body_query"
- end
- def frontpage
- # Public body search on the left
- @public_bodies = []
- @query_made = false
- if params[:public_body] and params[:public_body][:query]
- # Try and do exact match - redirect if it is made
- @public_body = PublicBody.find_by_name(params[:public_body][:query])
- if not @public_body.nil?
- redirect_to new_request_to_body_url(:public_body_id => @public_body.id.to_s)
- end
- # Otherwise use search engine to find public body
- @public_bodies = public_body_query(params[:public_body][:query])
- @query_made = true
- end
-
- # Get all successful requests for display on the right
- @info_requests = InfoRequest.find :all, :order => "created_at desc", :conditions => "prominence = 'normal' and described_state in ('successful', 'partially_successful')", :limit => 3
- end
# Page new form posts to
def new
@@ -284,16 +259,5 @@ class RequestController < ApplicationController
render :text => @attachment.body
end
- private
-
- # Used in front page search for public body
- def public_body_query(query)
- # @public_bodies = PublicBody.find_by_solr(query).results
-
- criteria = '%' + query + '%'
- @public_bodies = PublicBody.find(:all,
- :conditions => ["name ilike ? or short_name ilike ?", criteria, criteria],
- :order => 'name', :limit=>10)
- return @public_bodies
- end
end
+
diff --git a/app/models/incoming_message.rb b/app/models/incoming_message.rb
index b3560e006..02256805e 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.48 2008-02-28 14:25:51 francis Exp $
+# $Id: incoming_message.rb,v 1.49 2008-03-06 01:23:38 francis Exp $
# TODO
@@ -50,6 +50,8 @@ class IncomingMessage < ActiveRecord::Base
has_many :outgoing_message_followups, :class_name => OutgoingMessage
+ acts_as_solr :fields => [ :get_main_body_text ], :if => "$do_solr_index"
+
# Return the structured TMail::Mail object
# Documentation at http://i.loveruby.net/en/projects/tmail/doc/
def mail
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index df2e32c8a..53f349535 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.53 2008-02-29 16:01:32 francis Exp $
+# $Id: info_request.rb,v 1.54 2008-03-06 01:23:38 francis Exp $
require 'digest/sha1'
@@ -63,6 +63,28 @@ class InfoRequest < ActiveRecord::Base
end
end
+ # Full text search indexing
+ acts_as_solr :fields => [ :title ], :if => "$do_solr_index"
+ $do_solr_index = false
+ def self.update_solr_index
+ $do_solr_index = true
+ InfoRequest.rebuild_solr_index(0) do |ar, options|
+ ar.find(:all, :conditions => ["not solr_up_to_date"])
+ end
+ OutgoingMessage.rebuild_solr_index(0) do |ar, options|
+ ar.find(:all, :conditions => ["not (select solr_up_to_date from info_requests where id = outgoing_messages.info_request_id)"])
+ end
+ IncomingMessage.rebuild_solr_index(0) do |ar, options|
+ ar.find(:all, :conditions => ["not (select solr_up_to_date from info_requests where id = incoming_messages.info_request_id)"])
+ end
+ InfoRequest.update_all("solr_up_to_date = 't'")
+ $do_solr_index = false
+ end
+ def before_update
+ self.solr_up_to_date = false
+ true
+ end
+
public
# When name is changed, also change the url name
def title=(title)
@@ -110,7 +132,9 @@ public
# Return info request corresponding to an incoming email address, or nil if
# none found. Checks the hash to ensure the email came from the public body -
- # only they are sent the email address with the has in it.
+ # only they are sent the email address with the has in it. (We don't check
+ # the prefix and domain, as sometimes those change, or might be elided by
+ # copying an email, and that doesn't matter)
def self.find_by_incoming_email(incoming_email)
incoming_email =~ /request-(\d+)-([a-z0-9]+)/
id = $1.to_i
diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb
index 03b3e5fef..bbbf1c7bb 100644
--- a/app/models/outgoing_message.rb
+++ b/app/models/outgoing_message.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: outgoing_message.rb,v 1.32 2008-02-27 14:01:30 francis Exp $
+# $Id: outgoing_message.rb,v 1.33 2008-03-06 01:23:38 francis Exp $
class OutgoingMessage < ActiveRecord::Base
belongs_to :info_request
@@ -32,6 +32,8 @@ class OutgoingMessage < ActiveRecord::Base
belongs_to :incoming_message_followup, :foreign_key => 'incoming_message_followup_id', :class_name => 'IncomingMessage'
+ acts_as_solr :fields => [ :body ], :if => "$do_solr_index"
+
# How the default letter starts and ends
def get_salutation
ret = "Dear "
diff --git a/app/views/request/_public_body_query.rhtml b/app/views/general/_public_body_query.rhtml
index 77efdfcc1..77efdfcc1 100644
--- a/app/views/request/_public_body_query.rhtml
+++ b/app/views/general/_public_body_query.rhtml
diff --git a/app/views/request/frontpage.rhtml b/app/views/general/frontpage.rhtml
index 508f5105c..e3fb54ca8 100644
--- a/app/views/request/frontpage.rhtml
+++ b/app/views/general/frontpage.rhtml
@@ -58,6 +58,12 @@
<div id="find_information">
<h1>Explore information that others requested</h1>
- <%= render :partial => 'request_listing', :locals => { :info_requests => @info_requests } %>
+ <% form_tag({:action => "search_redirect"}, {:id => "search_form"}) do %>
+ <p>
+ <%= text_field_tag 'query', params[:query], { :size => 20 } %>
+ <%= submit_tag "Search" %>
+ </p>
+ <% end %>
+ <%= render :partial => 'request/request_listing', :locals => { :info_requests => @info_requests } %>
<p><a href="/list">View all information</a></p>
</div>
diff --git a/app/views/general/search.rhtml b/app/views/general/search.rhtml
new file mode 100644
index 000000000..5d848c66a
--- /dev/null
+++ b/app/views/general/search.rhtml
@@ -0,0 +1,30 @@
+<% @title = "Freedom of Information requests matching '" + h(params[:query]) + "'" %>
+
+<% form_tag({:action => "search_redirect"}, {:id => "search_form"}) do %>
+ <p>
+ <%= text_field_tag 'query', params[:query], { :size => 40 } %>
+ <%= submit_tag "Search" %>
+ </p>
+<% end %>
+
+<h1><%=@title%></h1>
+
+<% if @search_results.empty? %>
+ None found.
+<% else %>
+ <% for search_result in @search_results %>
+ <% 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 } %>
+ <% elsif search_result.class.to_s == 'IncomingMessage' %>
+ <%= render :partial => 'request/request_listing_single', :locals => { :info_request => search_result.info_request } %>
+ <% else %>
+ <p><strong>Unknown search result type <%=search_result.class.to_s%></strong></p>
+ <% end %>
+ <% end %>
+<% end %>
+
+<%
+#= will_paginate(@info_requests)
+%>
diff --git a/app/views/request/_request_listing.rhtml b/app/views/request/_request_listing.rhtml
index 4c31f470a..ebfbc60a4 100644
--- a/app/views/request/_request_listing.rhtml
+++ b/app/views/request/_request_listing.rhtml
@@ -1,19 +1,8 @@
-<% for info_request in info_requests %>
- <p class="request_listing">
- <%= request_link(info_request) %>
-
- <br>
- <%=h excerpt(info_request.initial_request_text, "", 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>
+<% if info_requests.empty? %>
+ None found.
+<% else %>
+ <% for info_request in info_requests %>
+ <%= render :partial => 'request/request_listing_single', :locals => { :info_request => info_request } %>
+ <% end %>
<% end %>
+
diff --git a/app/views/request/_request_listing_single.rhtml b/app/views/request/_request_listing_single.rhtml
new file mode 100644
index 000000000..b91d9c640
--- /dev/null
+++ b/app/views/request/_request_listing_single.rhtml
@@ -0,0 +1,18 @@
+<p class="request_listing">
+ <%= request_link(info_request) %>
+
+ <br>
+ <%=h excerpt(info_request.initial_request_text, "", 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>
+