search_helper.rb
4.74 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
114
115
116
117
118
119
120
121
122
123
124
125
126
127
module SearchHelper
# FIXME remove it after search_controler refactored
include EventsHelper
STOP_WORDS = {
'pt_BR' => Ferret::Analysis::FULL_PORTUGUESE_STOP_WORDS,
'en' => Ferret::Analysis::FULL_ENGLISH_STOP_WORDS,
}
def relevance_for(hit)
n = (hit.ferret_score if hit.respond_to?(:ferret_score))
n ||= 1.0
(n * 100.0).round
end
def remove_stop_words(query)
(query.downcase.scan(/"[^"]*"?|'[^']*'?|[^'"\s]+/) - (STOP_WORDS[locale] || [])).join(' ')
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 display_item_map_info(item)
if item.kind_of?(Profile)
display_profile_info(item)
elsif item.kind_of?(Product)
display_product_info(item)
end
end
def display_profile_info(profile)
data = ''
unless profile.contact_email.nil?
data << content_tag('strong', _('E-Mail: ')) + profile.contact_email + '<br/>'
end
unless profile.contact_phone.nil?
data << content_tag('strong', _('Phone(s): ')) + profile.contact_phone + '<br/>'
end
unless profile.region.nil?
data << content_tag('strong', _('Location: ')) + profile.region.name + '<br/>'
end
unless profile.address.nil?
data << content_tag('strong', _('Address: ')) + profile.address + '<br/>'
end
unless profile.products.empty?
data << content_tag('strong', _('Products/Services: ')) + profile.products.map{|i| link_to(i.name, :controller => 'manage_products', :profile => profile.identifier, :action => 'show', :id => i.id)}.join(', ') + '<br/>'
end
if profile.respond_to?(:distance) and !profile.distance.nil?
data << content_tag('strong', _('Distance: ')) + "%.2f%" % profile.distance + '<br/>'
end
content_tag('table',
content_tag('tr',
content_tag('td', content_tag('div', profile_image(profile, :thumb), :class => 'profile-info-picture')) +
content_tag('td', content_tag('strong', link_to(profile.name, url_for(profile.url))) + '<br/>' + data
)
),
:class => 'profile-info'
)
end
def display_product_info(product)
data = ''
unless product.price.nil?
data << content_tag('strong', _('Price: ')) + product.price + '<br/>'
end
unless product.enterprise.nil?
data << content_tag('strong', _('Provider: ')) + link_to_profile(product.enterprise.name, product.enterprise.identifier)
end
unless product.product_category.nil?
data << content_tag('strong', _('Category: ')) + link_to(product.product_category.name, :controller => 'search', :action => 'assets', :asset => 'products', :product_category => product.product_category.id)
end
content_tag('table',
content_tag('tr',
content_tag('td', content_tag('div', image_tag(product.image ? product.image.public_filename(:thumb) : '/images/icons-app/product-default-pic-portrait.png'), :class => 'profile-info-picture')) +
content_tag('td', content_tag('strong', link_to(product.name, :controller => 'catalog', :profile => product.enterprise.identifier, :action => 'show', :id => product)) + '<br/>' + data)
), :class => 'profile-info')
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
end