search_helper.rb
3.77 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
module SearchHelper
# FIXME remove it after search_controler refactored
include EventsHelper
def relevance_for(hit)
n = (hit.ferret_score if hit.respond_to?(:ferret_score))
n ||= 1.0
(n * 100.0).round
end
def display_results(use_map = true)
unless use_map && GoogleMaps.enabled?(environment.default_hostname)
return render(:partial => 'display_results')
end
data =
if params[:display] == 'map'
{
:partial => 'google_maps',
:toggle => button(:search, _('Display in list'), params.merge(:display => 'list'), :class => "map-toggle-button" ),
:class => 'map' ,
}
else
{
:partial => 'display_results',
:toggle => button(:search, _('Display in map'), params.merge(:display => 'map'), :class => "map-toggle-button" ),
:class => 'list' ,
}
end
content_tag('div', data[:toggle] + (render :partial => data[:partial]), :class => "map-or-list-search-results #{data[:class]}")
end
def product_categories_menu(asset, product_category, object_ids = nil)
cats = ProductCategory.menu_categories(@product_category, environment)
cats += cats.select { |c| c.children_count > 0 }.map(&:children).flatten
product_categories_ids = cats.map(&:id)
counts = @noosfero_finder.product_categories_count(asset, product_categories_ids, object_ids)
product_categories_menu = ProductCategory.menu_categories(product_category, environment).map do |cat|
hits = counts[cat.id]
childs = []
if hits
if cat.children_count > 0
childs = cat.children.map do |child|
child_hits = counts[child.id]
[child, child_hits]
end.select{|child, child_hits| child_hits }
else
childs = []
end
end
[cat, hits, childs]
end.select{|cat, hits| hits }
render(:partial => 'product_categories_menu', :object => product_categories_menu)
end
def facets_menu(asset, _facets)
@asset_class = asset_class(asset)
@facets = _facets
render(:partial => 'facets_menu')
end
def facets_unselect_menu(asset)
@asset_class = asset_class(asset)
render(:partial => 'facets_unselect_menu')
end
def asset_class(asset)
asset.to_s.singularize.camelize.constantize
end
def asset_table(asset)
asset_class(asset).table_name
end
def order_by(asset)
options = {
:products => [[_('Best match'), ''], [_('Name'), 'name_sort asc'], [_('Lower price'), 'price asc'], [_('Higher price'), 'price desc']],
:events => [[_('Best match'), ''], [_('Name'), 'name_sort asc']],
:articles => [[_('Best match'), ''], [_('Name'), 'name_sort asc'], [_('Most recent'), 'updated_at desc']],
:enterprises => [[_('Best match'), ''], [_('Name'), 'name_sort asc']],
:people => [[_('Best match'), ''], [_('Name'), 'name_sort asc']],
:communities => [[_('Best match'), ''], [_('Name'), 'name_sort asc']],
}
content_tag('div', _('Order by ') +
select_tag(asset.to_s + '[order]', options_for_select(options[asset], params[:order_by]),
{:onchange => "window.location=jQuery.param.querystring(window.location.href, { 'order_by' : this.options[this.selectedIndex].value})"}),
:class => "search-ordering")
end
def label_total_found(asset, total_found)
labels = {
:products => _("%s products offers found"),
:articles => _("%s articles found"),
:events => _("%s events found"),
:people => _("%s people found"),
:enterprises => _("%s enterprises found"),
:communities => _("%s communities found"),
}
if labels[asset]
content_tag('span', labels[asset] % total_found,
:class => "total-pages-found")
else
''
end
end
end