Commit 5a8294ce60700a0fea36f07c492da3f28cb1c0ed
1 parent
9395097d
Exists in
staging
and in
42 other branches
Removed environment_finder and search popup
Showing
3 changed files
with
57 additions
and
206 deletions
Show diff stats
app/controllers/public/search_controller.rb
... | ... | @@ -8,7 +8,6 @@ class SearchController < PublicController |
8 | 8 | include SearchHelper |
9 | 9 | |
10 | 10 | before_filter :load_category |
11 | - before_filter :check_search_whole_site | |
12 | 11 | before_filter :load_search_assets |
13 | 12 | |
14 | 13 | no_design_blocks |
... | ... | @@ -159,7 +158,7 @@ class SearchController < PublicController |
159 | 158 | @order = [] |
160 | 159 | @names = {} |
161 | 160 | |
162 | - where_to_search.select { |key,description| @searching[key] }.each do |key, description| | |
161 | + @enabled_searchs.select { |key,description| @searching[key] }.each do |key, description| | |
163 | 162 | send(key) |
164 | 163 | @order << key |
165 | 164 | @names[key] = getterm(description) |
... | ... | @@ -182,7 +181,6 @@ class SearchController < PublicController |
182 | 181 | |
183 | 182 | # view the summary of one category |
184 | 183 | def category_index |
185 | - @searching | |
186 | 184 | @results = {} |
187 | 185 | @order = [] |
188 | 186 | @names = {} |
... | ... | @@ -203,13 +201,37 @@ class SearchController < PublicController |
203 | 201 | @facets = {} |
204 | 202 | end |
205 | 203 | |
204 | + def tags | |
205 | + @tags_cache_key = "tags_env_#{environment.id.to_s}" | |
206 | + if is_cache_expired?(@tags_cache_key, true) | |
207 | + @tags = environment.tag_counts | |
208 | + end | |
209 | + end | |
210 | + | |
211 | + def tag | |
212 | + @tag = params[:tag] | |
213 | + @tag_cache_key = "tag_#{CGI.escape(@tag.to_s)}_env_#{environment.id.to_s}_page_#{params[:npage]}" | |
214 | + if is_cache_expired?(@tag_cache_key, true) | |
215 | + @tagged = environment.articles.find_tagged_with(@tag).paginate(:per_page => 10, :page => params[:npage]) | |
216 | + end | |
217 | + end | |
218 | + | |
219 | + def events_by_day | |
220 | + @selected_day = build_date(params[:year], params[:month], params[:day]) | |
221 | + if params[:category_id] and Category.exists?(params[:category_id]) | |
222 | + @events_of_the_day = environment.events.by_day(@selected_day).in_category(Category.find(params[:category_id])) | |
223 | + else | |
224 | + @events_of_the_day = environment.events.by_day(@selected_day) | |
225 | + end | |
226 | + render :partial => 'events/events_by_day' | |
227 | + end | |
228 | + | |
229 | + ####################################################### | |
206 | 230 | protected |
207 | 231 | |
208 | 232 | def recent(asset, limit = nil) |
209 | 233 | options = {:page => 1, :per_page => limit, :order => 'created_at DESC, id DESC'} |
210 | 234 | |
211 | - @region = Region.find_by_id(options.delete(:region)) if options.has_key?(:region) | |
212 | - | |
213 | 235 | if asset == :events |
214 | 236 | finder_method = 'find' |
215 | 237 | options.delete(:page) |
... | ... | @@ -233,66 +255,6 @@ class SearchController < PublicController |
233 | 255 | Event.find(:all, {:include => :categories, :conditions => [ 'categories.id = ? and start_date >= ?', category_id, Date.today ], :order => 'start_date' }.merge(options)) |
234 | 256 | end |
235 | 257 | |
236 | - | |
237 | - attr_reader :category | |
238 | - attr_reader :category_id | |
239 | - | |
240 | - def load_category | |
241 | - unless params[:category_path].blank? | |
242 | - path = params[:category_path].join('/') | |
243 | - @category = environment.categories.find_by_path(path) | |
244 | - if @category.nil? | |
245 | - render_not_found(path) | |
246 | - end | |
247 | - @category_id = @category.id | |
248 | - end | |
249 | - end | |
250 | - | |
251 | - def where_to_search | |
252 | - [ | |
253 | - [ :articles, N_('Articles') ], | |
254 | - [ :enterprises, N_('Enterprises') ], | |
255 | - [ :people, N_('People') ], | |
256 | - [ :communities, N_('Communities') ], | |
257 | - [ :products, N_('Products') ], | |
258 | - [ :events, N_('Events') ] | |
259 | - ].select {|key, name| !environment.enabled?('disable_asset_' + key.to_s) } | |
260 | - end | |
261 | - | |
262 | - ####################################################### | |
263 | - | |
264 | - def tags | |
265 | - @tags_cache_key = "tags_env_#{environment.id.to_s}" | |
266 | - if is_cache_expired?(@tags_cache_key, true) | |
267 | - @tags = environment.tag_counts | |
268 | - end | |
269 | - end | |
270 | - | |
271 | - def tag | |
272 | - @tag = params[:tag] | |
273 | - @tag_cache_key = "tag_#{CGI.escape(@tag.to_s)}_env_#{environment.id.to_s}_page_#{params[:npage]}" | |
274 | - if is_cache_expired?(@tag_cache_key, true) | |
275 | - @tagged = environment.articles.find_tagged_with(@tag).paginate(:per_page => 10, :page => params[:npage]) | |
276 | - end | |
277 | - end | |
278 | - | |
279 | - ####################################################### | |
280 | - | |
281 | - def popup | |
282 | - @regions = Region.find(:all).select{|r|r.lat && r.lng} | |
283 | - render :action => 'popup', :layout => false | |
284 | - end | |
285 | - | |
286 | - def events_by_day | |
287 | - @selected_day = build_date(params[:year], params[:month], params[:day]) | |
288 | - if params[:category_id] and Category.exists?(params[:category_id]) | |
289 | - @events_of_the_day = environment.events.by_day(@selected_day).in_category(Category.find(params[:category_id])) | |
290 | - else | |
291 | - @events_of_the_day = environment.events.by_day(@selected_day) | |
292 | - end | |
293 | - render :partial => 'events/events_by_day' | |
294 | - end | |
295 | - | |
296 | 258 | def current_events(year, month, options={}) |
297 | 259 | options.delete(:page) |
298 | 260 | options.delete(:per_page) |
... | ... | @@ -302,6 +264,11 @@ class SearchController < PublicController |
302 | 264 | Event.find(:all, {:include => :categories, :conditions => { 'categories.id' => category_id, :start_date => range }}.merge(options)) |
303 | 265 | end |
304 | 266 | |
267 | + FILTERS = %w( | |
268 | + more_recent | |
269 | + more_active | |
270 | + more_popular | |
271 | + ) | |
305 | 272 | def filter |
306 | 273 | if FILTERS.include?(params[:filter]) |
307 | 274 | params[:filter] |
... | ... | @@ -323,26 +290,36 @@ class SearchController < PublicController |
323 | 290 | }[str] || str |
324 | 291 | end |
325 | 292 | |
326 | - def load_search_assets | |
327 | - @search_in = where_to_search | |
328 | - @searching = {} | |
329 | - @search_in.each do |key, name| | |
330 | - @searching[key] = (params[:asset].blank? && (params[:find_in].nil? || params[:find_in].empty? || params[:find_in].include?(key.to_s))) || (params[:asset] == key.to_s) | |
293 | + attr_reader :category | |
294 | + attr_reader :category_id | |
295 | + | |
296 | + def load_category | |
297 | + unless params[:category_path].blank? | |
298 | + path = params[:category_path].join('/') | |
299 | + @category = environment.categories.find_by_path(path) | |
300 | + if @category.nil? | |
301 | + render_not_found(path) | |
302 | + end | |
303 | + @category_id = @category.id | |
331 | 304 | end |
332 | 305 | end |
333 | 306 | |
334 | - def check_search_whole_site | |
335 | - if params[:search_whole_site_yes] or params[:search_whole_site] == 'yes' | |
336 | - redirect_to params.merge(:category_path => [], :search_whole_site => nil, :search_whole_site_yes => nil) | |
307 | + def load_search_assets | |
308 | + @enabled_searchs = [ | |
309 | + [ :articles, N_('Articles') ], | |
310 | + [ :enterprises, N_('Enterprises') ], | |
311 | + [ :people, N_('People') ], | |
312 | + [ :communities, N_('Communities') ], | |
313 | + [ :products, N_('Products') ], | |
314 | + [ :events, N_('Events') ] | |
315 | + ].select {|key, name| !environment.enabled?('disable_asset_' + key.to_s) } | |
316 | + | |
317 | + @searching = {} | |
318 | + @enabled_searchs.each do |key, name| | |
319 | + @searching[key] = params[:action] == 'index' || params[:action] == key.to_s | |
337 | 320 | end |
338 | 321 | end |
339 | 322 | |
340 | - FILTERS = %w( | |
341 | - more_recent | |
342 | - more_active | |
343 | - more_popular | |
344 | - ) | |
345 | - | |
346 | 323 | def paginate_options(asset, limit, page) |
347 | 324 | result = { :per_page => limit, :page => page } |
348 | 325 | end |
... | ... | @@ -367,7 +344,7 @@ class SearchController < PublicController |
367 | 344 | if params[:display] == 'map' |
368 | 345 | MAP_SEARCH_LIMIT |
369 | 346 | else |
370 | - (searching.size == 1) ? SINGLE_SEARCH_LIMIT : MULTIPLE_SEARCH_LIMIT | |
347 | + (searching.size <= 1) ? SINGLE_SEARCH_LIMIT : MULTIPLE_SEARCH_LIMIT | |
371 | 348 | end |
372 | 349 | end |
373 | 350 | ... | ... |
app/models/environment_finder.rb
... | ... | @@ -1,117 +0,0 @@ |
1 | -class EnvironmentFinder | |
2 | - | |
3 | - def initialize env | |
4 | - @environment = env | |
5 | - end | |
6 | - | |
7 | - def find(asset, query = nil, options={}, finder_method = 'paginate') | |
8 | - @region = Region.find_by_id(options.delete(:region)) if options.has_key?(:region) | |
9 | - if @region && options[:within] | |
10 | - options[:origin] = [@region.lat, @region.lng] | |
11 | - else | |
12 | - options.delete(:within) | |
13 | - end | |
14 | - | |
15 | - product_category = options.delete(:product_category) | |
16 | - | |
17 | - date_range = options.delete(:date_range) | |
18 | - | |
19 | - # FIXME this test is in more than one place | |
20 | - if finder_method == 'paginate' | |
21 | - options = {:page => 1, :per_page => options.delete(:limit)}.merge(options) | |
22 | - end | |
23 | - | |
24 | - if query.blank? | |
25 | - options.delete(:facets) | |
26 | - options.delete(:order_by) | |
27 | - | |
28 | - # FIXME this test is in more than one place | |
29 | - if finder_method == 'paginate' | |
30 | - options = {:order => "#{asset_table(asset)}.name"}.merge(options) | |
31 | - end | |
32 | - if product_category && asset == :products | |
33 | - @environment.send(asset).send(finder_method, :all, options.merge(:include => 'product_categorizations', :conditions => ['product_categorizations.category_id = (?)', product_category.id])) | |
34 | - elsif product_category && asset == :enterprises | |
35 | - @environment.send(asset).send(finder_method, :all, options.merge( :order => 'profiles.name', :joins => 'inner join products on (products.enterprise_id = profiles.id) inner join product_categorizations on (product_categorizations.product_id = products.id)', :conditions => ['product_categorizations.category_id = (?)', product_category.id])) | |
36 | - else | |
37 | - if asset == :events | |
38 | - # Ignore pagination for asset events | |
39 | - options.delete(:per_page) | |
40 | - options.delete(:page) | |
41 | - if date_range | |
42 | - @environment.send(asset).send('find', :all, options.merge(:conditions => [ | |
43 | - 'start_date BETWEEN :start_day AND :end_day OR end_date BETWEEN :start_day AND :end_day', | |
44 | - {:start_day => date_range.first, :end_day => date_range.last} | |
45 | - ])) | |
46 | - else | |
47 | - @environment.send(asset).send('find', :all, options) | |
48 | - end | |
49 | - else | |
50 | - @environment.send(asset).send(finder_method, :all, options) | |
51 | - end | |
52 | - end | |
53 | - else | |
54 | - pg_options = {:page => options.delete(:page), :per_page => options.delete(:per_page)} | |
55 | - solr_options = {:facets => options.delete(:facets), :order => options.delete(:order_by)} | |
56 | - | |
57 | - if product_category && asset == :products | |
58 | - # SECURITY no risk of SQL injection, since product_category_ids comes from trusted source | |
59 | - ret = @environment.send(asset).find_by_contents(query, pg_options, solr_options, options.merge({:include => 'product_categorizations', :conditions => 'product_categorizations.category_id = (%s)' % product_category.id })) | |
60 | - elsif product_category && asset == :enterprises | |
61 | - ret = @environment.send(asset).find_by_contents(query, pg_options, solr_options, options.merge(:joins => 'inner join product_categorizations on (product_categorizations.product_id = products.id)', :include => 'products', :conditions => "product_categorizations.category_id = (#{product_category.id})")) | |
62 | - else | |
63 | - ret = @environment.send(asset).find_by_contents(query, pg_options, solr_options, options) | |
64 | - end | |
65 | - if solr_options[:facets].nil? | |
66 | - ret[:results] | |
67 | - else | |
68 | - ret | |
69 | - end | |
70 | - end | |
71 | - end | |
72 | - | |
73 | - def recent(asset, limit = nil) | |
74 | - find(asset, nil, :limit => limit) | |
75 | - end | |
76 | - | |
77 | - def product_categories_count(asset, product_categories_ids, objects_ids=nil) | |
78 | - conditions = ['product_categorizations.category_id in (?)', product_categories_ids] | |
79 | - | |
80 | - if asset == :products | |
81 | - if objects_ids | |
82 | - conditions[0] += ' and product_categorizations.product_id in (?)' | |
83 | - conditions << objects_ids | |
84 | - end | |
85 | - ProductCategory.find(:all, :select => 'categories.id, count(*) as total', :joins => 'inner join product_categorizations on (product_categorizations.category_id = categories.id)', :group => 'categories.id', :conditions => conditions ) | |
86 | - elsif asset == :enterprises | |
87 | - if objects_ids | |
88 | - conditions[0] += ' and products.enterprise_id in (?)' | |
89 | - conditions << objects_ids | |
90 | - end | |
91 | - ProductCategory.find( | |
92 | - :all, | |
93 | - :select => 'categories.id, count(distinct products.enterprise_id) as total', | |
94 | - :joins => 'inner join product_categorizations on (product_categorizations.category_id = categories.id) inner join products on (products.id = product_categorizations.product_id)', | |
95 | - :group => 'categories.id', | |
96 | - :conditions => conditions | |
97 | - ) | |
98 | - else | |
99 | - raise ArgumentError, 'only products and enterprises supported' | |
100 | - end.inject({}) do |results,pc| | |
101 | - results[pc.id]= pc.total.to_i | |
102 | - results | |
103 | - end | |
104 | - | |
105 | - end | |
106 | - | |
107 | - protected | |
108 | - | |
109 | - def asset_class(asset) | |
110 | - asset.to_s.singularize.camelize.constantize | |
111 | - end | |
112 | - | |
113 | - def asset_table(asset) | |
114 | - asset_class(asset).table_name | |
115 | - end | |
116 | - | |
117 | -end |
app/views/search/popup.rhtml