diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/request_controller.rb | 32 | ||||
-rw-r--r-- | app/models/public_body.rb | 4 | ||||
-rw-r--r-- | app/views/layouts/default.rhtml | 1 | ||||
-rw-r--r-- | app/views/request/_public_body_query.rhtml | 5 | ||||
-rw-r--r-- | app/views/request/frontpage.rhtml | 34 |
5 files changed, 68 insertions, 8 deletions
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb index 5e69c7873..4c1366da2 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.52 2008-02-19 12:28:59 francis Exp $ +# $Id: request_controller.rb,v 1.53 2008-02-21 15:18:46 francis Exp $ class RequestController < ApplicationController @@ -25,7 +25,34 @@ class RequestController < ApplicationController @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 = PublicBody.find_by_solr(params[:public_body][:query]).results + criteria = '%' + params[:public_body][:query] + '%' + @public_bodies = PublicBody.find(:all, + :conditions => ["name ilike ?", criteria], + :order => 'name', :limit=>10) + + render :partial => "public_body_query" + end def frontpage + # Public body search on the left + @public_bodies = [] + 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 = PublicBody.find_by_solr(params[:public_body][:query]).results + criteria = '%' + params[:public_body][:query] + '%' + @public_bodies = PublicBody.find(:all, + :conditions => ["name ilike ?", criteria], + :order => 'name', :limit=>10) + 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 @@ -34,6 +61,9 @@ class RequestController < ApplicationController # First time we get to the page, just display it if params[:submitted_new_request].nil? # Read parameters in - public body can be passed from front page + if params[:public_body_id] + params[:info_request] = { :public_body_id => params[:public_body_id] } + end @info_request = InfoRequest.new(params[:info_request]) @outgoing_message = OutgoingMessage.new(params[:outgoing_message]) render :action => 'new' diff --git a/app/models/public_body.rb b/app/models/public_body.rb index c26b98010..bcc31a04e 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.17 2008-02-14 15:31:22 francis Exp $ +# $Id: public_body.rb,v 1.18 2008-02-21 15:18:46 francis Exp $ class PublicBody < ActiveRecord::Base validates_presence_of :name @@ -30,6 +30,8 @@ class PublicBody < ActiveRecord::Base has_many :info_requests + acts_as_solr :fields => [:name, :short_name] + def validate unless MySociety::Validate.is_valid_email(self.request_email) errors.add(:request_email, "doesn't look like a valid email address") diff --git a/app/views/layouts/default.rhtml b/app/views/layouts/default.rhtml index fde60cfcf..fda9a553b 100644 --- a/app/views/layouts/default.rhtml +++ b/app/views/layouts/default.rhtml @@ -2,6 +2,7 @@ <html lang="en-gb"> <head> <!-- <script type="text/javascript" src="/js.js"></script> --> + <%= javascript_include_tag :defaults %> <title><%=@title%> <%= @title ? "-" : "" %> foi.mysociety.org</title> <%= stylesheet_link_tag 'main' %> </head> diff --git a/app/views/request/_public_body_query.rhtml b/app/views/request/_public_body_query.rhtml new file mode 100644 index 000000000..77efdfcc1 --- /dev/null +++ b/app/views/request/_public_body_query.rhtml @@ -0,0 +1,5 @@ +<ul> +<% for public_body in @public_bodies %> +<li><%=h public_body.name %></li> +<% end %> +</ul> diff --git a/app/views/request/frontpage.rhtml b/app/views/request/frontpage.rhtml index fd2c92ca3..42e4a6975 100644 --- a/app/views/request/frontpage.rhtml +++ b/app/views/request/frontpage.rhtml @@ -1,13 +1,35 @@ <div id="make_requests"> <h1>Make requests for information from the UK Government</h1> - <% form_for(:info_request, @info_request, :url => new_request_url, :html => { :id => 'public_body_form', :class => 'plaque' } ) do |f| %> - <p>Choose which public body you would like information from.</p> - <p> - <%= @public_bodies = PublicBody.find(:all, :order => "name") - f.collection_select(:public_body_id, @public_bodies, :id, :name) %> + <% form_tag({:action => :frontpage}, :id => 'public_body_form', :class => 'plaque' ) do %> + <p> + <label for="public_body_query">Find the public body you would like information from:</label> </p> - <p><%= submit_tag "Submit >>" %></p> + + <div> + <%= text_field_with_auto_complete 'public_body', 'query', {}, { :skip_style => true } %> + </div> + <div class="public_body_search_note"> + Type to search e.g. Transport, Health, Defence + </div> + + <p> + <%= submit_tag "Submit" %> + </p> + + <% if @public_bodies.size > 0 %> + <div id="public_body_search"> + <ul> + <strong>Public bodies found</strong> + <% for public_body in @public_bodies %> + <li> + <%= link_to h(public_body.name), new_request_to_body_url(:public_body_id => public_body.id.to_s) %> + </li> + <% end %> + </ul> + </div> + <% end %> + <% end %> </div> |