Skip to content

Commit

Permalink
enhancement: ability to search topics by topic type. Linking the topi…
Browse files Browse the repository at this point in the history
…c type value on topic show pages to the search.
  • Loading branch information
Kieran Pilkington committed Nov 13, 2009
1 parent d8a9743 commit 62b40d3
Show file tree
Hide file tree
Showing 8 changed files with 55 additions and 10 deletions.
8 changes: 8 additions & 0 deletions app/controllers/search_controller.rb
Expand Up @@ -129,6 +129,8 @@ def search
@extended_field = ExtendedField.from_label_for_params(params[:extended_field]).first if params[:extended_field]
@all_choices = true unless @extended_field

@topic_type = TopicType.first(:conditions => ['LOWER(name) = ?', params[:topic_type].downcase.gsub('_', ' ')]) if params[:topic_type]

# calculate where to start and end based on page
@current_page = (params[:page] && params[:page].to_i > 0) ? params[:page].to_i : 1
@next_page = @current_page + 1
Expand Down Expand Up @@ -312,6 +314,8 @@ def populate_result_sets_for(zoom_class)
@search.pqf_query.any_text_include("':#{@limit_to_choice}:'") unless @limit_to_choice.blank?
end

@search.pqf_query.coverage_equals_completely("#{@topic_type.name}") if !@topic_type.nil?

# Normal search terms..

if !@search_terms.blank?
Expand Down Expand Up @@ -408,6 +412,10 @@ def terms_to_page_url_redirect
location_hash.merge({ :extended_field => params[:extended_field] })
end

if !params[:topic_type].blank?
location_hash.merge!({ :topic_type => params[:topic_type] })
end

logger.debug("terms_to_page_url_redirect hash: " + location_hash.inspect)

