Commit 35733cf407089a2cb4f5b781d4d7de67df057776

Authored by Rodrigo Souto
1 parent b13acb43

Fallback find_by_contens in case there is no search plugin

app/controllers/application_controller.rb
... ... @@ -154,9 +154,23 @@ class ApplicationController < ActionController::Base
154 154 end
155 155 end
156 156  
157   - def find_by_contents(klass, query, paginate_options={}, options={})
158   - @plugins.first(:find_by_contents, klass, query, paginate_options, options)# ||
159   - # Failback search using like
  157 + def find_by_contents(scope, query, paginate_options={}, options={})
  158 + if query.blank?
  159 + scope = scope.send(options[:filter]) if options[:filter]
  160 + return {:results => scope.paginate(paginate_options)}
  161 + end
  162 + @plugins.first(:find_by_contents, scope, query, paginate_options, options) ||
  163 + fallback_find_by_contents(scope, query, paginate_options, options)
  164 + end
  165 +
  166 + private
  167 +
  168 + def fallback_find_by_contents(scope, query, paginate_options, options)
  169 + fields = scope.base_class::SEARCHABLE_FIELDS.keys.map(&:to_s) & scope.base_class.column_names
  170 + conditions = fields.map do |field|
  171 + "#{scope.base_class.table_name}.#{field} LIKE \"%#{query.downcase}%\""
  172 + end.join(' OR ')
  173 + {:results => scope.send(options[:filter]).where(conditions).paginate(paginate_options)}
160 174 end
161 175  
162 176 end
... ...
app/controllers/public/search_controller.rb
... ... @@ -57,12 +57,8 @@ class SearchController < PublicController
57 57 end
58 58  
59 59 def articles
60   - if !@empty_query
61   - full_text_search
62   - else
63   - @searches[@asset] = {}
64   - @searches[@asset][:results] = @environment.articles.public.send(@filter).paginate(paginate_options)
65   - end
  60 + @scope = @environment.articles.public
  61 + full_text_search
66 62 end
67 63  
68 64 def contents
... ... @@ -70,40 +66,23 @@ class SearchController < PublicController
70 66 end
71 67  
72 68 def people
73   - if !@empty_query
74   - full_text_search
75   - else
76   - @searches[@asset] = {}
77   - @searches[@asset][:results] = visible_profiles(Person).send(@filter).paginate(paginate_options)
78   - end
  69 + @scope = visible_profiles(Person)
  70 + full_text_search
79 71 end
80 72  
81 73 def products
82   - if !@empty_query
83   - full_text_search
84   - else
85   - @searches[@asset] = {}
86   - @searches[@asset][:results] = @environment.products.send(@filter).paginate(paginate_options)
87   - end
  74 + @scope = @environment.products
  75 + full_text_search
88 76 end
89 77  
90 78 def enterprises
91   - if !@empty_query
92   - full_text_search
93   - else
94   - @filter_title = _('Enterprises from network')
95   - @searches[@asset] = {}
96   - @searches[@asset][:results] = visible_profiles(Enterprise, [{:products => :product_category}]).paginate(paginate_options)
97   - end
  79 + @scope = visible_profiles(Enterprise, [{:products => :product_category}])
  80 + full_text_search
98 81 end
99 82  
100 83 def communities
101   - if !@empty_query
102   - full_text_search
103   - else
104   - @searches[@asset] = {}
105   - @searches[@asset][:results] = visible_profiles(Community).send(@filter).paginate(paginate_options)
106   - end
  84 + @scope = visible_profiles(Community)
  85 + full_text_search
107 86 end
108 87  
109 88 def events
... ... @@ -122,12 +101,8 @@ class SearchController < PublicController
122 101 environment.events.by_day(@selected_day)
123 102 end
124 103  
125   - if !@empty_query
126   - full_text_search
127   - else
128   - @searches[@asset] = {}
129   - @searches[@asset][:results] = date_range ? environment.events.by_range(date_range) : environment.events
130   - end
  104 + @scope = date_range ? environment.events.by_range(date_range) : environment.events
  105 + full_text_search
131 106  
132 107 events = @searches[@asset][:results]
133 108 @calendar = populate_calendar(date, events)
... ... @@ -256,7 +231,7 @@ class SearchController < PublicController
256 231 end
257 232  
258 233 def full_text_search
259   - @searches[@asset] = find_by_contents(asset_class(@asset), @query, paginate_options(params[:page]), {:category => @category})
  234 + @searches[@asset] = find_by_contents(@scope, @query, paginate_options, {:category => @category, :filter => @filter})
260 235 end
261 236  
262 237 private
... ...