Commit 35733cf407089a2cb4f5b781d4d7de67df057776
1 parent
b13acb43
Exists in
master
and in
29 other branches
Fallback find_by_contens in case there is no search plugin
Showing
2 changed files
with
30 additions
and
41 deletions
Show diff stats
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 | ... | ... |