Commit 5a8294ce60700a0fea36f07c492da3f28cb1c0ed

Authored by Braulio Bhavamitra
1 parent 9395097d

Removed environment_finder and search popup

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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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 &lt; 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
... ... @@ -1,9 +0,0 @@
1   -<div id="search-popup">
2   -
3   -<%= render :partial => 'search_form', :locals => { :form_title => _('Search %s') % @environment.name } %>
4   -
5   -<script type='text/javascript'>
6   - $('query').focus();
7   -</script>
8   -
9   -</div><!-- fim id="search-popup" -->