diff --git a/app/views/search/_product.rhtml b/app/views/search/_product.rhtml
index 2a30cb6..613bc20 100644
--- a/app/views/search/_product.rhtml
+++ b/app/views/search/_product.rhtml
@@ -5,9 +5,10 @@ product_item_pos = 0 if ! product_item_pos
product_item_pos += 1
%>
+<% extra_content = @plugins.map(:asset_product_extras, product, product.enterprise).collect { |content| instance_eval(&content) } %>
+
- <%= link_to_product product, :class => 'product-pic', :style => 'background-image:url(%s)' %
- ( product.image ? product.image.public_filename(:minor) : '/images/icons-app/product-default-pic-minor.png' ) %>
+ <%= link_to_product product, :class => 'product-pic', :style => 'background-image:url(%s)' % product.default_image(:minor) %>
<%= link_to_product product %>
@@ -18,4 +19,7 @@ product_item_pos += 1
<% end %>
<%=_('Category:') + ' ' + link_to_product_category(product.product_category) %>
+
+ <%= extra_content.join('\n') %>
+
diff --git a/lib/noosfero/plugin.rb b/lib/noosfero/plugin.rb
index 2c2ea8f..ec74dc1 100644
--- a/lib/noosfero/plugin.rb
+++ b/lib/noosfero/plugin.rb
@@ -103,6 +103,12 @@ class Noosfero::Plugin
nil
end
+ # -> Adds content to products on asset list
+ # returns = lambda block that creates a html code
+ def asset_product_extras(product, enterprise)
+ nil
+ end
+
# -> Adds content to the beginning of the page
# returns = lambda block that creates html code or raw rhtml/html.erb
def body_beginning
diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css
index 5508c17..206409c 100644
--- a/public/stylesheets/application.css
+++ b/public/stylesheets/application.css
@@ -4590,6 +4590,7 @@ h1#agenda-title {
}
.search-results-type-product li.product-item {
+ position: relative;
height: 60px;
overflow: hidden;
}
diff --git a/test/functional/search_controller_test.rb b/test/functional/search_controller_test.rb
index 1f31bcf..a9cc95c 100644
--- a/test/functional/search_controller_test.rb
+++ b/test/functional/search_controller_test.rb
@@ -289,6 +289,27 @@ class SearchControllerTest < Test::Unit::TestCase
assert_equal [prod1], assigns(:results)[:products]
end
+ should 'include extra content supplied by plugins on product asset' do
+ enterprise = fast_create(Enterprise)
+ product = fast_create(Product, :enterprise_id => enterprise.id)
+ plugin1_local_variable = "Plugin1"
+ plugin1_content = lambda {"This is #{plugin1_local_variable} speaking!"}
+ plugin2_local_variable = "Plugin2"
+ plugin2_content = lambda {"This is #{plugin2_local_variable} speaking!"}
+ contents = [plugin1_content, plugin2_content]
+
+ plugins = mock()
+ plugins.stubs(:enabled_plugins).returns([])
+ plugins.stubs(:map).with(:body_beginning).returns([])
+ plugins.stubs(:map).with(:asset_product_extras, product, enterprise).returns(contents)
+ Noosfero::Plugin::Manager.stubs(:new).returns(plugins)
+
+ get :assets, :asset => 'products'
+
+ assert_tag :tag => 'span', :content => 'This is ' + plugin1_local_variable + ' speaking!', :attributes => {:id => 'plugin1'}
+ assert_tag :tag => 'span', :content => 'This is ' + plugin2_local_variable + ' speaking!', :attributes => {:id => 'plugin2'}
+ end
+
should 'paginate enterprise listing' do
@controller.expects(:limit).returns(1)
ent1 = create_profile_with_optional_category(Enterprise, 'teste 1')
--
libgit2 0.21.2