Modified: branches/discovery/app/controllers/application.rb (2478 => 2479)
--- branches/discovery/app/controllers/application.rb 2010-07-19 13:11:55 UTC (rev 2478)
+++ branches/discovery/app/controllers/application.rb 2010-07-19 15:35:15 UTC (rev 2479)
@@ -575,8 +575,10 @@
joins += filter[:joins] if filter[:joins]
conditions << "#{filter[:id_column]} IS NOT NULL" if filter[:not_null]
- if params[:filter_query]
- conditions << "(#{filter[:label_column]} LIKE '%#{escape_sql(params[:filter_query])}%')"
+ unless opts[:inhibit_filter_query]
+ if params[:filter_query]
+ conditions << "(#{filter[:label_column]} LIKE '%#{escape_sql(params[:filter_query])}%')"
+ end
end
current = params[filter[:query_option]] ? params[filter[:query_option]].split(',') : []
@@ -629,6 +631,47 @@
[current, objects]
end
+ def calculate_filters(params, opts, user)
+
+ # produce the filter list
+
+ filters = pivot_options[:filters].clone
+ cancel_filter_query_url = nil
+
+ filters.each do |filter|
+
+ # calculate the top n items of the list
+
+ filter[:current], filter[:objects] = calculate_filter(params, filter, user, opts)
+
+ # calculate which active filters are missing (because they weren't in the
+ # top part of the list or have a count of zero)
+
+ missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
+
+ if missing_filter_ids.length > 0
+ filter[:objects] += calculate_filter(params, filter, user, opts.merge(:ids => missing_filter_ids))[1]
+ end
+
+ # calculate which active filters are still missing (because they have a
+ # count of zero)
+
+ missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
+
+ if missing_filter_ids.length > 0
+ zero_list = calculate_filter(params, filter, user, opts.merge(:ids => missing_filter_ids, :inhibit_other_conditions => true))[1]
+
+ zero_list.each do |x| x[:count] = 0 end
+
+ zero_list.sort! do |a, b| a[:label] <=> b[:label] end
+
+ filter[:objects] += zero_list
+ end
+ end
+
+ [ filters, cancel_filter_query_url ]
+ end
+
# apply locked filters
if opts[:lock_filter]
@@ -680,60 +723,22 @@
end
end
- opts[:order_params] = {}
- opts[:advanced_params] = {}
- opts[:filter_query_params] = {}
-
- opts[:order_params][:order] = params[:order] if params[:order]
- opts[:advanced_params][:advanced] = params[:advanced] if params[:advanced]
- opts[:filter_query_params][:filter_query] = params[:filter_query] if params[:filter_query]
-
# produce the filter list
- filters = pivot_options[:filters].clone
- cancel_filter_query_url = nil
- reset_filters_url = nil
+ filters, cancel_filter_query_url = calculate_filters(params, opts, user)
- if opts[:filter_params].length > 0
- reset_filters_url = build_url(params, opts, [:order, :advanced])
- end
+ # produce the summary. If a filter query is specified, then we need to
+ # recalculate the filters without the query to get all of them.
- filters.each do |filter|
-
- # calculate the top n items of the list
-
- filter[:current], filter[:objects] = calculate_filter(params, filter, user, opts)
-
- # calculate which active filters are missing (because they weren't in the
- # top part of the list or have a count of zero)
-
- missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
-
- if missing_filter_ids.length > 0
- filter[:objects] += calculate_filter(params, filter, user, opts.merge(:ids => missing_filter_ids))[1]
- end
-
- # calculate which active filters are still missing (because they have a
- # count of zero)
-
- missing_filter_ids = filter[:current] - filter[:objects].map do |ob| ob[:value] end
-
- if missing_filter_ids.length > 0
- zero_list = calculate_filter(params, filter, user, opts.merge(:ids => missing_filter_ids, :inhibit_other_conditions => true))[1]
-
- zero_list.each do |x| x[:count] = 0 end
-
- zero_list.sort! do |a, b| a[:label] <=> b[:label] end
-
- filter[:objects] += zero_list
- end
+ if params[:filter_query]
+ filters2 = calculate_filters(params, opts.merge( { :inhibit_filter_query => true } ), user)[0]
+ else
+ filters2 = filters
end
- # produce the summary
-
summary = ""
- filters.select do |filter|
+ filters2.select do |filter|
next if opts[:lock_filter] && opts[:lock_filter][filter[:query_option]]
@@ -760,7 +765,7 @@
end
if params[:filter_query]
- cancel_filter_query_url = build_url(params, opts, [:advanced])
+ cancel_filter_query_url = build_url(params, opts, [:filter, :order, :advanced])
end
# remove filters that do not help in narrowing down the result set
@@ -770,8 +775,10 @@
false
# elsif filter[:objects].length == 1 && filter[:objects][0][:selected] == false
# false
- elsif params[:advanced].nil? && (params[filter[:query_option]] || filter[:objects].length < 2)
+ elsif params[:advanced].nil? && params[filter[:query_option]]
false
+ elsif params[:advanced].nil? && params[:filter_query].nil? && filter[:objects].length < 2
+ false
elsif opts[:lock_filter] && opts[:lock_filter][filter[:query_option]]
false
else
@@ -782,9 +789,8 @@
{
:results => results,
:filters => filters,
- :reset_filters_url => reset_filters_url,
:cancel_filter_query_url => cancel_filter_query_url,
- :filter_query_url => opts[:filter_params],
+ :filter_query_url => build_url(params, opts, [:filter]),
:summary => summary
}
end
Modified: branches/discovery/app/views/content/_index.rhtml (2478 => 2479)
--- branches/discovery/app/views/content/_index.rhtml 2010-07-19 13:11:55 UTC (rev 2478)
+++ branches/discovery/app/views/content/_index.rhtml 2010-07-19 15:35:15 UTC (rev 2479)
@@ -1,15 +1,19 @@
<div class="pivot">
<div class="left">
- <% if @pivot[:reset_filters_url] %>
- <div class="reset_filters"><%= link_to("Reset filters", @pivot[:reset_filters_url]) -%></div>
- <% end %>
<div class="search_filters">
<form action="" url_for(request.query_parameters) -%>" method="GET">
<div>Search filters:</div>
- <input name="filter_query" value="<%= params[:filter_query] -%>" style="width: 100px" />
- <% @pivot[:filter_query_url].each do |key, value| %>
- <input name="<%= key -%>" type="hidden" value="<%= value.sub('"', '\\"') -%>" />
- <% end %>
+ <div class="filter_search_box">
+ <input name="filter_query" value="<%= params[:filter_query] -%>" />
+ <% @pivot[:filter_query_url].each do |key, value| %>
+ <input name="<%= key -%>" type="hidden" value="<%= value.sub('"', '\\"') -%>" />
+ <% end %>
+ <% if @pivot[:cancel_filter_query_url] %>
+ <img src="" />
+ <% else %>
+ <img src="" />
+ <% end %>
+ </div>
</form>
<div>
@@ -56,11 +60,11 @@
<div class="summary">
<div class="result-count">
Showing <%= pluralize(@pivot[:results].size, 'result') -%>.
- <% if @pivot[:reset_filters_url] %>
+ <% if @pivot[:summary].length > 0 %>
The following filters are in effect:
<% end %>
</div>
- <% if @pivot[:summary] %>
+ <% if @pivot[:summary].length > 0 %>
<div class="crumbs"><%= @pivot[:summary] -%></div>
<% end %>
</div>