redirect_to url_for(location_hash)
Expand Down
27 changes: 20 additions & 7 deletions app/helpers/application_helper.rb
Expand Up @@ -1186,25 +1186,38 @@ def link_to_original_of(item, phrase=t('application_helper.link_to_original_of.p

# we use this in imports, too
def topic_type_select_with_indent(object, method, collection, value_method, text_method, current_value, html_options=Hash.new, pre_options=Array.new)
result = "<select name=\"#{object}[#{method}]\" id=\"#{object}_#{method}\""
if method
result = "<select name=\"#{object}[#{method}]\" id=\"#{object}_#{method}\""
else
result = "<select name=\"#{object}\" id=\"#{object}\""
end
html_options.each do |key, value|
result << ' ' + key.to_s + '="' + value.to_s + '"'
end
result << ">\n"
result << options_for_select(pre_options) unless pre_options.blank?
for element in collection
indent_string = String.new
element.level.times { indent_string += "&nbsp;" }
if current_value == element.send(value_method)
result << "<option value='#{ element.send(value_method)}' selected='selected'>#{indent_string}#{element.send(text_method)}</option>\n"
else
result << "<option value='#{element.send(value_method)}'>#{indent_string}#{element.send(text_method)}</option>\n"
end
element.level.times { indent_string += "&nbsp;" }
escaped_value = element.send(value_method).strip.downcase.gsub(/\s/, '_')
selected = current_value == escaped_value ? " selected='selected'" : ''
result << "<option value='#{escaped_value}'#{selected}>#{indent_string}#{element.send(text_method)}</option>\n"
end
result << "</select>\n"
return result
end

def url_for_topics_of_type(topic_type)
url_hash = {
:urlified_name => @site_basket.urlified_name,
:controller => 'search',
:controller_name_for_zoom_class => 'topics',
:topic_type => topic_type.name.downcase.gsub(/\s/, '_')
}

basket_all_topic_type_path(url_hash)
end

def load_styles(theme)
theme_styles = Array.new
theme_styles_path = theme + '/stylesheets/'
Expand Down
10 changes: 9 additions & 1 deletion app/views/search/_form.rhtml
Expand Up @@ -15,7 +15,7 @@ if params[:view_as] && params[:view_as] == 'choice_hierarchy' %>
<% form_tag :overwrite_params => { :action => 'terms_to_page_url_redirect',
:controller => 'search', :urlified_name => @current_basket.urlified_name,
:page => nil, :sort_type => nil, :sort_direction => nil,
:search_terms => nil, :privacy_type => nil, :limit_to_choice => nil, :extended_field => nil } do %>
:search_terms => nil, :privacy_type => nil, :limit_to_choice => nil, :extended_field => nil, :topic_type => nil } do %>
<% if !simple_layout && !@search.nil? -%>

Expand All @@ -30,6 +30,14 @@ if params[:view_as] && params[:view_as] == 'choice_hierarchy' %>
<% currently_disabled = (params[:action] == 'for' && (params[:sort_type].blank? || params[:sort_type] == 'none')) %>
<input type="checkbox" name="sort_direction" id="sort_direction" value="reverse"<%= ' disabled="true"' if currently_disabled -%><%= ' checked="checked"' if currently_reversed -%> tabindex="1" />
</div>

<br />

<% if params[:controller_name_for_zoom_class] == 'topics' %>
<label for="topic_type"><%=t 'search.form.of_topic_type' %></label>
<%= topic_type_select_with_indent('topic_type', nil, TopicType.find(1).full_set, :name, :name, params[:topic_type], {}, [[t('search.form.any_topic_type'), '']]) %>
<% end %>
<% # Only show private search control if allowed and we aren't relating something to a topic. %>
<% if params[:relate_to_topic].blank? && show_privacy_search_controls? && permitted_to_view_private_items? -%>
<label for="privacy_type"><%=t 'search.form.privacy_type' %></label>
Expand Down
2 changes: 1 addition & 1 deletion app/views/search/_refine_by_choice.html.erb
Expand Up @@ -4,4 +4,4 @@
<% elsif @all_choices && categories_field -%>
<br /><%= content_tag("label", t('search.refine_by_choice.limit_to_category')) + control unless control.blank? %>
<% end -%>
<%= hidden_field_tag 'extended_field', params[:extended_field] %>
<%= hidden_field_tag 'extended_field', params[:extended_field] if params[:extended_field] %>
5 changes: 4 additions & 1 deletion app/views/topics/show.rhtml
Expand Up @@ -4,7 +4,10 @@
<% cache_with_privacy(@topic, {:part => 'details_first'}) do -%>
<h2><%=t 'topics.show.topic' %> <%= h(@topic.title) %></h2>
<h4><%=t 'topics.show.topic_type' %> <%= h(@topic.topic_type.name) %></h4>
<h4>
<%=t 'topics.show.topic_type' %>
<%= link_to(h(@topic.topic_type.name), url_for_topics_of_type(@topic.topic_type)) %>
</h4>
<p><b><%= @topic.short_summary %></b></p>
<% end -%>
Expand Down
2 changes: 2 additions & 0 deletions config/locales/en.yml
Expand Up @@ -1763,11 +1763,13 @@ en:
browse_by_category: "Browse by category"
getting_categories: "Getting Categories. "
in_reverse: "In reverse?"
of_topic_type: "Of type:"
options: Options
privacy_type: "That are:"
private: "{{t.base.private.capitalize}}"
public: "{{t.base.public.capitalize}}"
search: "{{t.base.search.capitalize}}"
any_topic_type: "- any type -"
sort_by: "Sort by:"
update_results: "{{t.base.update}}"
generic:
Expand Down
10 changes: 10 additions & 0 deletions config/routes.rb
Expand Up @@ -34,6 +34,8 @@
search.with_options :action => 'all' do |search_all|
search_all.basket_all ':urlified_name/all/:controller_name_for_zoom_class/'
search_all.basket_all_private ':urlified_name/all/:privacy_type/:controller_name_for_zoom_class/'
search_all.basket_all_topic_type ':urlified_name/all/:controller_name_for_zoom_class/of/:topic_type'
search_all.basket_all_topic_type_private ':urlified_name/all/:privacy_type/:controller_name_for_zoom_class/of/:topic_type'
search_all.basket_all_contributed_by ':urlified_name/all/:controller_name_for_zoom_class/contributed_by/user/:contributor/'
search_all.basket_all_private_contributed_by ':urlified_name/all/:privacy_type/:controller_name_for_zoom_class/contributed_by/user/:contributor/'
search_all.basket_all_of_category ':urlified_name/all/:controller_name_for_zoom_class/of/:extended_field/:limit_to_choice'
Expand All @@ -47,6 +49,8 @@
search.with_options :action => 'rss' do |search_rss|
search_rss.basket_all_rss ':urlified_name/all/:controller_name_for_zoom_class/rss.xml'
search_rss.basket_all_private_rss ':urlified_name/all/:privacy_type/:controller_name_for_zoom_class/rss.xml'
search_rss.basket_all_topic_type_rss ':urlified_name/all/:controller_name_for_zoom_class/of/:topic_type/rss.xml'
search_rss.basket_all_topic_type_private_rss ':urlified_name/all/:privacy_type/:controller_name_for_zoom_class/of/:topic_type/rss.xml'
search_rss.basket_all_contributed_by_rss ':urlified_name/all/:controller_name_for_zoom_class/contributed_by/user/:contributor/rss.xml'
search_rss.basket_all_private_contributed_by_rss ':urlified_name/all/:privacy_type/:controller_name_for_zoom_class/contributed_by/user/:contributor/rss.xml'
search_rss.basket_all_related_to_rss ':urlified_name/all/:controller_name_for_zoom_class/related_to/:source_controller_singular/:source_item/rss.xml'
Expand All @@ -63,6 +67,8 @@
search_rss.basket_search_private_tagged_rss ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/tagged/:tag/for/:search_terms_slug/rss.xml'
search_rss.basket_search_rss ':urlified_name/search/:controller_name_for_zoom_class/for/:search_terms_slug/rss.xml'
search_rss.basket_search_private_rss ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/for/:search_terms_slug/rss.xml'
search_rss.basket_search_topic_type ':urlified_name/search/:controller_name_for_zoom_class/of/:topic_type/for/:search_terms_slug/rss.xml'
search_rss.basket_search_topic_type_private ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/of/:topic_type/for/:search_terms_slug/rss.xml'
search_rss.basket_search_of_category_rss ':urlified_name/search/:controller_name_for_zoom_class/of/:extended_field/:limit_to_choice/for/:search_terms_slug/rss.xml'
search_rss.basket_search_private_of_category_rss ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/of/:extended_field/:limit_to_choice/for/:search_terms_slug/rss.xml'
end
Expand All @@ -76,6 +82,8 @@
search_for.basket_search_private_tagged ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/tagged/:tag/for/:search_terms_slug'
search_for.basket_search ':urlified_name/search/:controller_name_for_zoom_class/for/:search_terms_slug'
search_for.basket_search_private ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/for/:search_terms_slug'
search_for.basket_search_topic_type ':urlified_name/search/:controller_name_for_zoom_class/of/:topic_type/for/:search_terms_slug'
search_for.basket_search_topic_type_private ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/of/:topic_type/for/:search_terms_slug'
search_for.basket_search_of_category ':urlified_name/search/:controller_name_for_zoom_class/of/:extended_field/:limit_to_choice/for/:search_terms_slug'
search_for.basket_search_private_of_category ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/of/:extended_field/:limit_to_choice/for/:search_terms_slug'

Expand All @@ -88,6 +96,8 @@
nil_search_terms.basket_search_private_tagged_empty ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/tagged/:tag/for'
nil_search_terms.basket_search_empty ':urlified_name/search/:controller_name_for_zoom_class/for'
nil_search_terms.basket_search_private_empty ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/for'
nil_search_terms.basket_search_topic_type ':urlified_name/search/:controller_name_for_zoom_class/of/:topic_type/for'
nil_search_terms.basket_search_topic_type_private ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/of/:topic_type/for'
nil_search_terms.basket_search_of_category_empty ':urlified_name/search/:controller_name_for_zoom_class/of/:extended_field/:limit_to_choice/for'
nil_search_terms.basket_search_private_of_category_empty ':urlified_name/search/:privacy_type/:controller_name_for_zoom_class/of/:extended_field/:limit_to_choice/for'
end
Expand Down
1 change: 1 addition & 0 deletions public/stylesheets/base.css
Expand Up @@ -991,6 +991,7 @@ input.searchheader-search {
margin-left: 2em;
margin-bottom: 1em;
margin-right: 1em;
margin-top: -20px;
}

#sort_direction_field{
Expand Down

0 comments on commit 62b40d3

Please sign in to comment.