diff options
Diffstat (limited to 'app')
-rw-r--r-- | app/controllers/request_controller.rb | 27 | ||||
-rw-r--r-- | app/helpers/link_to_helper.rb | 5 | ||||
-rw-r--r-- | app/views/request/show.rhtml | 14 | ||||
-rw-r--r-- | app/views/request/similar.rhtml | 19 |
4 files changed, 41 insertions, 24 deletions
diff --git a/app/controllers/request_controller.rb b/app/controllers/request_controller.rb index 4e2e8703c..063e2fd01 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.87 2008-05-18 03:47:01 francis Exp $ +# $Id: request_controller.rb,v 1.88 2008-05-18 21:53:15 francis Exp $ class RequestController < ApplicationController @@ -30,24 +30,25 @@ class RequestController < ApplicationController @new_responses_count = @events_needing_description.select {|i| i.event_type == 'response'}.size # Sidebar stuff - limit = 3 + 1 - # ... requests made by same person to same authority - @info_requests_same_user_same_body = InfoRequest.find(:all, :order => "created_at desc", - :conditions => ["prominence = 'normal' and user_id = ? and public_body_id = ? and id <> ?", @info_request.user_id, @info_request.public_body_id, @info_request.id], - :limit => limit) - @info_requests_same_user_same_body_more = false - if @info_requests_same_user_same_body.size == limit - @info_requests_same_user_same_body = @info_requests_same_user_same_body[0, limit - 1] - @info_requests_same_user_same_body_more = true - end + limit = 3 # ... requests that have similar imporant terms @xapian_similar = ::ActsAsXapian::Similar.new([InfoRequestEvent], @info_request.info_request_events, - :limit => limit - 1, :collapse_by_prefix => 'request_collapse') - + :limit => limit, :collapse_by_prefix => 'request_collapse') + @xapian_similar_more = (@xapian_similar.matches_estimated > limit) + # Track corresponding to this page @track_thing = TrackThing.create_track_for_request(@info_request) end + # Requests similar to this one + def similar + @per_page = 25 + @page = (params[:page] || "1").to_i + @info_request = InfoRequest.find_by_url_title(params[:url_title]) + @xapian_object = ::ActsAsXapian::Similar.new([InfoRequestEvent], @info_request.info_request_events, + :offset => (@page - 1) * @per_page, :limit => @per_page, :collapse_by_prefix => 'request_collapse') + end + def list @view = params[:view] diff --git a/app/helpers/link_to_helper.rb b/app/helpers/link_to_helper.rb index cb4b7e5b6..88ffd790e 100644 --- a/app/helpers/link_to_helper.rb +++ b/app/helpers/link_to_helper.rb @@ -5,7 +5,7 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: link_to_helper.rb,v 1.31 2008-05-15 22:47:16 francis Exp $ +# $Id: link_to_helper.rb,v 1.32 2008-05-18 21:53:16 francis Exp $ module LinkToHelper @@ -24,6 +24,9 @@ module LinkToHelper def request_admin_link(info_request) link_to h(info_request.title), request_admin_url(info_request) end + def request_similar_url(info_request) + return similar_request_url(:url_title => info_request.url_title, :only_path => true) + end # Incoming / outgoing messages def incoming_message_url(incoming_message) diff --git a/app/views/request/show.rhtml b/app/views/request/show.rhtml index 9a116f7e2..181bb27e3 100644 --- a/app/views/request/show.rhtml +++ b/app/views/request/show.rhtml @@ -16,21 +16,15 @@ <br><img src="/images/pledgebank.png" alt=""> <a href="http://www.pledgebank.com">Pledge with others</a> </p> - <% if @info_requests_same_user_same_body.size > 0 %> - <h2>Requests from same user to same authority</h2> - <!-- <h2>Some other requests made by <%= user_link(@info_request.user) %> to <%= public_body_link(@info_request.public_body) %></h2> --> - <%= render :partial => 'sidebar_request_listing', :locals => { :info_requests => @info_requests_same_user_same_body } %> - <% if @info_requests_same_user_same_body_more %> - <p><%= link_to "More such requests", search_url("variety:sent requested_from:" + @info_request.public_body.url_name + " requested_by:" + @info_request.user.url_name + " -request:" + @info_request.url_title, "newest") %></p> - <% end %> - <% end %> - <% if @xapian_similar.results.size > 0 %> <h2>Similar requests</h2> <% for result in @xapian_similar.results %> <%= render :partial => 'request/request_listing_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %> <% end %> - <% end %> + <% if @xapian_similar_more %> + <p><%= link_to "More similar requests", request_similar_url(@info_request) %></p> + <% end %> + <% end %> <!-- <%= @xapian_similar.important_terms.join(" ") %> --> <!--<h2>Blog posts about this request</h2> diff --git a/app/views/request/similar.rhtml b/app/views/request/similar.rhtml new file mode 100644 index 000000000..8bcceab19 --- /dev/null +++ b/app/views/request/similar.rhtml @@ -0,0 +1,19 @@ +<% @title = "Requests similar to '" + h(@info_request.title) + "'" %> +<h1><%="Requests similar to '" + request_link(@info_request) + "'"%></h1> + +<% if @xapian_object.results.empty? %> + <p>No requests made yet.</p> +<% else %> + <p class="subtitle"> + <%= @xapian_object.matches_estimated %> in total + </p> + <% for result in @xapian_object.results %> + <% if result[:model].class.to_s == 'InfoRequestEvent' %> + <%= render :partial => 'request/request_listing_via_event', :locals => { :event => result[:model], :info_request => result[:model].info_request } %> + <% else %> + <p><strong>Unexpected search result type <%=result[:model].class.to_s%></strong></p> + <% end %> + <% end %> +<% end %> + +<%= will_paginate WillPaginate::Collection.new(@page, @per_page, @xapian_object.matches_estimated) %> |